<?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>184702</bug_id>
          
          <creation_ts>2018-04-17 10:48:46 -0700</creation_ts>
          <short_desc>Templatize CodePtr/Refs/FunctionPtrs with PtrTags.</short_desc>
          <delta_ts>2018-04-18 06:32:34 -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>fpizlo</cc>
    
    <cc>fujii</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tpopela</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1415209</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 10:48:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/35391681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415283</commentid>
    <comment_count>1</comment_count>
      <attachid>338151</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 14:49:37 -0700</bug_when>
    <thetext>Created attachment 338151
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415284</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 14:52:24 -0700</bug_when>
    <thetext>Attachment 338151 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:355:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 3 in 187 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>1415285</commentid>
    <comment_count>3</comment_count>
      <attachid>338152</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 14:53:39 -0700</bug_when>
    <thetext>Created attachment 338152
proposed patch rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415289</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 14:56:23 -0700</bug_when>
    <thetext>Attachment 338152 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:355:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 3 in 187 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>1415293</commentid>
    <comment_count>5</comment_count>
      <attachid>338152</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-17 15:13:33 -0700</bug_when>
    <thetext>Comment on attachment 338152
proposed patch rebased.

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

r=me.  The suggestions about using alternate tags can be addressed in another bug.

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.h:332
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; m_callReturnLocationOrPatchableJump;
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; m_hotPathBeginOrSlowPathStart;
&gt; +    CodeLocationNearCall&lt;JSEntryPtrTag&gt; m_hotPathOther;

I think these should be JSInternalPtrTag, since these are not being used as targets for a JS call.  They are being used to point at some patchable stuff in the call IC.

&gt; Source/JavaScriptCore/ftl/FTLLazySlowPath.h:88
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; m_done;

I think this should be JSInternalPtrTag.  It&apos;s not meant to point to the call entrypoint of anything.

&gt; Source/JavaScriptCore/jit/JITMathIC.h:67
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; doneLocation() { return m_inlineStart.labelAtOffset(m_inlineSize); }
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; slowPathStartLocation() { return m_inlineStart.labelAtOffset(m_deltaFromStartToSlowPathStart); }
&gt; +    CodeLocationCall&lt;JSEntryPtrTag&gt; slowPathCallLocation() { return m_inlineStart.callAtOffset(m_deltaFromStartToSlowPathCallLocation); }

I think these should be JSInternal, since none of these are meant to call to the JS call entrypoint of any function.

&gt; Source/JavaScriptCore/jit/JITMathIC.h:250
&gt; +    CodeLocationLabel&lt;JSEntryPtrTag&gt; m_inlineStart;

ISInternal, because this does not for doing JS calls

&gt; Source/JavaScriptCore/llint/LLIntData.cpp:78
&gt; +        JSEntryPtrTag, // llint_program_prologue
&gt; +        JSEntryPtrTag, // llint_eval_prologue
&gt; +        JSEntryPtrTag, // llint_module_program_prologue
&gt; +        JSEntryPtrTag, // llint_function_for_call_prologue
&gt; +        JSEntryPtrTag, // llint_function_for_construct_prologue
&gt; +        JSEntryPtrTag, // llint_function_for_call_arity_check
&gt; +        JSEntryPtrTag, // llint_function_for_construct_arity_check
&gt; +        JSEntryPtrTag, // llint_generic_return_point
&gt;          BytecodePtrTag, // llint_throw_from_slow_path_trampoline
&gt;          ExceptionHandlerPtrTag, // llint_throw_during_call_trampoline
&gt; -        CodePtrTag, // llint_native_call_trampoline
&gt; -        CodePtrTag, // llint_native_construct_trampoline
&gt; -        CodePtrTag, // llint_internal_function_call_trampoline
&gt; -        CodePtrTag, // llint_internal_function_construct_trampoline
&gt; +        JSEntryPtrTag, // llint_native_call_trampoline
&gt; +        JSEntryPtrTag, // llint_native_construct_trampoline
&gt; +        JSEntryPtrTag, // llint_internal_function_call_trampoline
&gt; +        JSEntryPtrTag, // llint_internal_function_construct_trampoline

It would be cool if we could give these JSInternal since these aren&apos;t meant to be used as targets of JS calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415324</commentid>
    <comment_count>6</comment_count>
      <attachid>338157</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 16:17:39 -0700</bug_when>
    <thetext>Created attachment 338157
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415326</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 16:21:18 -0700</bug_when>
    <thetext>Attachment 338157 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:355:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 3 in 187 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>1415390</commentid>
    <comment_count>8</comment_count>
      <attachid>338170</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 17:38:53 -0700</bug_when>
    <thetext>Created attachment 338170
patch for landing + speculative build fix for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415391</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 17:41:06 -0700</bug_when>
    <thetext>Attachment 338170 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:355:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 3 in 187 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>1415422</commentid>
    <comment_count>10</comment_count>
      <attachid>338179</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 18:44:49 -0700</bug_when>
    <thetext>Created attachment 338179
patch for landing + speculative build fix for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415425</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 18:46:58 -0700</bug_when>
    <thetext>Attachment 338179 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:355:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 3 in 187 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>1415448</commentid>
    <comment_count>12</comment_count>
      <attachid>338179</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-17 20:05:00 -0700</bug_when>
    <thetext>Comment on attachment 338179
patch for landing + speculative build fix for Windows.

Attachment 338179 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/7351388

New failing tests:
stress/ftl-put-by-id-setter-exception-interesting-live-state.js.no-cjit-collect-continuously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415458</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 20:28:36 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #12)
&gt; Comment on attachment 338179 [details]
&gt; patch for landing + speculative build fix for Windows.
&gt; 
&gt; Attachment 338179 [details] did not pass jsc-ews (mac):
&gt; Output: http://webkit-queues.webkit.org/results/7351388
&gt; 
&gt; New failing tests:
&gt; stress/ftl-put-by-id-setter-exception-interesting-live-state.js.no-cjit-
&gt; collect-continuously

I&apos;m quite sure that this is not caused by my patch.  I also cannot reproduce it locally.  Will land shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415459</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-17 20:32:07 -0700</bug_when>
    <thetext>Landed in r230748: &lt;http://trac.webkit.org/r230748&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415518</commentid>
    <comment_count>15</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-18 04:08:39 -0700</bug_when>
    <thetext>WinCairo builds get broken. Bug 184725</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415532</commentid>
    <comment_count>16</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-04-18 06:04:18 -0700</bug_when>
    <thetext>I pushed a build fix for ARM in https://trac.webkit.org/r230762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415533</commentid>
    <comment_count>17</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-04-18 06:05:11 -0700</bug_when>
    <thetext>And also one small for GCC - https://trac.webkit.org/r230761 (that was triggered by our hardening flags in Fedora)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415535</commentid>
    <comment_count>18</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-04-18 06:32:34 -0700</bug_when>
    <thetext>And another build failure on ARM - bug 184730</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338151</attachid>
            <date>2018-04-17 14:49:37 -0700</date>
            <delta_ts>2018-04-17 14:53:39 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184702.patch</filename>
            <type>text/plain</type>
            <size>626494</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyMCBA
QAorMjAxOC0wNC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGVtcGxhdGl6ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgMS4gVGVtcGxhdGl6ZWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
L1JlZiwgRnVuY3Rpb25QdHIsIGFuZCBDb2RlTG9jYXRpb24gdmFyaWFudHMKKyAgICAgICAgICAg
dG8gdGFrZSBhIFB0clRhZyB0ZW1wbGF0ZSBhcmd1bWVudC4KKyAgICAgICAgMi4gUmVwbGFjZWQg
c29tZSB1c2VzIG9mIHJhdyBwb2ludGVycyB3aXRoIHRoZSBlcXVpdmFsZW50IENvZGVQdHIgLyBG
dW5jdGlvblB0ci4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmxpbmtK
dW1wKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNz
KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXApOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3QpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlYWRQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhMb2FkKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRp
b24pOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ29tbW9uOjogY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25D
b21tb246OkNvZGVMb2NhdGlvbkNvbW1vbik6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbklu
c3RydWN0aW9uOjpDb2RlTG9jYXRpb25JbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVM
b2NhdGlvbkxhYmVsOjpDb2RlTG9jYXRpb25MYWJlbCk6CisgICAgICAgIChKU0M6OkNvZGVMb2Nh
dGlvbkxhYmVsOjpyZXRhZ2dlZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkxhYmVsOjog
Y29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25KdW1wOjpDb2RlTG9jYXRpb25KdW1w
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uSnVtcDo6cmV0YWdnZWQpOgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25DYWxsOjpDb2RlTG9jYXRpb25DYWxsKToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ2FsbDo6cmV0YWdnZWQpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25O
ZWFyQ2FsbDo6Q29kZUxvY2F0aW9uTmVhckNhbGwpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRp
b25EYXRhTGFiZWwzMjo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIpOgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0OjpDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOjpDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ6
OkNvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz46OmxhYmVsQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25Db21tb248dGFnPjo6anVtcEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OmNhbGxBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpuZWFyQ2FsbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbDMyQXRPZmZzZXQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmNvbnZlcnRpYmxlTG9hZEF0T2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjppbnN0cnVjdGlvbkF0T2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpsYWJlbEF0
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpqdW1w
QXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21tb246OmNh
bGxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6
bmVhckNhbGxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
TG9jYXRpb25Db21tb246OmRhdGFMYWJlbDMyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6Y29udmVydGlibGVMb2FkQXRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1w
bCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJs
eUltcGwpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNv
ZGVXaXRoRGlzYXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpwYXRjaCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmVudHJ5cG9pbnQp
OgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsb2NhdGlvbk9mKToKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1
ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1
ZmZlcjo6dHJhbXBvbGluZUF0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlYWRDYWxsVGFyZ2V0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlcGxhY2VXaXRoSnVtcCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRP
ZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJl
cGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxpbmtDYWxsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OnJlcGxhY2VXaXRoVk1IYWx0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJX
aXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXBh
dGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTXY3OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNdjc6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9C
cmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
T25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJy
YW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVw
YXRjaENhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpsaW5rQ2FsbCk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1
bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6dHJ5VG9EaXNhc3NlbWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZGlzYXNzZW1ibHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmR1bXAgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Q
dHI6OnJldGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OnJldGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpvcGVyYXRvciE9IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6UmV0dXJuQWRkcmVzc1B0cjo6UmV0dXJuQWRkcmVzc1B0cik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJl
dGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjogY29u
c3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBj
b25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkQ29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6cmV0YWdnZWQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1ibGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJN
SVBTOjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b0JyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZWFkQ2Fs
bFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODY6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODY6OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGF0Y2hDb21w
YWN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VXaXRo
Vk1IYWx0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VX
aXRoSnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9m
QnJhbmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RhcnRPZlBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2Vt
Ymxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjppbnZva2UpOgorICAgICAgICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVy
KToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNv
bXBpbGF0aW9uOjpDb21waWxhdGlvbik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5oOgor
ICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6Q29tcGlsYXRpb246OmNvZGVSZWYgY29uc3QpOgorICAgICAgICAqIGIzL0IzQ29tcGls
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
TWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIv
dGVzdGFpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6
Omludm9rZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdEVudHJ5U3dpdGNoU2ltcGxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RF
bnRyeVN3aXRjaE5vRW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEVudHJ5U3dp
dGNoV2l0aENvbW1vblBhdGhzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFdp
dGhDb21tb25QYXRoc0FuZE5vblRyaXZpYWxFbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RFbnRyeVN3aXRjaExvb3ApOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1Bh
dGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6QnlWYWxJbmZvOjpCeVZhbEluZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6Y2FsbFJldHVybkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjpwYXRjaGFibGVKdW1wKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpob3RQYXRo
QmVnaW4pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OnNldENhbGxMb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmhvdFBh
dGhPdGhlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFu
dCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkVmFyaWFudDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIgY29uc3QpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZHVtcEltcGwgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNl
dHRlckFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6
Y3VzdG9tQWNjZXNzb3IgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpIYW5kbGVySW5mbzo6aW5pdGlh
bGl6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6bGlua0NvZGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0
aUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6
CisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6
TExJbnRDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRF
eHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vz
czo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoK
KyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6QWNjZXNzR2VuZXJhdGlvblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OmNvZGUgY29uc3Qp
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjpzbG93UGF0aENhbGxMb2NhdGlvbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjpkb25lTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6c2xvd1BhdGhTdGFydExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OnBhdGNoYWJsZUp1bXBGb3JJbik6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphcHBlbmRDYXRjaEVudHJ5
cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkRpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNv
bXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZUNh
dGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Q2FsbExpbmtSZWNvcmQ6OkNhbGxMaW5rUmVjb3JkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6SlNEaXJlY3RDYWxsUmVjb3JkOjpKU0RpcmVjdENhbGxSZWNvcmQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpK
U0RpcmVjdFRhaWxDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklU
RmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oOgorICAgICAg
ICAoSlNDOjpERkc6Okp1bXBSZXBsYWNlbWVudDo6SnVtcFJlcGxhY2VtZW50KToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJl
Q2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFk
anVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29kZUxv
Y2F0aW9uRm9yUmVwYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRD
b3VudHMpOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAg
ICAgICAoSlNDOjpERkc6Om9zcldyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6YWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Q2FsbFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kQXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRB
bmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6dW5wYWNrQW5kR2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJ
Qyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERp
cmVjdFBuYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6YXBwZW5kQ2FsbFNldFJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRH
ZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6Cisg
ICAgICAgICogZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6ZGlzYXNz
ZW1ibGVBc3luY2hyb25vdXNseSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkaXNhc3Nl
bWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZVdpdGhVRGlzODYpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYpOgorICAgICAg
ICAqIGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjp0cnlU
b0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpsYWJlbCk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyk6CisgICAgICAgICogZnRsL0ZUTEV4Y2Vw
dGlvblRhcmdldC5oOgorICAgICAgICAqIGZ0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpp
bml0aWFsaXplQjNDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjppbml0aWFsaXpl
QWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkZU
TDo6SklUQ29kZTo6YjNDb2RlIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToK
KyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpM
YXp5U2xvd1BhdGg6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0
aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OnBhdGNoYWJsZUp1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpGVEw6OkxhenlTbG93UGF0aDo6ZG9uZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TGF6eVNsb3dQYXRoOjpzdHViIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRo
Q2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVEaXJlY3RDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCBjb25z
dCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
SGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRo
dW5rKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKiBmdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250
ZXh0OjprZXlXaXRoVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGZ0bC9GVExTbG93
UGF0aENhbGxLZXkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6ZHVt
cCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgorICAgICAgICAo
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6U2xvd1BhdGhDYWxsS2V5KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OmNhbGxUYXJnZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbEtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsS2V5OjpjYWxsUHRyVGFnIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwv
RlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAg
ICogZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAoSlNDOjpGVEw6
OmdlbmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6OmtleUZvclRodW5rKToK
KyAgICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmdldFNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpUaHVua3M6OmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmdldE9wY29kZUlEKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eik6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKToKKyAgICAgICAgKiBqaXQvQ0NhbGxI
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVNlcGFy
YXRlZFdYSGVhcHMpOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGpp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NB
d2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpj
cmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAoSlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OmN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6
OkNhbGxSZWNvcmQpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q1Nsb3cpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0
L0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZik6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6
CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZSk6CisgICAgICAgIChKU0M6Ok5hdGl2
ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29k
ZTo6YWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgICog
aml0L0pJVENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmNvZGVMb2NhdGlvbik6CisgICAg
ICAgIChKU0M6OkpJVENvZGVNYXA6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6
OmZpbmQgY29uc3QpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpKSVREaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseSk6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKSVRC
eUlkR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWRDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TmFrZWRUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a0FuZFNsb3dQYXRoUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZSk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjppc1Byb2Zp
bGVFbXB0eSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdl
dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OkpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cik6CisgICAg
ICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0
aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3Rp
bmdDVElTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToK
KyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICogaml0L1BDVG9Db2RlT3JpZ2lu
TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2lu
TWFwKToKKyAgICAgICAgKiBqaXQvUENUb0NvZGVPcmlnaW5NYXAuaDoKKyAgICAgICAgKiBqaXQv
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAq
IGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9SZXBhdGNo
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZFB1dElDQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6
OmZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2V0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW4pOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6Cisg
ICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRGlyZWN0Rm9yKToKKyAg
ICAgICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0Zvcik6CisgICAg
ICAgIChKU0M6OmxpbmtWaXJ0dWFsRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0
UHV0QnlJRCk6CisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBqaXQvU2xvd1Bh
dGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6CisgICAgICAg
ICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpj
YWxsRG91YmxlVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpj
YWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAg
KEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Om5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVh
Y2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpm
cm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNsejMyVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6dHJ1bmNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnJv
dW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpleHBUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YWJzVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjppbXVsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpyYW5kb21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJn
c0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5o
OgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENv
ZGVQdHIpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIpOgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlw
b2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRGdW5jdGlvbkVudHJ5cG9pbnQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpM
TEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0TW9k
dWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OnZtRW50cnlUb1dhc20pOgorICAgICAg
ICAoSlNDOjpMTEludDo6Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8pOgorICAgICAgICAoSlNDOjpM
TEludDo6ZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkxMSW50OjpmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmV2YWxFbnRyeVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6Om1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OkNvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJDb21waWxhdGlvbi5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNp
dGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdFNpdGU6OnRvSlMgY29uc3Qp
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjpPU1JFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPU1JFeGl0U2l0ZTo6Y29kZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6T1NSRXhpdFNpdGU6OiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlQmFzZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVh
ckNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmVudHJ5cG9pbnRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmg6CisgICAgICAg
IChKU0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpUYWdnZWROYXRpdmVGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpvcGVyYXRvciBOYXRpdmVGdW5jdGlvbik6
CisgICAgICAgICogcnVudGltZS9QdHJUYWcuaDoKKyAgICAgICAgKEpTQzo6dGFnQ29kZVB0cik6
CisgICAgICAgIChKU0M6OnVudGFnQ29kZVB0cik6CisgICAgICAgIChKU0M6OnJldGFnQ29kZVB0
cik6CisgICAgICAgIChKU0M6OnRhZ0NGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6OnVudGFn
Q0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6bmV4dFB0clRhZ0lEKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xv
dDo6c2V0Q3VzdG9tVmFsdWUpOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1
c3RvbUFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpjdXN0b21TZXR0
ZXIgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKToKKyAgICAgICAgKiBydW50
aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldEhvc3RGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcik6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJU3R1Yik6CisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0RXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNv
bXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9X
YXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAg
ICAqIHdhc20vV2FzbUJpbmRpbmcuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjplbnRyeXBvaW50IGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5n
Q29udmVudGlvbjo6c2V0dXBGcmFtZUluUHJvbG9ndWUgY29uc3QpOgorICAgICAgICAqIHdhc20v
V2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxl
cik6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6Oldh
c206OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuaDoK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6aGFuZGxlQmFkSTY0VXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgor
ICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaDoKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpsb2FkRnJvbUZyYW1lQW5kSnVtcCk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjpsaW5rRGF0YUxhYmVs
cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAg
ICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpz
ZXQ4Qml0Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2Qml0
Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlTWF0
Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2Rl
TWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmNsZWFyKToKKwogMjAxOC0wNC0x
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PD46OnZpc2l0Q2hpbGRyZW4gaGFzIGEgcmFjZSBjb25kaXRpb24gcmVhZGlu
ZyBtX21vZGUgYW5kIG1fdmVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjMw
NjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDggQEAgcHVibGljOgogICAgIHR5
cGVkZWYgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyVHlwZTsKICAgICB0eXBlZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9U
OwogCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRh
Zz47CiAKICAgICBjbGFzcyBKdW1wOwogCkBAIC0zOTQsNyArMzk0LDcgQEAgcHVibGljOgogICAg
ICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPjsK
ICAgICAgICAgZnJpZW5kIHN0cnVjdCBERkc6Ok9TUkV4aXQ7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKdW1wOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOworICAg
ICAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgICAgICBmcmllbmQgY2xhc3Mg
V2F0Y2hwb2ludDsKIApAQCAtODQzLDkgKzg0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBBc3NlbWJsZXJUeXBlOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhmcm9tLm1fbGFiZWws
IHRvLm1fbGFiZWwpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYSwgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHRlbXBsYXRlPFB0clRhZyBhVGFnLCBQdHJUYWcgYlRh
Zz4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8YVRhZz4mIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxiVGFnPiYgYikKICAgICB7Ci0gICAgICAgIHJldHVybiBiLmV4ZWN1dGFibGVBZGRyZXNzPHB0
cmRpZmZfdD4oKSAtIGEuZXhlY3V0YWJsZUFkZHJlc3M8cHRyZGlmZl90PigpOworICAgICAgICBy
ZXR1cm4gYi50ZW1wbGF0ZSBkYXRhTG9jYXRpb248cHRyZGlmZl90PigpIC0gYS50ZW1wbGF0ZSBk
YXRhTG9jYXRpb248cHRyZGlmZl90PigpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGRlYnVnT2Zm
c2V0KCkgeyByZXR1cm4gbV9hc3NlbWJsZXIuZGVidWdPZmZzZXQoKTsgfQpAQCAtODU3LDcgKzg1
OCw4IEBAIHB1YmxpYzoKIAogICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CiAgICAgCi0g
ICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCB0YXJnZXQpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9p
ZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
dGFyZ2V0KQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua0p1bXAoY29kZSwganVt
cC5tX2xhYmVsLCB0YXJnZXQuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KQEAgLTg2NywxMiArODY5
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwg
bGFiZWwsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lk
KiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHZhbHVl
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIo
dm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IHZhbHVlKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29k
ZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkKiBnZXRMaW5rZXJBZGRyZXNzKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVs
LCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBz
dGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBs
YWJlbCkKICAgICB7CiAgICAgICAgIHJldHVybiB0YWdDb2RlUHRyKEFzc2VtYmxlclR5cGU6Omdl
dFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbGFiZWwpLCB0YWcpOwogICAgIH0KQEAgLTg4Miw1NiAr
ODg2LDY0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldENhbGxS
ZXR1cm5PZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBh
dGNoSnVtcChDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoSnVtcChDb2RlTG9jYXRpb25KdW1wPGp1bXBUYWc+IGp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQXNz
ZW1ibGVyVHlwZTo6cmVsaW5rSnVtcChqdW1wLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5k
YXRhTG9jYXRpb24oKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1w
VG9Ob3AoQ29kZUxvY2F0aW9uSnVtcCBqdW1wKQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wVG9Ob3AoQ29kZUxvY2F0aW9uSnVtcDxqdW1w
VGFnPiBqdW1wKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rSnVtcFRvTm9w
KGp1bXAuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hO
ZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hOZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbDxj
YWxsVGFnPiBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24p
CiAgICAgewotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZGVzdGluYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgTmVhckNvZGVQdHJUYWcpOwogICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CiAgICAgICAgICAg
ICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtKdW1wKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0
aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVs
aW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxs
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3Qo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZh
bHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENv
bXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+IGRhdGFMYWJlbENvbXBhY3Qs
IGludDMyX3QgdmFsdWUpCiAgICAgewotICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoQ29t
cGFjdChkYXRhTGFiZWxDb21wYWN0LmRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7CisgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QudGVtcGxhdGUgZGF0
YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVwYXRj
aEludDMyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyLCBpbnQzMl90IHZhbHVl
KQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50
MzIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBkYXRhTGFiZWwzMiwgaW50MzJfdCB2YWx1
ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hJbnQzMihkYXRhTGFiZWwz
Mi5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hQb2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIsIHZvaWQqIHZh
bHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBv
aW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gZGF0YUxhYmVsUHRyLCB2b2lkKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFM
YWJlbFB0ci5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
dm9pZCogcmVhZFBvaW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0cikK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGRhdGFMYWJlbFB0cikKICAgICB7CiAgICAg
ICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpyZWFkUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxv
Y2F0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aExvYWQo
Q29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVMb2NhdGlvbkNvbnZlcnRp
YmxlTG9hZDx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwbGFj
ZVdpdGhMb2FkKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29udmVydGli
bGVMb2FkIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbihDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VXaXRo
QWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHJldmlz
aW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogZW51bSBOZWFyQ2FsbE1vZGUgeyBSZWd1bGFyLCBUYWlsIH07CiAKLWNsYXNzIENvZGVMb2Nh
dGlvbkluc3RydWN0aW9uOwotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWw7Ci1jbGFzcyBDb2RlTG9j
YXRpb25KdW1wOwotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbDsKLWNsYXNzIENvZGVMb2NhdGlvbk5l
YXJDYWxsOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDsKLWNsYXNzIENvZGVM
b2NhdGlvbkRhdGFMYWJlbDMyOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwotY2xh
c3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBD
b2RlTG9jYXRpb25JbnN0cnVjdGlvbjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0
aW9uTGFiZWw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkp1bXA7Cit0ZW1w
bGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNhbGw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9j
YXRpb25EYXRhTGFiZWxDb21wYWN0OwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25EYXRhTGFiZWwzMjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwgcHJldHR5IG11Y2ggZG8t
bm90aGluZyB3cmFwcGVycyBhcm91bmQKIC8vIENvZGVQdHIgKG9yIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCkBAIC01NCwxNjkgKzU0LDIx
MiBAQCBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ7CiAvLyBvZmZzZXRzIGFwYXJ0
LiAgVG8gcmVkdWNlIG1lbW9yeSBvdmVyaGVhZCB3ZSB3aWxsIG9ubHkgcmV0YWluIGEgcG9pbnRl
ciB0bwogLy8gb25lIG9mIHRoZSBpbnN0cnVjdGlvbnMsIGFuZCB3ZSB3aWxsIHVzZSB0aGUgKkF0
T2Zmc2V0IG1ldGhvZHMgcHJvdmlkZWQgYnkKIC8vIENvZGVMb2NhdGlvbkNvbW1vbiB0byBmaW5k
IHRoZSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGUgdG8gbW9kaWZ5LgotY2xhc3MgQ29kZUxvY2F0
aW9uQ29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB7Ci1wdWJsaWM6Ci0gICAg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KTsK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlv
bkNhbGwgY2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
IG5lYXJDYWxsQXRPZmZzZXQoaW50IG9mZnNldCwgTmVhckNhbGxNb2RlKTsKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KTsK
LSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgY29udmVydGli
bGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCk7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3Mg
Q29kZUxvY2F0aW9uQ29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHsK
KyAgICB1c2luZyBCYXNlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CitwdWJsaWM6Cisg
ICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rp
b248cmVzdWx0VGFnPiBpbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBs
YXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4g
bGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
ID0gdGFnPiBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4ganVtcEF0T2Zmc2V0KGludCBvZmZz
ZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkNh
bGw8cmVzdWx0VGFnPiBjYWxsQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uTmVhckNhbGw8cmVzdWx0VGFnPiBuZWFy
Q2FsbEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4g
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8cmVzdWx0VGFnPiBkYXRhTGFi
ZWwzMkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8cmVzdWx0VGFnPiBkYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZyA9IHRhZz4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkPHJlc3VsdFRhZz4gY29udmVydGli
bGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
dm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBCYXNlOjp0ZW1wbGF0
ZSBkYXRhTG9jYXRpb248VD4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQ29kZUxvY2F0aW9uQ29t
bW9uKCkKICAgICB7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9j
YXRpb24pCisgICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IGxvY2F0aW9uKQorICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9u
KQogICAgIHsKICAgICB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENv
ZGVMb2NhdGlvbkluc3RydWN0aW9uIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsK
IHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbigpIHt9Ci0gICAgZXhwbGljaXQg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQot
ICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRp
b25JbnN0cnVjdGlvbigpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkluc3RydWN0aW9u
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25J
bnN0cnVjdGlvbih2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRp
b25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQog
fTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9u
IHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25MYWJlbCA6IHB1Ymxp
YyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwoKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25M
YWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0
aW9uTGFiZWwodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKwor
ICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8bmV3VGFn
PiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPG5ld1RhZz4oQ29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIHsg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6cmV0YWdnZWQo
b2xkVGFnLCBuZXdUYWcpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAg
ICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBDb2RlTG9jYXRp
b25Db21tb248dGFnPjo6dGVtcGxhdGUgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxUPigpOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUgZGF0YUxv
Y2F0aW9uPFQ+KCk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkp1bXAgOiBwdWJsaWMgQ29k
ZUxvY2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRp
b25KdW1wIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBD
b2RlTG9jYXRpb25KdW1wKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24o
bG9jYXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uSnVtcCgpIHsgfQorICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAg
ICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbkp1bXAodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29k
ZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24p
KSB7IH0KIAotICAgIENvZGVMb2NhdGlvbkp1bXAgcmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRy
VGFnIG5ld1RhZykgeyByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KKyAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3
VGFnPgorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6dGVtcGxh
dGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNz
IENvZGVMb2NhdGlvbkNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVi
bGljOgotICAgIENvZGVMb2NhdGlvbkNhbGwoKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9CisgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2Nh
dGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAg
ICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBD
b2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
Pihsb2NhdGlvbikpIHsgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2Rl
TG9jYXRpb25DYWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxs
PG5ld1RhZz4oQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1Rh
Zz4oKSk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9u
TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgotICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25OZWFy
Q2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24sIE5lYXJDYWxsTW9kZSBjYWxsTW9k
ZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pLCBtX2NhbGxNb2RlKGNh
bGxNb2RlKSB7IH0KKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCgpIHsgfQorICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9u
LCBOZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRh
Zz4obG9jYXRpb24pLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KICAgICBleHBsaWNpdCBDb2Rl
TG9jYXRpb25OZWFyQ2FsbCh2b2lkKiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQot
ICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRp
b24pKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwgbV9jYWxsTW9k
ZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyByZXR1cm4gbV9j
YWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9kZSA9IE5lYXJD
YWxsTW9kZTo6UmVndWxhcjsKIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3Mg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4g
ewogcHVibGljOgotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KLSAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24p
Ci0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyKCkgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
MzIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkRhdGFMYWJlbDMyKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9
CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsQ29tcGFjdCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJs
aWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCgpIHsgfQotICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0
aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikgeyB9CisgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlv
bikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBs
b2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxh
dGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBD
b2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihs
b2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoKSB7IH0KKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4g
bG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsg
fQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlvbikK
LSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0
aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJs
ZUxvYWQoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bihsb2NhdGlvbikgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2Fk
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25D
b252ZXJ0aWJsZUxvYWQodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkg
eyB9CiB9OwogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gQ29kZUxvY2F0aW9uQ29t
bW9uOjppbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25JbnN0cnVj
dGlvbjxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zm
c2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7
Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uKGRhdGFMb2NhdGlvbjxjaGFyKj4o
KSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uPHJlc3VsdFRh
Zz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkp
OwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgQ29kZUxvY2F0aW9uQ29tbW9uOjpsYWJl
bEF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25MYWJlbDxyZXN1bHRUYWc+IENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+OjpsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkxh
YmVsKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxj
aGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSnVtcCBDb2RlTG9j
YXRpb25Db21tb246Omp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRh
Zz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uSnVtcDxy
ZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpqdW1wQXRPZmZzZXQoaW50IG9mZnNl
dCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uSnVtcChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
Q2FsbCBDb2RlTG9jYXRpb25Db21tb246OmNhbGxBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxh
dGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxv
Y2F0aW9uQ2FsbDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpjYWxsQXRPZmZz
ZXQoaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsK
LSAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZz
ZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxy
ZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUg
Q29kZUxvY2F0aW9uTmVhckNhbGwgQ29kZUxvY2F0aW9uQ29tbW9uOjpuZWFyQ2FsbEF0T2Zmc2V0
KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkKK3RlbXBsYXRlPFB0clRhZyB0YWc+
Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbk5lYXJDYWxs
PHJlc3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46Om5lYXJDYWxsQXRPZmZzZXQoaW50
IG9mZnNldCwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RF
X09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChkYXRhTG9j
YXRpb248Y2hhcio+KCkgKyBvZmZzZXQsIGNhbGxNb2RlKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTmVhckNhbGw8cmVzdWx0VGFnPih0YWdDb2RlUHRyPHJlc3VsdFRhZz4oZGF0YUxvY2F0aW9u
PGNoYXIqPigpICsgb2Zmc2V0KSwgY2FsbE1vZGUpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIENvZGVMb2NhdGlvbkNvbW1vbjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50
IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
PgoraW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxyZXN1bHRUYWc+IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxQdHJBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFT
U0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+
KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsMzIgQ29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGlu
dCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
Zz4KK2lubGluZSBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjxyZXN1bHRUYWc+IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsQ29tcGFjdCBDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDxyZXN1bHRUYWc+
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoaW50IG9m
ZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1
cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBv
ZmZzZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHJlc3VsdFRh
Zz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkp
OwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIENvZGVMb2NhdGlvbkNv
bW1vbjo6Y29udmVydGlibGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRh
ZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkNv
bnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0
aWJsZUxvYWRBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09G
RlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoZGF0
YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlv
bjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNp
b24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjAgKzQ0LDIwIEBAIGJvb2wgc2hvdWxkRHVtcERp
c2Fzc2VtYmx5Rm9yKENvZGVCbG9jayoKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCk7CiB9CiAKLUxpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2Rl
V2l0aG91dERpc2Fzc2VtYmx5KFB0clRhZyB0YWcpCitMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtC
dWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUlt
cGwoKQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKICAgICAKICAgICBBU1NFUlQobV9k
aWRBbGxvY2F0ZSk7CiAgICAgaWYgKG1fZXhlY3V0YWJsZU1lbW9yeSkKLSAgICAgICAgcmV0dXJu
IENvZGVSZWYoKm1fZXhlY3V0YWJsZU1lbW9yeSwgdGFnKTsKKyAgICAgICAgcmV0dXJuIENvZGVS
ZWY8TGlua0J1ZmZlclB0clRhZz4oKm1fZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgCi0gICAgcmV0
dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIodGFnQ29kZVB0cihtX2NvZGUsIHRhZykpKTsKKyAgICByZXR1cm4gQ29kZVJlZjxMaW5rQnVm
ZmVyUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fY29kZSkp
KTsKIH0KIAotTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRo
RGlzYXNzZW1ibHkoUHRyVGFnIHRhZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCitMaW5rQnVm
ZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdp
dGhEaXNhc3NlbWJseUltcGwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7Ci0gICAgQ29kZVJl
ZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkodGFnKTsKKyAgICBDb2Rl
UmVmPExpbmtCdWZmZXJQdHJUYWc+IHJlc3VsdCA9IGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseUltcGwoKTsKIAogICAgIGlmIChtX2FscmVhZHlEaXNhc3NlbWJsZWQpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC03MCwxOCArNzAsMTkgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5r
QnVmZmVyOjpmaW5hbGl6ZQogICAgIHZhX2VuZChhcmdMaXN0KTsKICAgICBvdXQucHJpbnRmKCI6
XG4iKTsKIAotICAgIHVpbnQ4X3QqIGV4ZWN1dGFibGVBZGRyZXNzID0gcmVtb3ZlQ29kZVB0clRh
Zzx1aW50OF90Kj4ocmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50
OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzczx1aW50OF90Kj4oKTsKICAgICBvdXQucHJpbnRmKCIgICAgQ29kZSBhdCBbJXAsICVw
KTpcbiIsIGV4ZWN1dGFibGVBZGRyZXNzLCBleGVjdXRhYmxlQWRkcmVzcyArIHJlc3VsdC5zaXpl
KCkpOwogICAgIAogICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwogICAgIAog
ICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGlzYXNzZW1i
bGVBc3luY2hyb25vdXNseShoZWFkZXIsIHJlc3VsdCwgbV9zaXplLCAiICAgICIpOworICAgICAg
ICBDb2RlUmVmPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUmVmRm9yRGlzYXNzZW1ibHkgPSByZXN1
bHQucmV0YWdnZWQ8RGlzYXNzZW1ibHlQdHJUYWc+KCk7CisgICAgICAgIGRpc2Fzc2VtYmxlQXN5
bmNocm9ub3VzbHkoaGVhZGVyLCBXVEZNb3ZlKGNvZGVSZWZGb3JEaXNhc3NlbWJseSksIG1fc2l6
ZSwgIiAgICAiKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgZGF0
YUxvZyhoZWFkZXIpOwotICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5jb2RlKCksIG1fc2l6ZSwgIiAg
ICAiLCBXVEY6OmRhdGFGaWxlKCkpOworICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5yZXRhZ2dlZENv
ZGU8RGlzYXNzZW1ibHlQdHJUYWc+KCksIG1fc2l6ZSwgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCkp
OwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDggKzYxLDggQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgTGlua0J1ZmZlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+OwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIExhYmVsOwogICAgIHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgSnVtcDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIFBhdGNoYWJsZUp1bXA7CkBAIC0xMjEsMzIgKzEyMSwzNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNl
dCB2YWx1ZXMgYXQgY29kZSBnZW5lcmF0aW9uIHRpbWUuCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgotICAgIHZvaWQg
bGluayhDYWxsIGNhbGwsIEZ1bmMgZnVuY05hbWUsIFB0clRhZyB0YWcpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZywgdHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jPjo6dHlwZT46
OnZhbHVlPj4KKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jIGZ1bmNOYW1lKQogICAgIHsK
LSAgICAgICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24oZnVuY05hbWUsIHRhZyk7CisgICAgICAgIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24oZnVuY05hbWUpOwogICAgICAgICBsaW5rKGNhbGwsIGZ1
bmN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBm
dW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoY2Fs
bC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKICAgICAgICAgY2FsbC5tX2xhYmVsID0gYXBw
bHlPZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGxpbmsoQ2Fs
bCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwp
CiAgICAgewotICAgICAgICBsaW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxhYmVsKSk7CisgICAgICAg
IGxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8dGFnPihsYWJlbCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBqdW1wLm1fbGFiZWwgPSBhcHBseU9mZnNldChq
dW1wLm1fbGFiZWwpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSgpLCBq
dW1wLCBsYWJlbCk7CiAgICAgfQogCi0gICAgdm9pZCBsaW5rKGNvbnN0IEp1bXBMaXN0JiBsaXN0
LCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IHZvaWQgbGluayhjb25zdCBKdW1wTGlzdCYgbGlzdCwgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBs
YWJlbCkKICAgICB7CiAgICAgICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGxpc3QuanVtcHMo
KSkKICAgICAgICAgICAgIGxpbmsoanVtcCwgbGFiZWwpOwpAQCAtMTU4LDcgKzE2Miw4IEBAIHB1
YmxpYzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgdGFyZ2V0
LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENv
ZGVMb2NhdGlvbkxhYmVsIHZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgdm9p
ZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gdmFsdWUp
CiAgICAgewogICAgICAgICBBc3NlbWJsZXJMYWJlbCB0YXJnZXQgPSBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwg
dGFyZ2V0LCB2YWx1ZSk7CkBAIC0xNjYsNTQgKzE3MSw2MyBAQCBwdWJsaWM6CiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIG9idGFpbiBoYW5kbGVzIHRvIGFsbG93IHRoZSBjb2Rl
IHRvIGJlIHJlbGlua2VkIC8gcmVwYXRjaGVkIGxhdGVyLgogICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5cG9pbnQoKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPiBlbnRyeXBvaW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2Rl
TG9jYXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8
dGFnPih0YWdDb2RlUHRyPHRhZz4oY29kZSgpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
Q2FsbCBsb2NhdGlvbk9mKENhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IENvZGVMb2NhdGlvbkNhbGw8dGFnPiBsb2NhdGlvbk9mKENhbGwgY2FsbCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NF
UlQoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9m
ZnNldChjYWxsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHRh
Zz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zm
c2V0KGNhbGwubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBs
b2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8dGFnPiBsb2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxs
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7
CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVz
cyhjb2RlKCksIGFwcGx5T2Zmc2V0KGNhbGwubV9sYWJlbCkpLAorICAgICAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTmVhckNhbGw8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0
YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSksCiAgICAgICAgICAgICBjYWxs
LmlzRmxhZ1NldChDYWxsOjpUYWlsKSA/IE5lYXJDYWxsTW9kZTo6VGFpbCA6IE5lYXJDYWxsTW9k
ZTo6UmVndWxhcik7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQ
YXRjaGFibGVKdW1wIGp1bXAsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25PZihQYXRjaGFi
bGVKdW1wIGp1bXApCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFj
cm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChqdW1wLm1f
anVtcC5tX2xhYmVsKSwgdGFnKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0
YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9m
ZnNldChqdW1wLm1fanVtcC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0
ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25P
ZihMYWJlbCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVs
Lm1fbGFiZWwpLCB0YWcpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4o
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0
KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IGxvY2F0aW9uT2YoRGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbG9jYXRpb25PZihEYXRhTGFiZWxQ
dHIgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFi
ZWwubV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0
YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9m
ZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIGxvY2F0aW9uT2YoRGF0YUxhYmVsMzIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxvY2F0aW9uT2YoRGF0YUxhYmVs
MzIgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIo
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFn
PihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZz
ZXQobGFiZWwubV9sYWJlbCkpKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdCBsb2NhdGlvbk9mKERhdGFMYWJlbENvbXBhY3QgbGFiZWwpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHRhZz4gbG9j
YXRpb25PZihEYXRhTGFiZWxDb21wYWN0IGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJl
c3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5r
ZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAg
IH0KIAotICAgIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsb2NhdGlvbk9mKENvbnZlcnRp
YmxlTG9hZExhYmVsIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxv
Y2F0aW9uQ29udmVydGlibGVMb2FkPHRhZz4gbG9jYXRpb25PZihDb252ZXJ0aWJsZUxvYWRMYWJl
bCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChs
YWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVM
b2FkPHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFw
cGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2Qg
b2J0YWlucyB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGNhbGwsIGdpdmVuIGFzIGFuIG9mZnNl
dCBmcm9tCkBAIC0yMzgsMTMgKzI1MiwzMSBAQCBwdWJsaWM6CiAgICAgLy8gY29tcGxldGUgZ2Vu
ZXJhdGlvbiBvZiB0aGUgY29kZS4gQWx0ZXJuYXRpdmVseSwgY2FsbAogICAgIC8vIGZpbmFsaXpl
Q29kZVdpdGhvdXREaXNhc3NlbWJseSgpIGRpcmVjdGx5IGlmIHlvdSBoYXZlIHlvdXIgb3duIHdh
eSBvZgogICAgIC8vIGRpc3BsYXlpbmcgZGlzYXNzZW1ibHkuCi0gICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29kZVJlZiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoUHRyVGFnKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmIGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJs
eShQdHJUYWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigz
LCA0KTsKIAotICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQorICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgQ29kZVJlZjx0YWc+IGZpbmFsaXplQ29kZVdpdGhvdXREaXNh
c3NlbWJseSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5SW1wbCgpLnRlbXBsYXRlIHJldGFnZ2VkPHRhZz4oKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIENvZGVSZWY8dGFnPiBmaW5h
bGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgeworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFs
IgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LXNlY3VyaXR5Igor
I2VuZGlmCisgICAgICAgIHJldHVybiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGZv
cm1hdCwgYXJncy4uLikudGVtcGxhdGUgcmV0YWdnZWQ8dGFnPigpOworI2lmIENPTVBJTEVSKENM
QU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgfQorCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlUHRyPHRhZz4gdHJhbXBvbGluZUF0KExhYmVs
IGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVQdHIoTWFjcm9Bc3NlbWJsZXI6OkFz
c2VtYmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxh
YmVsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHRhZz4oTWFjcm9Bc3NlbWJs
ZXI6OkFzc2VtYmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zm
c2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgdm9pZCogZGVidWdBZGRyZXNzKCkK
QEAgLTI1OCw2ICsyOTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1i
bGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdp
dGhvdXREaXNhc3NlbWJseUltcGwoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExp
bmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUltcGwoY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpOworCiAjaWYgRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2Nh
dGlvbikKICAgICB7CkBAIC0zMTYsOCArMzUxLDggQEAgcHJpdmF0ZToKIAogI2RlZmluZSBGSU5B
TElaRV9DT0RFX0lGKGNvbmRpdGlvbiwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFn
LCAuLi4pICBcCiAgICAgKFVOTElLRUxZKChjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgID8gKGxpbmtCdWZmZXJSZWZlcmVu
Y2UpLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShyZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19f
KSBcCi0gICAgICAgIDogKGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXRE
aXNhc3NlbWJseShyZXN1bHRQdHJUYWcpKQorICAgICAgICA/IChsaW5rQnVmZmVyUmVmZXJlbmNl
KS5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPihfX1ZBX0FSR1NfXykg
XAorICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzcyLDE3ICszNzcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25D
YWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9u
VGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4g
RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKEFzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJl
c3VsdFRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHJlc3VsdFRhZz4oQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQp
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZN
SGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQpCiAgICAgewotICAg
ICAgICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRoVk1IYWx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhWTUhhbHQoaW5z
dHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
cmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBzdGFydFRhZywg
UHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2Nh
dGlvbkxhYmVsPHN0YXJ0VGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFM
b2NhdGlvbigpKTsKICAgICB9CkBAIC0zODA2LDQ1ICszODA5LDUzIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBzdGF0aWMg
Q29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBh
dGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7
CiAgICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIpCisKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRp
b25MYWJlbDx0YWc+KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJl
bCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2Rl
TG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRk
cmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBp
bml0aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lk
IHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxh
YmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVl
KQogICAgIHsKICAgICAgICAgcmVlbWl0SW5pdGlhbE1vdmVXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25T
dGFydC5kYXRhTG9jYXRpb24oKSwgaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lk
KikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3Ms
IGludDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxs
VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0
VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRh
Zz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICBBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQ
QVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtNDQzOCwxNyArNDQ0OSwxNSBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lk
IGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBj
b2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAg
ICBpZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQogICAgICAgICAgICAgQXNzZW1ibGVy
OjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09G
RlNFVF9DQUxMX1RPX1BPSU5URVIpLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpIHsKLSAgICAgICAgICAg
IGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAg
ICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBB
c3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6VGFpbCkpCisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwu
bV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0
clRhZz4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwo
Y29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIgbV9k
YXRhTWVtb3J5VGVtcFJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gMjMwNjY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTA1LDEyICsxNTA1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIuZG1iSVNIU1QoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENh
bGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1
bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0
VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPHRhZz4gY2FsbCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJN
QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJU
YWcpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9j
YXN0PHZvaWQoKikoKT4oQVJNQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2Nh
dGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2Rl
TG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5h
dGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4g
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24p
CiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlv
blN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAg
fQpAQCAtMTUyOCw0NCArMTUzMCw1MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2go
KSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25M
YWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pCiAgICAg
ewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
KCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQ
dHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZz
ZXQoMCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9C
cmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVn
aXN0ZXJJRCByZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCBy
ZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmV2
ZXJ0QnJhbmNoUHRyV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIHJl
ZywgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSkgJiAweGZmZmYpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4s
IEFkZHJlc3MsIGludDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgdm9p
ZCopCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJl
bDx0YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8
ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlbGlu
a0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2Fs
bFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2Nh
dGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0xNjE5
LDcgKzE2MjksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wKEFSTVJl
Z2lzdGVyczo6UzEsIG1fYXNzZW1ibGVyLmdldEltbShyaWdodC5tX3ZhbHVlLCBBUk1SZWdpc3Rl
cnM6OlMwKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwg
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxhZ1NldChD
YWxsOjpUYWlsKSkKICAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2Fs
bC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
CShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3Nyw3ICsxMzc3LDggQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5kbWJJU0hTVCgpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
c3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVt
cChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC0xOTg4LDIyICsxOTg5LDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgfQogCi0g
ICAgCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNh
bGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25U
YWc+CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29k
ZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBG
dW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJl
YWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZVB0clRhZyk7CisgICAgICAg
IHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgp
PihBUk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBib29sIGNhbkp1
bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBh
dGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFn
PiBsYWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHR3b1dvcmRPcFNpemUgPSA0
OwogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdHdvV29yZE9wU2l6ZSAqIDIp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdp
c3RlcklEIHJkLCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmQs
IHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAjaWYgT1MoTElOVVgpCiAgICAgICAgIEFSTXY3
QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92VDNtb3Z0Y21wVDIoaW5zdHJ1Y3Rpb25TdGFydC5k
YXRhTG9jYXRpb24oKSwgcmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihpbml0aWFsVmFsdWUpKTsKQEAgLTIwMTIsMzUgKzIwMTUsNDEgQEAgcHVibGljOgog
ICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdlQzKGluc3RydWN0aW9uU3Rh
cnQuZGF0YUxvY2F0aW9uKCksIGRhdGFUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjpt
YWtlVUludDE2KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUpICYgMHhm
ZmZmKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25B
ZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJl
bCgpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVs
MzI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAg
ICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4oKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFi
ZWwsIEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0
aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0
aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGludDMyX3QpCiAgICAgewog
ICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
IGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRh
Zz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+
IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlv
bikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5j
dGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFSTXY3QXNzZW1i
bGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwogICAgIH0KQEAgLTIxMzksNyArMjE0OCw4IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBs
aW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgQVJNdjdBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYyICsyOCw0MSBAQAogCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2lu
Y2x1ZGUgIlB0clRhZy5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRD
b2RlUHRyKE9wY29kZUlEIG9wY29kZUlEKQordm9pZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNl
OjpkdW1wV2l0aE5hbWUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlv
biwgY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBBU1NFUlQob3Bj
b2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihvcGNvZGVJRCkpOwotfQotCi12b2lk
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgaWYgKCFl
eGVjdXRhYmxlQWRkcmVzcykgewogICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRh
dGFMb2NhdGlvbigpKSB7Ci0gICAgICAgIG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MoKSksICIpIik7CisgICAgaWYgKGV4ZWN1dGFibGVBZGRyZXNzID09
IGRhdGFMb2NhdGlvbikgeworICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVy
KGV4ZWN1dGFibGVBZGRyZXNzKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBv
dXQucHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRk
cmVzcygpKSwgIiwgZGF0YUxvY2F0aW9uID0gIiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24oKSks
ICIpIik7Ci19Ci0KLXZvaWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsKKyAgICBv
dXQucHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRk
cmVzcyksICIsIGRhdGFMb2NhdGlvbiA9ICIsIFJhd1BvaW50ZXIoZGF0YUxvY2F0aW9uKSwgIiki
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlTExJbnRDb2RlUmVmKE9wY29kZUlEIG9wY29kZUlEKQorYm9vbCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWZCYXNlOjp0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3Nl
bWJseVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJp
bnRTdHJlYW0mIG91dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKG9wY29kZUlEKSk7CisgICAg
cmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCk7
CiB9CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2VtYmxlKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKK2Jvb2wgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlz
YXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShtX2NvZGVQdHIsIHNpemUoKSwg
cHJlZml4LCBvdXQpOworICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUs
IHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKIH0KIAotYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OnRyeVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4KSBjb25zdAotewotICAgIHJl
dHVybiB0cnlUb0Rpc2Fzc2VtYmxlKFdURjo6ZGF0YUZpbGUoKSwgcHJlZml4KTsKLX0KLQotQ1N0
cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5KCkgY29uc3QKK0NTdHJpbmcg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7Ci0gICAgaWYgKCF0cnlUb0Rpc2Fzc2VtYmxlKG91dCwgIiIpKQor
ICAgIGlmICghdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCAiIiwgb3V0KSkKICAgICAg
ICAgcmV0dXJuIENTdHJpbmcoKTsKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCi12
b2lkIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIG1fY29kZVB0ci5kdW1wV2l0aE5hbWUoIkNvZGVSZWYiLCBvdXQpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAyMzA2NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTQgQEAKIC8vIGludG8gdGhlIHByb2Nlc3Nv
ciBhcmUgZGVjb3JhdGVkIHdpdGggdGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRpb25h
bCBBUk0gaGFzCiAvLyB0aGUgbG93ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdo
YXQga2luZCBvZiBwb2ludGVyLCB3ZSBjaGVjayBmb3IgYm90aAogLy8gZGVjb3JhdGVkIGFuZCB1
bmRlY29yYXRlZCBudWxsLgorI2RlZmluZSBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5U
RVIocHRyKSBcCisgICAgQVNTRVJUKCFwdHIgfHwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cHRyKSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAogICAg
IEFTU0VSVChyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCiAjZGVmaW5lIEFT
U0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpIFwKICAgICBBU1NFUlQoIShvZmZzZXQgJiAx
KSkgLy8gTXVzdCBiZSBtdWx0aXBsZSBvZiAyLgogI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX05VTExf
T1JfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgLy8gQW55dGhpbmcgZ29lcyEKICNkZWZpbmUgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKICAgICBBU1NFUlQocHRyKQogI2RlZmluZSBB
U1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KSAvLyBBbnl0aGluZyBnb2VzIQpAQCAtNTIs
NyArNTUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIApAQCAtNjAsMTcgKzYzLDE5IEBAIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKIC8vCiAvLyBGdW5jdGlvblB0ciBzaG91bGQgYmUgdXNlZCB0byB3cmFw
IHBvaW50ZXJzIHRvIEMvQysrIGZ1bmN0aW9ucyBpbiBKU0MKIC8vIChwYXJ0aWN1bGFybHksIHRo
ZSBzdHViIGZ1bmN0aW9ucykuCit0ZW1wbGF0ZTxQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFn
PgogY2xhc3MgRnVuY3Rpb25QdHIgewogcHVibGljOgogICAgIEZ1bmN0aW9uUHRyKCkgeyB9Cisg
ICAgRnVuY3Rpb25QdHIobnVsbHB0cl90KSB7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBGdW5jdGlvblB0cihSZXR1cm5U
eXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykK
LSAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4odmFsdWUsIHRhZykpCisg
ICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgqdmFsdWUpKEFyZ3VtZW50cy4uLikpCisgICAgICAg
IDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIHRhZz4odmFsdWUpKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOworICAgICAgICBhc3NlcnRJc051bGxP
ckNGdW5jdGlvblB0cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNO
b3RQb2lzb25lZChtX3ZhbHVlKTsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiht
X3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFs
dWUpOwogICAgIH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdp
dGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKQEAgLTc4LDEyICs4MywxMiBAQCBw
dWJsaWM6CiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1Mp
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4u
LiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcpCi0gICAgICAgIDogbV92YWx1ZSh0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5
cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1
bmN0aW9uUHRyPHZvaWQqLCB0YWc+KHZhbHVlKSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1
bmN0aW9uUHRyKHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIodmFs
dWUpOwogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1
ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgICAg
IEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKICNl
bmRpZiAvLyBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykKQEAg
LTkxLDU0ICs5Niw3NCBAQCBwdWJsaWM6CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRkFTVENBTExf
Q0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoRkFTVENB
TEwgKnZhbHVlKShBcmd1bWVudHMuLi4pLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnKQot
ICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAg
ICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSkK
KyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFnPih2YWx1ZSkpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CisgICAgICAgIGFzc2Vy
dElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjph
c3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5U
RVIobV92YWx1ZSk7CiAgICAgfQogCiAjZW5kaWYgLy8gQ09NUElMRVJfU1VQUE9SVFMoRkFTVENB
TExfQ0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFs
dWUgJiYgIXN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQdHJU
eXBlPjo6dHlwZT46OnZhbHVlPj4KLSAgICBleHBsaWNpdCBGdW5jdGlvblB0cihQdHJUeXBlIHZh
bHVlLCBQdHJUYWcgdGFnKQorICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKFB0clR5cGUgdmFsdWUp
CiAgICAgICAgIC8vIFVzaW5nIGEgQy1jdHlsZSBjYXN0IGhlcmUgdG8gYXZvaWQgY29tcGlsZXIg
ZXJyb3Igb24gUlZUQzoKICAgICAgICAgLy8gRXJyb3I6ICAjNjk0OiByZWludGVycHJldF9jYXN0
IGNhbm5vdCBjYXN0IGF3YXkgY29uc3Qgb3Igb3RoZXIgdHlwZSBxdWFsaWZpZXJzCiAgICAgICAg
IC8vIChJIGd1ZXNzIG9uIFJWVEMgZnVuY3Rpb24gcG9pbnRlcnMgaGF2ZSBhIGRpZmZlcmVudCBj
b25zdG5lc3MgdG8gR0NDL01TVkM/KQotICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2
b2lkKiwgdGFnPih2YWx1ZSkpCiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2
YWx1ZSk7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAg
ICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAg
ICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVM
TF9PUl9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
RnVuY3Rpb25QdHIoRnVuY3Rpb25QdHIgb3RoZXIsIFB0clRhZyB0YWcpCi0gICAgICAgIDogbV92
YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG90aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRh
ZykpCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4p
OworCisgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgorICAgIEZ1bmN0aW9uUHRyPG90aGVy
VGFnPiByZXRhZ2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0
cihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgUG9pc29uZWRNYXNtUHRyOjph
c3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHI8b3RoZXJUYWc+KCk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxv
dGhlclRhZz4oKnRoaXMpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cik7Ci0KICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0
CiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92
YWx1ZSk7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPFB0
clRhZyBuZXdUYWc+CisgICAgdm9pZCogcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0
CisgICAgeworICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92
YWx1ZSk7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dGFnLCBuZXdUYWc+KG1fdmFsdWUp
OworICAgIH0KKwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVl
OyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90
aGVyLm1fdmFsdWU7IH0KKwogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+
CisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoY29uc3QgRnVuY3Rpb25QdHI8b3RoZXJUYWc+JiBv
dGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKHJldGFnQ29kZVB0cjxvdGhlclRhZywgdGFnPihvdGhl
ci5leGVjdXRhYmxlQWRkcmVzcygpKSkKKyAgICB7CisgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6
YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFM
SURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgIH0KKwogICAgIHZvaWQqIG1fdmFsdWUgeyBu
dWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBGdW5jdGlvblB0
cjsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEZ1bmN0aW9uUHRyKSA9PSBzaXplb2Yodm9p
ZCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQlVJTFRJ
Tl9JU19UUklWSUFMTFlfQ09QWUFCTEUpCi1zdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5X2Nv
cHlhYmxlKEZ1bmN0aW9uUHRyKSwgIiIpOworc3RhdGljX2Fzc2VydChfX2lzX3RyaXZpYWxseV9j
b3B5YWJsZShGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KSwgIiIpOwogI2VuZGlmCiAKIC8v
IFJldHVybkFkZHJlc3NQdHI6CkBAIC0xNTgsOCArMTgzLDkgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIGV4cGxpY2l0
IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCi0gICAgICAgIDogbV92YWx1
ZShmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9u
KQorICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpCiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90
UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92
YWx1ZSk7CkBAIC0xODMsOSArMjA5LDE2IEBAIHByaXZhdGU6CiAvLyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6CiAvLwogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNob3VsZCBiZSB1c2VkIHRvIHdy
YXAgcG9pbnRlcnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgeworcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyB2b2lkIGR1bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9p
ZCogZGF0YUxvY2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KTsKK307
CisKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogcHVibGljOgotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpID0gZGVmYXVs
dDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIobnVsbHB0cl90KSA6IG1fdmFsdWUobnVsbHB0
cikgeyB9CiAKICAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIodm9pZCogdmFsdWUp
CiAjaWYgQ1BVKEFSTV9USFVNQjIpCkBAIC0xOTUsNiArMjI4LDcgQEAgcHVibGljOgogICAgICAg
ICA6IG1fdmFsdWUodmFsdWUpCiAjZW5kaWYKICAgICB7CisgICAgICAgIGFzc2VydElzVGFnZ2Vk
V2l0aCh2YWx1ZSwgdGFnKTsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAg
ICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAjaWYgQ1BVKEFSTV9USFVNQjIpCkBAIC0yMDcsMTcgKzI0
MSwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKHZhbHVlLCB0YWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0Owog
ICAgICAgICByZXN1bHQubV92YWx1ZSA9IFBvaXNvbmVkTWFzbVB0cih2YWx1ZSk7CiAgICAgICAg
IHJlc3VsdC5tX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNyZWF0ZUxMSW50
Q29kZVB0cihPcGNvZGVJRCBjb2RlSWQpOwotCiAgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKFJldHVybkFkZHJlc3NQdHIgcmEpCi0gICAgICAgIDogbV92YWx1ZShyYS52YWx1ZSgp
KQorICAgICAgICA6IG1fdmFsdWUodGFnQ29kZVB0cjx0YWc+KHJhLnZhbHVlKCkpKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQocmEudmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVChy
YS52YWx1ZSgpKTsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAgICAgICAg
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZS51bnBvaXNvbmVkKCkpOwpAQCAtMjI1
LDkgKzI1OSwxMiBAQCBwdWJsaWM6CiAKICAgICBQb2lzb25lZE1hc21QdHIgcG9pc29uZWRQdHIo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZykgY29uc3QKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgbmV3VGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFn
Z2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJl
c3MoKSwgb2xkVGFnLCBuZXdUYWcpKTsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+KCk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8bmV3VGFnPigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CkBAIC0yMzYsNiArMjczLDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAgICAgICAgIHJldHVybiBtX3Zh
bHVlLnVucG9pc29uZWQ8VD4oKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
dm9pZCo+CisgICAgVCB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgpOworICAgICAgICByZXR1cm4gdW50YWdD
b2RlUHRyPFQsIHRhZz4obV92YWx1ZS51bnBvaXNvbmVkKCkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBUIHJldGFnZ2VkRXhl
Y3V0YWJsZUFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1Bv
aXNvbmVkKCk7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1f
dmFsdWUudW5wb2lzb25lZCgpKTsKKyAgICB9CisKICNpZiBDUFUoQVJNX1RIVU1CMikKICAgICAv
LyBUbyB1c2UgdGhpcyBwb2ludGVyIGFzIGEgZGF0YSBhZGRyZXNzIHJlbW92ZSB0aGUgZGVjb3Jh
dGlvbi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CkBAIC0yNTEsNyArMzAzLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAg
ICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSA/IHJlbW92ZUNvZGVQdHJUYWcobV92YWx1ZS51bnBv
aXNvbmVkKCkpIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFn
PihtX3ZhbHVlLnVucG9pc29uZWQoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI4MSwxMCArMzMz
LDEzIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWU+PgogICAgIG9wZXJhdG9y
IFQoKSA9IGRlbGV0ZTsKIAotICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKLSAgICAKKyAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBu
YW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2Nh
dGlvbigpLCBuYW1lLCBvdXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdCB7IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KKwogICAgIGVudW0g
RW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKICAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7
IERlbGV0ZWRWYWx1ZSB9OwogICAgIApAQCAtMzEwLDkgKzM2NSwxMCBAQCBwcml2YXRlOgogICAg
IFBvaXNvbmVkTWFzbVB0ciBtX3ZhbHVlOwogfTsKIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KIHN0
cnVjdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsg
fQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYSwg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPiYgYSwgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4mIGIpCiAgICAgewogICAg
ICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KQEAgLTMyNCwyMyArMzgwLDI5IEBAIHN0cnVjdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKIC8vIEEgcmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBv
ZiBKSVQgZ2VuZXJhdGVkIGNvZGUuICBBIENvZGVSZWYgY29uc2lzdHMgb2YgYQogLy8gcG9pbnRl
ciB0byB0aGUgY29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3aXRoaW4g
d2hpY2ggaXQKIC8vIHdhcyBhbGxvY2F0ZWQuCi1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
eworY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZSB7Citwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1i
bHlQdHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7
CisgICAgc3RhdGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90KTsKK307CisKK3RlbXBsYXRlPFB0clRh
ZyB0YWc+CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZkJhc2UgewogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVz
ZSBpdCdzIGRhbmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKICAgICAvLyB0
byBiZSBlYXN5IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cu
Ci0gICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyKQorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPiBjb2RlUHRyKQogICAgICAgICA6IG1fY29kZVB0cihjb2RlUHRyKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkKLSAgICB7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZigpID0gZGVmYXVsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihSZWY8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4mJiBleGVjdXRhYmxlTWVtb3J5LCBQdHJUYWcgdGFnKQotICAg
ICAgICA6IG1fY29kZVB0cih0YWdDb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCksIHRh
ZykpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFJlZjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiYmIGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIDogbV9jb2RlUHRyKHRhZ0NvZGVQdHI8dGFn
PihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKSkKICAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1v
cnkoV1RGTW92ZShleGVjdXRhYmxlTWVtb3J5KSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2V4
ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsKQEAgLTM1MSwyNyArNDEzLDMxIEBAIHB1Ymxp
YzoKICAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciBy
ZWZlcnMgdG8gY29kZSB0aGF0IGlzCiAgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRo
cm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKICAgICAvLyB0aGF0
IGNvZGVQdHIgaXMgaW1tb3J0YWwuCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZVB0cikKICAgICB7CiAgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29kZVB0cik7CiAgICAgfQogICAgIAotICAgIC8vIEhl
bHBlciBmb3IgY3JlYXRpbmcgc2VsZi1tYW5hZ2VkIGNvZGUgcmVmcyBmcm9tIExMSW50LgotICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlTExJbnRDb2RlUmVmKE9wY29kZUlE
IGNvZGVJZCk7Ci0KICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7
CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBjb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVQdHI7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
dGFnZ2VkQ29kZShQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSBjb25zdAorICAgIHRlbXBs
YXRlPFB0clRhZyBuZXdUYWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4gcmV0
YWdnZWRDb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHIudGVtcGxh
dGUgcmV0YWdnZWQ8bmV3VGFnPigpOworICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdU
YWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG5ld1RhZz4gcmV0YWdnZWQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZVB0ci5yZXRhZ2dlZChvbGRUYWcsIG5ld1RhZyk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8bmV3VGFnPigqdGhpcyk7CiAg
ICAgfQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdApAQCAtMzgxLDIyICs0NDcsNDMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAotICAgIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CisgICAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGUocmV0YWdnZWRDb2RlPERpc2Fzc2VtYmx5UHRy
VGFnPigpLCBzaXplKCksIHByZWZpeCwgb3V0KTsKKyAgICB9CiAgICAgCi0gICAgYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlKGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKKyAgICBib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShyZXRhZ2dlZENvZGU8RGlzYXNzZW1ibHlQdHJU
YWc+KCksIHNpemUoKSwgcHJlZml4KTsKKyAgICB9CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0OworICAgIENTdHJpbmcgZGlzYXNzZW1ibHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6
OmRpc2Fzc2VtYmx5KHJldGFnZ2VkQ29kZTxEaXNhc3NlbWJseVB0clRhZz4oKSwgc2l6ZSgpKTsK
KyAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jb2RlUHRyOyB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV9jb2RlUHRyLmR1bXBXaXRoTmFtZSgiQ29kZVJlZiIsIG91dCk7CisgICAgfQogCiBwcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7CisgICAgdGVtcGxhdGU8
UHRyVGFnIG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8b3RoZXJUYWc+JiBvdGhlckNvZGVSZWYpCisgICAgICAgIDogbV9jb2Rl
UHRyKG90aGVyQ29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czx0YWc+KCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KG90aGVyQ29kZVJlZi5tX2V4
ZWN1dGFibGVNZW1vcnkpCisgICAgeyB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBtX2NvZGVQdHI7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0
YWJsZU1lbW9yeTsKKworICAgIHRlbXBsYXRlPFB0clRhZz4gZnJpZW5kIGNsYXNzIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjsKIH07CiAKLWlubGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25QdHIoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitpbmxpbmUgRnVu
Y3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gcHRy
KQogICAgIDogbV92YWx1ZShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkKIHsKICAgICBQb2lzb25l
ZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CkBAIC00MDcsMTEgKzQ5NCwx
MSBAQCBpbmxpbmUgRnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKE1hY3JvQXNzCiBuYW1lc3BhY2Ug
V1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IHsKLSAg
ICB0eXBlZGVmIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaCBIYXNoOwordGVtcGxhdGU8
SlNDOjpQdHJUYWcgdGFnPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPj4geworICAgIHR5cGVkZWYgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNo
PHRhZz4gSGFzaDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0
cj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cj4g
eyB9OwordGVtcGxhdGU8SlNDOjpQdHJUYWcgdGFnPiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4+IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzODksMTIg
KzMzODksMTQgQEAgcHVibGljOgogICAgICAgICBhYm9ydFdpdGhSZWFzb24ocmVhc29uKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlv
blRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChD
b2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihNSVBTQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJUYWcpOworICAgICAg
ICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKiko
KT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9u
U3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC0zNDEz
LDQ0ICszNDE1LDUyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGlj
IGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyPHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBD
b2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlv
bkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0ciBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoMCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0
YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBNSVBT
QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9Nb3ZlKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9u
KCksIGltbVRlbXBSZWdpc3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnQ+KGluaXRpYWxWYWx1ZSkg
JiAweGZmZmYpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25M
YWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgaW50MzJfdCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgaW50MzJfdCkK
ICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCB2b2lkKikKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIHZv
aWQqKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywg
UHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RU
YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFn
PiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAg
IE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtMzQ2Miw3ICszNDcyLDggQEAgcHJp
dmF0ZToKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCi0gICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IGlmIChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKICAgICAgICAgICAgIE1JUFNBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
OCwxNyArMjk4LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5n
UG9pbnRUcnVuY2F0ZSgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQogICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSB7IHJldHVybiBpc1NTRTJQcmVzZW50KCk7
IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSB7IHJldHVybiBp
c1NTRTJQcmVzZW50KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3Vs
dFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRU
YWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAg
ICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludDMyX3Qq
PihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5k
YXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uUHRyPHJlc3VsdFRhZz4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGNhbGwuZGF0YUxvY2F0aW9uKCkpICsgb2Zmc2V0KSk7CiAgICAgfQog
CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICBzdGF0
aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAg
ICB7CiAgICAgICAgIGNvbnN0IGludCBvcGNvZGVCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0IGlu
dCBtb2RSTUJ5dGVzID0gMTsKQEAgLTMxNyw4ICszMTksOSBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CiAgICAgICAgIHJl
dHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3RhbEJ5dGVzKTsKICAgICB9Ci0gICAgCi0gICAg
c3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVzID0g
MTsKICAgICAgICAgY29uc3QgaW50IG1vZFJNQnl0ZXMgPSAxOwpAQCAtMzI4LDggKzMzMSw5IEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50
U2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMp
OwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxh
YmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IGlu
dCBvcGNvZGVCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0IGludCBtb2RSTUJ5dGVzID0gMTsKQEAg
LTMzOSwzMCArMzQzLDM1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0g
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRP
ZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0
cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIHJlZywgdm9pZCogaW5pdGlhbFZhbHVlKQorCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9u
U3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAg
ICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19jbXBsX2lyX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25T
dGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0
aWFsVmFsdWUpLCByZWcpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGlu
c3RydWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghYWRkcmVzcy5vZmZzZXQpOwogICAgICAgICBYODZBc3NlbWJs
ZXI6OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRh
YmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCAw
LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5z
dHJ1Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCBpbnQzMl90IGluaXRpYWxWYWx1ZSkKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNl
bWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFhZGRyZXNzLm9mZnNldCk7CiAgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmV2ZXJ0SnVtcFRvX2NtcGxfaW1fZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIGluaXRpYWxWYWx1ZSwgMCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQ
dHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4g
Y2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBY
ODZBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtMzcwLDcgKzM3OSw4IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAg
ICAgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAzLDggKzEyMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXJfZGlzcDgoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7
CiAgICAgICAgIHJldHVybiBEYXRhTGFiZWxDb21wYWN0KHRoaXMpOwogICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0
IGRhdGFMYWJlbENvbXBhY3QsIGludDMyX3QgdmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJl
bENvbXBhY3Q8dGFnPiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KHZhbHVlKSk7CiAg
ICAgICAgIEFzc2VtYmxlclR5cGVfVDo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVsQ29tcGFjdC5k
YXRhTG9jYXRpb24oKSwgdmFsdWUpOwpAQCAtMzg3OSwxMiArMzg4MCwxNCBAQCBwdWJsaWM6CiAg
ICAgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9j
YXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0KQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0
aEhsdChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxv
Y2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3Nl
bWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNz
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
XzY0LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4NCw5ICsxODg0
LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2lu
dEFicygpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVh
ZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVhZFBv
aW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEp
LmRhdGFMb2NhdGlvbigpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0
cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CiAgICAg
fQogCiAgICAgYm9vbCBoYXZlU2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBt
X2FsbG93U2NyYXRjaFJlZ2lzdGVyOyB9CkBAIC0xODk0LDggKzE4OTUsOSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAotICAgIHN0YXRp
YyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgY29uc3QgaW50IHJleEJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG9w
Y29kZUJ5dGVzID0gMTsKQEAgLTE5MDQsOCArMTkwNiw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAgICAgICAgcmV0
dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaDMyV2l0aFBhdGNoT25SZWdpc3Rl
cihDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaDMyV2l0
aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgY29uc3QgaW50IHJleEJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG9w
Y29kZUJ5dGVzID0gMTsKQEAgLTE5MTQsMzggKzE5MTcsNDUgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAgICBy
ZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAotICAg
IHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRP
ZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihsYWJlbCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2Nh
dGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMiBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZCcmFuY2gzMldpdGhQYXRjaE9uUmVnaXN0ZXIobGFi
ZWwpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBBZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgQWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgWDg2QXNzZW1i
bGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3Jh
dGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNl
bWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1
Y3Rpb25TdGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25T
dGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBYODZB
c3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZsX2kzMnIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRh
YmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBp
bml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkK
ICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdnFfaTY0cihpbnN0
cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluaXRpYWxWYWx1ZSksIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVz
dFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxU
YWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsK
ICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisg
ICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25Q
dHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NB
TExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CiAgICAgfQpAQCAtMTk2Niw3ICsxOTc2LDggQEAgcHJpdmF0ZToKIAogICAgIGZyaWVuZCBjbGFz
cyBMaW5rQnVmZmVyOwogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25Q
dHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6TmVhcikpCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNh
bGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSksIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
MTggKzE0NCwxOCBAQCBib29sIGlzU3BlY2lhbEdQUihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b21waWxlKEdlbmVyYXRvciYmIGdlbmVyYXRlKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGNvbXBpbGUoR2VuZXJhdG9yJiYgZ2VuZXJhdGUpCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICBnZW5lcmF0ZShqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIG51bGxwdHIpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENv
ZGVQdHJUYWcsICJ0ZXN0bWFzbSBjb21waWxhdGlvbiIpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJ0ZXN0bWFzbSBjb21waWxhdGlvbiIpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci1UIGludm9r
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1Qg
aW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdD
RnVuY3Rpb25QdHIoY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRh
Zyk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKU0Vu
dHJ5UHRyVGFnPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBUICgqZnVu
Y3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihl
eGVjdXRhYmxlQWRkcmVzcyk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9
CkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVy
KCkKICAgICB1bnNpZ25lZCBwcm9iZUNhbGxDb3VudCA9IDA7CiAgICAgYm9vbCBjb250aW51YXRp
b25XYXNSZWFjaGVkID0gZmFsc2U7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29udGlu
dWF0aW9uID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvbnRpbnVhdGlvbiA9IGNvbXBpbGUoWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHdlIHJlYWNoZWQg
dGhlIGNvbnRpbnVhdGlvbi4KICAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQm
KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsrOwpAQCAtNjEwLDcgKzYxMCw3IEBAIHZv
aWQgdGVzdFByb2JlTW9kaWZpZXNQcm9ncmFtQ291bnRlcigpCiAgICAgICAgIC8vIFdyaXRlIGV4
cGVjdGVkIHZhbHVlcyBpbnRvIHRoZSByZWdpc3RlcnMuCiAgICAgICAgIGppdC5wcm9iZShbJl0g
KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsr
OwotICAgICAgICAgICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29kZVB0cihjb250aW51YXRp
b24uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgICAgICAg
ICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29kZVB0cihjb250aW51YXRpb24uY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9KTsKIAogICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyMzA2
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCi1Db21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNv
ZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQorQ29t
cGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gYnlwcm9k
dWN0cykKICAgICA6IG1fY29kZVJlZihjb2RlUmVmKQogICAgICwgbV9ieXByb2R1Y3RzKFdURk1v
dmUoYnlwcm9kdWN0cykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCwxNyArNDgsMTcgQEAgY2xhc3Mg
Q29tcGlsYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBz
dGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IENvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiwg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBDb21waWxhdGlvbihDb21waWxhdGlvbiYmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29t
cGlsYXRpb24oKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYu
Y29kZSgpOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+
IGNvZGVSZWYoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWY7IH0KICAgICAKICAgICBDU3RyaW5n
IGRpc2Fzc2VtYmx5KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmRpc2Fzc2VtYmx5KCk7IH0K
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlUmVmOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBtX2NvZGVSZWY7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAyMzA2Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBDb21waWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYgcHJvYykK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IG51bGxwdHIpOwogCi0gICAgcmV0dXJuIENvbXBpbGF0aW9uKEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgSklUQ29kZVB0clRhZywgIkIzOjpDb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXBy
b2R1Y3RzKCkpOworICAgIHJldHVybiBDb21waWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJCMzo6Q29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMzA2Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5OSwyMCArNDk5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGp1bXBUYWJsZSA9IHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cio+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKE1hY3JvQXNzZW1ibGVyQ29kZVB0cikgKiB0
YWJsZVNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAg
ICAgICAgICB1c2luZyBKdW1wVGFibGVDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
U3dpdGNoUHRyVGFnPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBUYWJsZUNvZGVQdHIq
IGp1bXBUYWJsZSA9IHN0YXRpY19jYXN0PEp1bXBUYWJsZUNvZGVQdHIqPigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihKdW1w
VGFibGVDb2RlUHRyKSAqIHRhYmxlU2l6ZSkpOworCiAgICAgICAgICAgICAgICAgICAgICAgICBH
UFJSZWcgaW5kZXggPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgcG9pc29uU2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBQdHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29u
U2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoanVtcFRhYmxlKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIGluZGV4LCBD
Q2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIHN3aXRjaFRhZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZXNlIGxhYmVscyBhcmUgZ3VhcmFudGVlZCB0byBiZSBwb3B1bGF0ZWQg
YmVmb3JlIGVpdGhlciBsYXRlIHBhdGhzIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
aW5rIHRhc2tzIHJ1bi4KQEAgLTUyMSwxNCArNTIxLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNVbmhhbmRsZWRJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxUaHJvdWdoID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHMubGFzdCgpLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFRhYmxlQ29kZVB0ciBmYWxsVGhyb3VnaCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4oKmxhYmVscy5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGVT
aXplOyBpLS07KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBU
YWJsZVtpXSA9IGZhbGxUaHJvdWdoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsYWJlbEluZGV4ID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0YWJsZUluZGV4IDogaGFuZGxlZEluZGljZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbdGFibGVJbmRleF0g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVsc1tsYWJlbEluZGV4KytdLCBzd2l0Y2hUYWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW3RhYmxlSW5k
ZXhdID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPigqbGFiZWxzW2xhYmVs
SW5kZXgrK10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw5ICsxMjUsOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQcm9jCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBwdHIsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCitUIGludm9rZShNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIocHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgIHZvaWQqIGV4ZWN1dGFi
bGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHI8QjNDb21waWxhdGlvblB0clRhZz4ocHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJp
dHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKICAgICBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KQEAgLTEzMDMzLDggKzEzMDMzLDggQEAg
dm9pZCB0ZXN0SW50ZXJwcmV0ZXIoKQogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgVmVjdG9yPEJveDxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPj4gbGFiZWxzID0gcGFyYW1zLnN1Y2Nlc3NvckxhYmVscygpOwogCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2Fz
dDxNYWNyb0Fzc2VtYmxlckNvZGVQdHIqPigKLSAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygp
LmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIpICogbGFiZWxzLnNp
emUoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIzQ29tcGlsYXRpb25Q
dHJUYWc+KiBqdW1wVGFibGUgPSBiaXR3aXNlX2Nhc3Q8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIz
Q29tcGlsYXRpb25QdHJUYWc+Kj4oCisgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGRE
YXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIzQ29tcGlsYXRpb25QdHJU
YWc+KSAqIGxhYmVscy5zaXplKCkpKTsKIAogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBw
YXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgR1BSUmVnIHBvaXNvblNjcmF0Y2ggPSBw
YXJhbXMuZ3BTY3JhdGNoKDEpOwpAQCAtMTMwNDMsMTMgKzEzMDQzLDEyIEBAIHZvaWQgdGVzdElu
dGVycHJldGVyKCkKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRjaCk7CiAgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIHBhcmFtc1swXS5ncHIo
KSwgQ0NhbGxIZWxwZXJzOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBqaXQu
eG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBQdHJUYWcgc3dpdGNo
VGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICBqaXQuanVtcChzY3JhdGNoLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgaml0Lmp1bXAo
c2NyYXRjaCwgQjNDb21waWxhdGlvblB0clRhZyk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICBbJiwganVtcFRhYmxlLCBsYWJlbHNdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxh
YmVscy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbaV0g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVsc1tpXSwgc3dpdGNoVGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0Nv
bXBpbGF0aW9uUHRyVGFnPigqbGFiZWxzW2ldKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfSk7CiAgICAgCkBAIC0xMzI5OCwxMSArMTMyOTcsMTEgQEAgdm9pZCB0ZXN0RW50cnlTd2l0
Y2hTaW1wbGUoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENv
ZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVs
KDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFR3
byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5
cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRh
Zz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFn
Pihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3Ri
MyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9u
UHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDSyhpbnZva2U8aW50Pihs
YWJlbE9uZSwgMSwgMikgPT0gMyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4obGFiZWxUd28sIDEs
IDIpID09IC0xKTsKQEAgLTEzMzMxLDExICsxMzMzMCwxMSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRj
aE5vRW50cnlTd2l0Y2goKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJv
Yywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSks
IEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2lu
dExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBs
YWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9j
LmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlv
blB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywg
InRlc3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBp
bGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBp
bGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDS19FUShpbnZv
a2U8aW50PihsYWJlbE9uZSwgMSwgMiksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxh
YmVsVHdvLCAxLCAyKSwgMyk7CkBAIC0xMzQxOCwxMSArMTM0MTcsMTEgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHMoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2Vu
ZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50
TGFiZWwoMSksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhy
ZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENv
ZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxh
YmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2Mu
ZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRy
VGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjND
b21waWxhdGlvblB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0Nv
bXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29k
ZVB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVD
S19FUShpbnZva2U8aW50PihsYWJlbE9uZSwgMSwgMiwgMTApLCAzKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50PihsYWJlbFR3bywgMSwgMiwgMTApLCAtMSk7CkBAIC0xMzUzNSwxMSArMTM1MzQs
MTEgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmRObwogICAgIENDYWxs
SGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0
clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRy
eXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIz
Q29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29t
cGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJl
bCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBp
bGF0aW9uIik7CiAKICAgICBDSEVDS19FUShpbnZva2U8aW50PihsYWJlbE9uZSwgMSwgMiwgMTAs
IGZhbHNlKSwgMyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxUd28sIDEsIDIsIDEw
LCBmYWxzZSksIC0xKTsKQEAgLTEzNjEzLDEwICsxMzYxMiwxMCBAQCB2b2lkIHRlc3RFbnRyeVN3
aXRjaExvb3AoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENv
ZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxh
YmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2Mu
ZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRy
VGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRl
c3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0
aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0
aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDSyhpbnZva2U8aW50
PihsYWJlbE9uZSwgMCkgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4obGFiZWxPbmUsIDQy
KSA9PSA0Myk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTAgKzc0LDEw
IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKENvZGUmIGNvZGUsIFByaW4KICAgICBhdXRvIGR1
bXBBc21SYW5nZSA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydExhYmVsLCBDQ2FsbEhl
bHBlcnM6OkxhYmVsIGVuZExhYmVsKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0TGFi
ZWwuaXNTZXQoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZExhYmVsLmlzU2V0KCkpOwot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihz
dGFydExhYmVsKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGVuZExhYmVsKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgZGlzYXNzZW1ibGUo
c3RhcnQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKSAt
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBhc21Q
cmVmaXgsIG91dCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFn
PiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4oc3RhcnRM
YWJlbCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFnPiBlbmQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KGVuZExhYmVsKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW5kLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkgPj0gc3Rh
cnQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSk7CisgICAgICAgIGRpc2Fzc2VtYmxlKHN0YXJ0
LCBlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSAtIHN0YXJ0LmRhdGFMb2NhdGlvbjx1aW50
cHRyX3Q+KCksIGFzbVByZWZpeCwgb3V0KTsKICAgICB9OwogCiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fYmxvY2tzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwxMyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlCiAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQ
dHJUYWcsICJ0ZXN0YWlyIGNvbXBpbGF0aW9uIiksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7
CisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywg
InRlc3RhaXIgY29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBpbnZva2UoY29u
c3QgQjM6OkNvbXBpbGF0aW9uJiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAg
IHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIoY29kZS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRhZyk7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBCM0NvbXBpbGF0aW9uUHRyVGFnKTsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4u
LikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRkcmVzcyk7
CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzA2Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxOCwxNCArODE4LDEzIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9LCAmdm1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0Q2FsbExvY2F0aW9ucygKLSAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykp
LAotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0
UGF0aENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xv
d1BhdGhDYWxsKSksCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihhZGRyZXNzT2ZM
aW5rRnVuY3Rpb25DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0UGF0aENhbGwpKTsKIAotICAgICAgICAg
ICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCAmdm0pOwogICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29k
ZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwpAQCAtODU1LDEwICs4NTQsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogCi0gICAg
ICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhHZXR0ZXJTZXR0ZXJQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5j
dGlvblB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNz
b3Iub3BhcXVlLCBjYWxsVGFnKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21B
Y2Nlc3Nvcik7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBD
dXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpCkBAIC0x
MDAwLDEyICs5OTgsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgICAgIGlmICghcmVhbGxvY2F0aW5nKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSk+KGJhc2VHUFIpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHIo
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHksIGNhbGxUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hh
dmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQg
c3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMTAxMywxMiArMTAxMCwxMSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKT4oCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRh
ZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRp
b25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCBjYWxsVGFnKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHM8RnVuY3Rpb25UeXBlPihzdGQ6OmdldDxBcmd1bWVudHNJbmRleD4obV9hcmd1bWVu
dHMpLi4uKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKHRhZyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRp
b25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgYXV0byBmdW5jdGlv
biA9IG1fZnVuY3Rpb247CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxs
LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihmdW5jdGlvbikp
OwogICAgICAgICB9KTsKIAogICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKG1fcmVzdWx0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9u
IDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0
QXJyYXlNb2RlRm9yU3RydWMKIHN0cnVjdCBCeVZhbEluZm8gewogICAgIEJ5VmFsSW5mbygpIHsg
fQogCi0gICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1
bXAgbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCBi
YWRUeXBlSnVtcFRvTmV4dEhvdFBhdGgsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8
SlNFbnRyeVB0clRhZz4gbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJU
YWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PiBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSwgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCBiYWRUeXBl
SnVtcFRvTmV4dEhvdFBhdGgsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCiAgICAg
ICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG5vdEluZGV4SnVt
cChub3RJbmRleEp1bXApCiAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCkBAIC0y
NDQsOSArMjQ0LDkgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKLSAgICBDb2RlTG9jYXRpb25KdW1wIG5vdEluZGV4SnVtcDsKLSAgICBD
b2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2Vw
dGlvbkhhbmRsZXI7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBub3RJbmRl
eEp1bXA7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBiYWRUeXBlSnVtcDsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25I
YW5kbGVyOwogICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7IC8vIFRoZSBhcnJheSBtb2RlIHRo
YXQgd2FzIGJha2VkIGludG8gdGhlIGlubGluZSBKSVQgY29kZS4KICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZTsKICAgICBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsMjUgKzk3LDI1IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgp
KTsKIH0KIAotQ29kZUxvY2F0aW9uTmVhckNhbGwgQ2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9j
YXRpb24oKQorQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gQ2FsbExpbmtJbmZv
OjpjYWxsUmV0dXJuTG9jYXRpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgp
KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsUmV0dXJuTG9jYXRpb25P
clBhdGNoYWJsZUp1bXAsIFJlZ3VsYXIpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2Fs
bDxKU0VudHJ5UHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwgUmVn
dWxhcik7CiB9CiAKLUNvZGVMb2NhdGlvbkp1bXAgQ2FsbExpbmtJbmZvOjpwYXRjaGFibGVKdW1w
KCkKK0NvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gQ2FsbExpbmtJbmZvOjpwYXRjaGFi
bGVKdW1wKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSgpID09IERpcmVjdFRhaWxD
YWxsKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChtX2NhbGxSZXR1cm5Mb2NhdGlvbk9y
UGF0Y2hhYmxlSnVtcCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRh
Zz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXApOwogfQogCi1Db2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgQ2FsbExpbmtJbmZvOjpob3RQYXRoQmVnaW4oKQorQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPEpTRW50cnlQdHJUYWc+IENhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0VudHJ5UHRyVGFnPihtX2hvdFBhdGhCZWdp
bk9yU2xvd1BhdGhTdGFydCk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIENhbGxMaW5rSW5mbzo6
c2xvd1BhdGhTdGFydCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkp
OwogICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIz
MDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NSw5ICsxNjUsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdm9pZCBzZXRDYWxsTG9jYXRpb25zKAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBj
YWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCi0gICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGwgaG90UGF0aE90aGVyKQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPiBjYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gaG90UGF0aE90aGVyKQog
ICAgIHsKICAgICAgICAgbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAgPSBjYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7CiAgICAgICAgIG1faG90UGF0aEJlZ2luT3JT
bG93UGF0aFN0YXJ0ID0gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwpAQCAtMTgxLDEyICsx
ODEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAK
LSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBDb2Rl
TG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAoKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgaG90UGF0aEJlZ2luKCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydCgp
OworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxSZXR1cm5Mb2Nh
dGlvbigpOworICAgIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gcGF0Y2hhYmxlSnVt
cCgpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0VudHJ5UHRyVGFnPiBob3RQYXRo
QmVnaW4oKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aFN0
YXJ0KCk7CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIoKQorICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhPdGhlcigpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9ob3RQYXRoT3RoZXI7CiAgICAgfQpAQCAtMzI3LDkgKzMyNyw5IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9jYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9o
b3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9o
b3RQYXRoT3RoZXI7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9jYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7CisgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gbV9ob3RQYXRoT3RoZXI7CiAgICAgV3JpdGVCYXJy
aWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxs
PiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZT4gbV9zdHViOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyAr
NDY3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVu
bGlua2VkQ29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsK
ICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsK
KyAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6Z2V0Q29kZVB0cjxC
eXRlY29kZVB0clRhZz4ob3BfY2F0Y2gpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2Vk
SGFuZGxlcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU2LDcgKzI1Niw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7
CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24gPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vz
c29yR2V0dGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgICAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwogCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CkBAIC0yNzgsNyArMjc4LDcgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nl
c3NvckdldHRlciA9IGJpdHdpc2VfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYWNjZXNzLmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsKICAgICAgICAgICAgICAgICAgICAg
ZG9tQXR0cmlidXRlID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuZG9tQXR0
cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tQXR0cmlidXRlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcs
NyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzLAogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1
bmN0aW9uLAotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0
dGVyLAorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0
ZXIsCiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1
dGUpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCiAgICAgLCBtX2NvbmRpdGlv
blNldChjb25kaXRpb25TZXQpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFu
dDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIGlmIChtX2ludHJpbnNpY0Z1bmN0aW9uKQogICAg
ICAgICBvdXQucHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1faW50cmluc2ljRnVuY3Rpb24pOwog
ICAgIGlmIChtX2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICBvdXQucHJpbnQoIiwgY3Vz
dG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDxjb25zdCB2b2lk
Kj4obV9jdXN0b21BY2Nlc3NvckdldHRlcikpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGN1c3Rv
bWFjY2Vzc29yZ2V0dGVyID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yR2V0dGVyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBpZiAobV9kb21BdHRyaWJ1dGUpIHsKICAgICAgICAg
b3V0LnByaW50KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRlcihtX2RvbUF0dHJpYnV0ZS0+Y2xh
c3NJbmZvKSk7CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0ZS0+ZG9tSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVs
bHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRyLAotICAgICAgICBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxscHRyLAogICAgICAgICBzdGQ6Om9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+ID0gc3RkOjpudWxsb3B0KTsKIAogICAgIH5H
ZXRCeUlkVmFyaWFudCgpOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtT
dGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5n
ZXQoKTsgfQogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pbnRyaW5zaWNGdW5jdGlvbjsgfQogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25z
dCB7IHJldHVybiBtX2ludHJpbnNpY0Z1bmN0aW9uID8gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50
cmluc2ljKCkgOiBOb0ludHJpbnNpYzsgfQotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
IGN1c3RvbUFjY2Vzc29yR2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21BY2Nlc3Nvckdl
dHRlcjsgfQorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JH
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CiAgICAgc3Rk
OjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBtX2RvbUF0dHJpYnV0ZTsgfQogCiAgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBj
b25zdCB7IHJldHVybiBvZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0OyB9CkBAIC04Niw3ICs4Niw3
IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogICAgIEpTRnVuY3Rpb24q
IG1faW50cmluc2ljRnVuY3Rpb247Ci0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgbV9j
dXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1f
Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2UKIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKLSAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSwKKyAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlLAogICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjUsMTcgKzY1LDE3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCB2aWFQcm94eSwgYWRkaXRpb25hbFNldCwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKSk7CiAgICAgcmVzdWx0LT5tX2RvbUF0dHJpYnV0ZSA9IGRvbUF0
dHJpYnV0ZTsKLSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0
dGVyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1c3RvbUdldHRlciA/IEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY3VzdG9tR2V0dGVyKSA6IG51bGxwdHI7CiAgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
LSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIsCiAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNl
KQogewogICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0
dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nh
c2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxz
ZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KSk7Ci0gICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsK
KyAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6R2V0dGVyU2V0dGVyQWNjZQogICAgIDogQmFzZShvdGhlcikKICAgICAsIG1fY3VzdG9t
U2xvdEJhc2Uob3RoZXIubV9jdXN0b21TbG90QmFzZSkKIHsKLSAgICBtX2N1c3RvbUFjY2Vzc29y
Lm9wYXF1ZSA9IG90aGVyLm1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOworICAgIG1fY3VzdG9tQWNj
ZXNzb3IgPSBvdGhlci5tX2N1c3RvbUFjY2Vzc29yOwogICAgIG1fZG9tQXR0cmlidXRlID0gb3Ro
ZXIubV9kb21BdHRyaWJ1dGU7CiB9CiAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByCiAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9t
U2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKGN1c3RvbVNsb3RCYXNlKCkpKTsKICAgICBpZiAoY2Fs
bExpbmtJbmZvKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5mbyA9ICIs
IFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKCkpKTsKLSAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0
b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAg
ICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0
b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQ
UikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJveHlhYmxlQWNjZXNzQ2FzZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQ4LDE5ICs0OSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0LCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywKKyAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBv
aW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3Rv
bUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6Om9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRl
KFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKLSAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmMgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRy
KTsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBu
dWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQg
ZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBvdmVycmlkZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIH5HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCk7CiAKLSAgICB2b2lkKiBjdXN0b21BY2Nlc3Nv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOyB9CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
KFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2lu
dFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1
ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKQEAgLTY5LDExICs3MCw3IEBAIHByaXZhdGU6
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3VzdG9tU2xvdEJhc2U7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci0gICAgdW5pb24gewot
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7Ci0gICAgICAgIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKLSAgICAgICAgdm9pZCogb3BhcXVlOwot
ICAgIH0gbV9jdXN0b21BY2Nlc3NvcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IG1fY3VzdG9tQWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0
aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDE0ICsxMDksMTMgQEAgc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQgog
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlu
a2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwpCiAgICAg
ewogICAgICAgICBpbml0aWFsaXplKHVubGlua2VkSW5mbyk7CiAgICAgICAgIG5hdGl2ZUNvZGUg
PSBsYWJlbDsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5hdGl2ZUNvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgfQogCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbmF0aXZlQ29kZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBuYXRpdmVDb2RlOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjMw
NjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBi
b29sIGxpbmtDb2RlSW5saW5lCiAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0
dWJJbmZvLnBhdGNoLnN0YXJ0LmRhdGFMb2NhdGlvbigpLCBzdHViSW5mby5wYXRjaC5pbmxpbmVT
aXplLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwog
ICAgICAgICBBU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihs
aW5rQnVmZmVyKTsKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRy
VGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUpOworICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENv
ZGVJbmxpbmU7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQordm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5p
c1ZhbGlkKCkpOwogICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCB0YXJnZXQpOwogCi0gICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIklubGluZUFjY2VzczogbGlu
a2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0
clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwogICAgIHN0YXRpYyBi
b29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7
CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYs
IEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0
dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJB
c0p1bXAoU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4pOwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGV0ZXJtaW5pbmcgdGhl
IHNpemUgb2YgYW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBsYXRmb3Jtcy4gV2hlbiBhZGRpbmcg
YSBuZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSnVtcFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0p1bXBUYWJsZS5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CiAgICAgICAgIGlu
dDMyX3QgYnJhbmNoT2Zmc2V0OwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGN0aU9mZnNldDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJU
YWc+IGN0aU9mZnNldDsKICNlbmRpZgogICAgIH07CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIE9m
ZnNldExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKICAgICAgICAgU3RyaW5nT2Zmc2V0VGFi
bGUgb2Zmc2V0VGFibGU7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY3RpRGVmYXVsdDsgLy8gRklYTUU6IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHN0
b3JlIHRoaXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlE
ZWZhdWx0OyAvLyBGSVhNRTogaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gc3RvcmUgdGhp
cy4KICNlbmRpZgogCiAgICAgICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmlu
Z0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCkBAIC02MCw3ICs2MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBpbmxp
bmUgQ29kZUxvY2F0aW9uTGFiZWwgY3RpRm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUpCisgICAg
ICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4gY3RpRm9yVmFsdWUo
U3RyaW5nSW1wbCogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgICAg
IFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5k
KHZhbHVlKTsKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwogICAgICAgICBpbnQzMl90IG1pbjsKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw+IGN0aU9mZnNldHM7Ci0g
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGN0aURlZmF1bHQ7CisgICAgICAgIFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4+IGN0aU9mZnNldHM7CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZhdWx0OwogI2VuZGlmCiAKICAgICAg
ICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRP
ZmZzZXQpOwpAQCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGN0
aU9mZnNldHMuZ3JvdyhicmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBjdGlGb3JWYWx1ZShpbnQzMl90IHZh
bHVlKQorICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0
aUZvclZhbHVlKGludDMyX3QgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICh2YWx1
ZSA+PSBtaW4gJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlIC0gbWluKSA8IGN0aU9mZnNl
dHMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjdGlPZmZzZXRzW3ZhbHVlIC0gbWlu
XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTQgKzUw
LDE0IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1IKICAgICB2b2lk
IHVubGluaygpCiAgICAgewogICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgbWFjaGlu
ZUNvZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbWFjaGluZUNv
ZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKICAgICAg
ICAgaWYgKGlzT25MaXN0KCkpCiAgICAgICAgICAgICByZW1vdmUoKTsKICAgICB9CiAgICAgCiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PiBsYXN0U2VlbkNhbGxlZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFjaGluZUNv
ZGVUYXJnZXQ7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1hY2hp
bmVDb2RlVGFyZ2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMSArMTk5LDEwIEBAIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhj
ZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKHRhZyk7CisgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC0+Y2Fs
bChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cihsb29rdXBF
eGNlcHRpb25IYW5kbGVyLCB0YWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+
anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAgICB9CkBAIC01MzksNyArNTM4LDcgQEAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxl
ci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1Jl
Z2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5u
YXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0
ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPihtYWtlc2hpZnRDYXRjaEhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGhhbmRsZXJUb1Jl
Z2lzdGVyLnN0YXJ0ID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5iaXRzKCk7CiAgICAg
ICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIuZW5kID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZS5iaXRzKCkgKyAxOwogICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+YXBwZW5kRXhj
ZXB0aW9uSGFuZGxlcihoYW5kbGVyVG9SZWdpc3Rlcik7CkBAIC01NTksOCArNTU4LDggQEAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICByZXR1cm4gQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigpOwotICAgICAgICAKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzdWNjZXNzTGFiZWwgPSBzdHViSW5m
by5kb25lTG9jYXRpb24oKTsKKwogICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBz
dWNjZXNzTGFiZWwpOwogCiAgICAgbGlua0J1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKQEAgLTU2OCw4ICs1NjcsOCBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgaWYgKFBvbHltb3JwaGljQWNjZXNzSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2Nr
LCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjogR2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mg
c3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlu
a0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVC
bG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICIlcyIsIHRv
Q1N0cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29k
ZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3RE
dW1wKGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAhPSBHZW5lcmF0ZWRGaW5hbENvZGUp
OwogICAgIH0KICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdChLaW5k
IGtpbmQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSkK
ICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICAgICAgLCBtX2NvZGUoY29kZSkKICAgICB7CkBA
IC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNv
ZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
OyB9CiAgICAgCiAgICAgYm9vbCBtYWRlTm9DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IE1hZGVOb0NoYW5nZXM7IH0KICAgICBib29sIGdhdmVVcCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZCA9PSBHYXZlVXA7IH0KQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2
YXRlOgogICAgIEtpbmQgbV9raW5kOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGU7
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURl
dGFpbD4+IG1fd2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjMw
NjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAgICAgCiAgICAgc3RydWN0IHsKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0
aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMsIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFi
bGUganVtcCBmb3IgJ2luJyBjYWNoZXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRo
ZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJs
ZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4KICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
czsKICAgICAgICAgdWludDMyX3QgaW5saW5lU2l6ZTsKICAgICAgICAgaW50MzJfdCBkZWx0YUZy
b21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb247CkBAIC0xODUsMTMgKzE4NSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9IHBhdGNoOwogCi0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0
aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldChwYXRjaC5k
ZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChw
YXRjaC5pbmxpbmVTaXplKTsgfQotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFi
bGVKdW1wRm9ySW4oKQorICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5zdGFydC5jYWxsQXRPZmZzZXQ8SlNJ
bnRlcm5hbFB0clRhZz4ocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9u
KTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigp
IHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQ8SlNFbnRyeVB0clRhZz4ocGF0Y2gu
aW5saW5lU2l6ZSk7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9m
ZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7IH0KKyAgICBDb2RlTG9j
YXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXBGb3JJbigpCiAgICAgeyAK
ICAgICAgICAgQVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6SW4pOwotICAgICAgICBy
ZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOworICAgICAgICByZXR1cm4gcGF0Y2gu
c3RhcnQuanVtcEF0T2Zmc2V0PEpTSW50ZXJuYWxQdHJUYWc+KDApOwogICAgIH0KIAogICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhKiBp
dGVtKSB7IHJldHVybiBpdGVtLT5ieXRlY29kZUluZGV4OyB9KTsKICAgICB9CiAKLSAgICB2b2lk
IGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBtYWNo
aW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB2b2lk
IGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxG
bHVzaEZvcm1hdD4mJiBhcmd1bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBjYXRjaEVudHJ5
cG9pbnRzLmFwcGVuZChDYXRjaEVudHJ5cG9pbnREYXRhIHsgbWFjaGluZUNvZGUsICBXVEZNb3Zl
KGFyZ3VtZW50Rm9ybWF0cyksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMw
NjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTY1LDExICsxNjUsMTEgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1
bXBEaXNhc3NlbWJseShQcmludAogICAgICAgICBwcmVmaXhCdWZmZXJbaSArIHByZWZpeExlbmd0
aF0gPSAnICc7CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExlbmd0aCArIGFtb3VudE9mTm9kZVdo
aXRlU3BhY2VdID0gMDsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihwcmV2aW91c0xhYmVsKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBl
bmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY3VycmVudExhYmVsKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
RGlzYXNzZW1ibHlQdHJUYWc+KHByZXZpb3VzTGFiZWwpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PERpc2Fzc2VtYmx5UHRyVGFnPiBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1i
bHlQdHJUYWc+KGN1cnJlbnRMYWJlbCk7CiAgICAgcHJldmlvdXNMYWJlbCA9IGN1cnJlbnRMYWJl
bDsKLSAgICBBU1NFUlQoZW5kLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSA+PSBzdGFy
dC5leGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwotICAgIGRpc2Fzc2VtYmxlKHN0YXJ0
LCBlbmQuZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpIC0gc3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3M8dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0YSgpLCBvdXQpOworICAgIEFTU0VS
VChlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5kYXRhTG9jYXRpb248dWlu
dHB0cl90PigpKTsKKyAgICBkaXNhc3NlbWJsZShzdGFydCwgZW5kLmRhdGFMb2NhdGlvbjx1aW50
cHRyX3Q+KCkgLSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIu
ZGF0YSgpLCBvdXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsNyArMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSklUQ29kZTsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIFZNOwogCiBu
YW1lc3BhY2UgREZHIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHVi
KG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgUHRyVGFnIG9zckV4aXRUaHVua1RhZyA9IHB0
clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBvc3JF
eGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5yZXRhZ2dlZENv
ZGUob3NyRXhpdFRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRp
b25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1
cmVKdW1wczsKQEAgLTE2Miw4ICsxNjEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhj
ZXB0aW9uSGFuZGxlCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAg
ICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKGNhbGxUYWcpLCBGdW5j
dGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBjYWxsVGFnKSkp
OworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0
clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxl
ckZyb21DYWxsZXJGcmFtZSkpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSgpKTsKICAgICB9CkBAIC0xODIsOCArMTgwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBQ
dHJUYWcgY2FsbFRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgp
KTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChjYWxsVGFnKSwg
RnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwgY2FsbFRhZykpKTsKKyAgICAgICAg
bV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAKICAg
ICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQpAQCAtMjE3LDE1ICsy
MTQsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAg
ICAKICAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBw
dHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNldHMuZ3Jvdyh0
YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRh
YmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0
c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEu
Y2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBk
YXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUu
c3dpdGNoTG9va3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxlLm1pbl0gPQotICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9j
ay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2stPmlu
ZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNDgsOSArMjQ0LDggQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQ
dHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogCi0g
ICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hl
YWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAg
dGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4o
bV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxl
Lm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJs
ZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjU5LDcgKzI1NCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENh
c2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zm
c2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9m
ZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5i
bG9jay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgaXRlci0+dmFsdWUuY3RpT2Zm
c2V0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNb
bXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc3
LDUyICsyNzIsNTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucy5zaXplKCk7ICsraSkgewogICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX2luc1tpXS5tX3N0dWJJbmZvOwogCi0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fanVtcCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4o
bV9pbnNbaV0ubV9qdW1wKTsKICAgICAgICAgaW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAg
ICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9pbnNbaV0ubV9kb25lKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fZG9uZSkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbmxpbmVTaXplID49IDApOwogICAgICAgICBpbmZvLnBhdGNoLmlubGluZVNpemUg
PSBpbmxpbmVTaXplOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9z
bG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0
b3ItPmNhbGwoKSkpOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAg
ICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRo
R2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxh
YmVsKCkpKTsKICAgICB9CiAgICAgCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0Nh
bGxQdHJUYWcsIHZtKCkpOwotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyKHZt
KCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtU
YWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25Q
dHI8Tm9QdHJUYWc+KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxs
cykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAg
IGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwogICAgICAg
ICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQudGFyZ2V0
VG9DaGVjaykpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVj
b3JkLmZhc3RDYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihyZWNvcmQu
c2xvd0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVj
aykpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0
clRhZz4ocmVjb3JkLmZhc3RDYWxsKSk7CiAgICAgfQogICAgIAogICAgIGZvciAoSlNEaXJlY3RD
YWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3Jk
LmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRy
VGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpKTsKICAgICAgICAgaW5mby5zZXRD
YWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFn
KSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5jYWxs
KSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPigpLAorICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHJlY29yZC5zbG93
UGF0aCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5
UHRyVGFnPihyZWNvcmQuY2FsbCkpOwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0VGFp
bENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWlsQ2FsbHMpIHsKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBpbmZvLnNldENhbGxMb2Nh
dGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJs
ZUp1bXApLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0
aCwgTmVhckNvZGVQdHJUYWcpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwocmVjb3JkLmNhbGwpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHJlY29yZC5j
YWxsKSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1
bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwot
ICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0o
KSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3Ny
RXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFnKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsg
PSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAg
IGF1dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRU
aHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9z
ckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5m
byA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VQ
cm9iZU9TUkV4aXQoKSkgewpAQCAtMzMyLDggKzMyNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgfQogICAgICAgICBpZiAoaW5mby5tX3JlcGxh
Y2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLmp1
bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLCBOZWFyQ29kZVB0
clRhZyksCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBs
YWNlbWVudERlc3RpbmF0aW9uLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50
U291cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8T1NSRXhpdFB0
clRhZz4oaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24pKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0zNDEsOSArMzM0LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9q
aXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2V4aXRTaXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWZWN0b3I8TGFi
ZWw+JiBsYWJlbHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwotICAgICAgICAgICAgVmVjdG9yPGNv
bnN0IHZvaWQqPiBhZGRyZXNzZXM7CisgICAgICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQotICAgICAgICAgICAgICAgIGFk
ZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsc1tqXSwgREZHT1NSRXhp
dFB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgYWRkcmVzc2Vz
LmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obGFiZWxzW2pd
KSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFkZE9TUkV4aXRTaXRlKGFk
ZHJlc3Nlcyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTM2MCw3ICszNTMsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAgICAvLyBpLmUs
IHdlIGV4cGxpY2l0bHkgZW1pdHRlZCBhbiBleGNlcHRpb25DaGVjayB0aGF0IHdlIGtub3cgd2ls
bCBiZSBjYXVnaHQgaW4gdGhpcyBtYWNoaW5lIGZyYW1lLgogICAgICAgICAgICAgLy8gSWYgdGhp
cyAqaXMgc2V0KiwgaXQgbWVhbnMgd2Ugd2lsbCBiZSBsYW5kaW5nIGF0IHRoaXMgY29kZSBsb2Nh
dGlvbiBmcm9tIGdlbmVyaWNVbndpbmQgZnJvbSBhbgogICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IHRocm93biBpbiBhIGNoaWxkIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBjYXRjaExhYmVsID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVu
dERlc3RpbmF0aW9uLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNhdGNoTGFiZWwgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50
RGVzdGluYXRpb24pOwogICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3RXhjZXB0aW9uSGFuZGxl
ciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uYmFzZWxpbmVFeGNlcHRp
b25IYW5kbGVyOwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1fZXhjZXB0
aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNpdGVJbmRleDsKICAgICAgICAgICAg
IG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZS5iaXRzKCk7CkBAIC01MzksMTEg
KzUzMiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIG1faml0
Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJs
b2NrOjpMYXRlU2hyaW5rKTsKIAotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgpKSwgTmVhckNvZGVQdHJUYWcpKSk7
CisgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1
bmtQdHJUYWc+KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7
CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVj
aywgQ29kZVB0clRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2FyaXR5Q2hlY2spOwogCiAgICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtl
X3VuaXF1ZTxKSVRGaW5hbGl6ZXI+KAogICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2Rl
LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsK
QEAgLTU4Myw3ICs1NzYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VDYXRjaEVudHJ5cG9p
bnQoCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pc0NhdGNoRW50cnlwb2ludCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0
ZWQpOyAvLyBBbiBlbnRyeXBvaW50IGlzIHJlYWNoYWJsZSBieSBkZWZpbml0aW9uLgotICAgIG1f
aml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2ludChiYXNpY0Jsb2NrLmJ5dGVjb2Rl
QmVnaW4sIGxpbmtCdWZmZXIubG9jYXRpb25PZihibG9ja0hlYWQsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7Cisg
ICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0
ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiB9CiAKIHZvaWQgSklUQ29t
cGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVy
OjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAyMzA2NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhpdDsKIC8vIEV2ZXJ5IENhbGxMaW5r
UmVjb3JkIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsIGluc3RydWN0aW9uICYgdGhl
IGZ1bmN0aW9uCiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCB0by4KIHN0cnVjdCBDYWxs
TGlua1JlY29yZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAg
ICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAg
IHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7Ci0gICAgRnVuY3Rp
b25QdHIgbV9mdW5jdGlvbjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVu
Y3Rpb247CiB9OwogCiBzdHJ1Y3QgSW5SZWNvcmQgewpAQCAtMTU2LDEwICsxNTYsMTAgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhv
dXQgYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBDYWxsIGFw
cGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAg
ICB7Ci0gICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0YWcpOwotICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmN0
aW9uLCB0YWcpKSk7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRpb25Q
dHJUYWcpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNh
bGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICByZXR1
cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMCw2ICszMTAsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAg
ICAsIGluZm8oaW5mbykKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGZhc3RDYWxsLmlz
RmxhZ1NldChDYWxsOjpOZWFyKSk7CisgICAgICAgICAgICBBU1NFUlQoc2xvd0NhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ2FsbCBmYXN0
Q2FsbDsKQEAgLTMyNCw2ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBzbG93UGF0
aChzbG93UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBDYWxsIGNhbGw7CkBAIC0zMzgsNiArMzQxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykK
ICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIp
ICYmIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+JiYg
aml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVy
KFBsYW4mIHBsYW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUsIHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2spCiAgICAgOiBGaW5hbGl6ZXIocGxhbikKICAgICAsIG1faml0Q29kZShX
VEZNb3ZlKGppdENvZGUpKQogICAgICwgbV9saW5rQnVmZmVyKFdURk1vdmUobGlua0J1ZmZlcikp
CkBAIC01Niw3ICs1Niw3IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAogYm9v
bCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIENvZGVQdHJUYWcsICJE
RkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxh
bi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9s
aW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
KS5kYXRhKCkpOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoY29kZVJlZiwgY29k
ZVJlZi5jb2RlKCkpOwogICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLmNvcHlSZWYoKSk7CkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVj
ay5pc0VtcHR5VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKLSAg
ICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgQ29kZVB0clRhZywgIkRGRyBK
SVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNv
ZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoKm1fbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSkuZGF0YSgpKSwKICAgICAgICAgbV93aXRoQXJpdHlDaGVjayk7CiAgICAgbV9w
bGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkocmV2aXNp
b24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogY2xhc3MgSklURmluYWxpemVyIDogcHVibGljIEZpbmFsaXplciB7CiBwdWJsaWM6
Ci0gICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpFbXB0eVZhbHVlKSk7Cisg
ICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExp
bmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CiAgICAgdmlydHVhbCB+SklU
RmluYWxpemVyKCk7CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgb3ZlcnJpZGU7CkBAIC00
Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVmPEpJVENvZGU+IG1faml0Q29kZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbV9saW5rQnVmZmVyOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVw
bGFjZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1
bXBSZXBsYWNlbWVudC5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEp1bXBSZXBsYWNl
bWVudCB7CiBwdWJsaWM6Ci0gICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxhYmVsIHNv
dXJjZSwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgSnVtcFJlcGxhY2VtZW50
KENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNvdXJjZSwgQ29kZUxvY2F0aW9u
TGFiZWw8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24pCiAgICAgICAgIDogbV9zb3VyY2Uoc291
cmNlKQogICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgewpAQCAtNDQs
OCArNDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UuZGF0YUxvY2F0aW9uKCk7IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBtX3NvdXJjZTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rlc3RpbmF0aW9uOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc291cmNlOworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJUYWc+IG1fZGVzdGluYXRpb247CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RydWN0IFN0YWNrQWNjZXNz
RGF0YSB7CiB9OwogCiBzdHJ1Y3QgQ2FsbERPTUdldHRlckRhdGEgewotICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyIHsgbnVsbHB0ciB9OworICAgIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgY29u
c3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51bGxwdHIgfTsKICAgICBET01KSVQ6
OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBA
QCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgdXNpbmcgdGFyZ2V0
IFBDICVwLlxuIiwgdGFyZ2V0UEMpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKLSAg
ICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdl
dFBDLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgKmJpdHdp
c2VfY2FzdDx2b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHJldGFnQ29kZVB0cih0YXJnZXRQQywgSlNF
bnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogCiAgICAgUmVnaXN0ZXIq
IHBpdm90ID0gc2NyYXRjaCArIDIgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsK
ICAgICAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLXZvaWQqIHByZXBhcmVDYXRjaE9T
UkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsgCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpGVExKSVQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0Lmgi
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMu
aCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKQEAgLTczLDcgKzc0LDcgQEAgaW5saW5l
IHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSQogc3RydWN0IENhdGNoRW50cnlwb2lu
dERhdGEgewogICAgIC8vIFdlIHVzZSB0aGlzIHdoZW4gZG9pbmcgT1NSIGVudHJ5IGF0IGNhdGNo
LiBXZSBwcm92ZSB0aGUgYXJndW1lbnRzCiAgICAgLy8gYXJlIG9mIHRoZSBleHBlY3RlZCB0eXBl
IGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgotICAgIHZvaWQqIG1hY2hpbmVDb2Rl
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNo
aW5lQ29kZTsKICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKQEAgLTgzLDkgKzg0LDkgQEAgc3RydWN0IENhdGNo
RW50cnlwb2ludERhdGEgewogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVC
bG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVk
LCB3ZSBjYW4ndCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1
bXAgdG8uCi12b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9
CitpbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHBy
ZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwNjY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzkwLDExICszOTAsMTAgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250
ZXh0JiBjbwogCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4s
IGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9
IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9j
YXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgICAgIFB0clRhZyBsb2NhdGlvblRh
ZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tGb3JFeGl0LCBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlv
bi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpOwogCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgICAg
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwpAQCAtNzkxLDcgKzc5MCw3IEBAIHN0
YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGUKIAogI2lmIFVTRShQT0lOVEVS
X1BST0ZJTElORykKICAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhf
dCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCop
OwotICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lz
ZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOworICAgICAgICAgICAganVtcFRhcmdldCA9IHJl
dGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFn
PihuZXdFbnRyeVNQKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5s
aW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKICAgICAgICAgfQpA
QCAtODY2LDcgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250
ZXgKICAgICB9CiAKICAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+
KCk7Ci0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyKGp1bXBUYXJnZXQsIENvZGVQdHJU
YWcpOworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1w
VGFyZ2V0KTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQs
IHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKQEAgLTkzMSw5ICs5
MzAsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0OjpnZXRQYXRjaGFiCiAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wKEFzc2VtYmxlckxhYmVsKG1fcGF0Y2hhYmxlQ29kZU9m
ZnNldCkpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJl
cGF0Y2goQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2spIGNvbnN0CitDb2RlTG9jYXRpb25KdW1wPEpT
SW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2Nr
KiBkZmdDb2RlQmxvY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGZn
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmRhdGFBZGRyZXNzQXRPZmZzZXQobV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4o
dGFnQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPihkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGF0
YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKSk7CiB9CiAKIHZvaWQgT1NS
RXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk5NSwxOSArOTk0
LDE4IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0
QXJndW1lbnRzRHVyaW5nRXhpdCksIGRlY2x0eXBlKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3Vt
ZW50c0R1cmluZ0V4aXQpPjo6dmFsdWUsICJXZSBhc3N1bWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUg
dGhlIHNhbWUgc2lnbmF0dXJlIGJlbG93LiIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk+KAogICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSks
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgaml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRp
b25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0LCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVk
QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CiAKICAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQp
OwpAQCAtMTA0Niw3ICsxMDQ0LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBp
bGVPU1JFeAogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkKICAgICAg
ICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zcGVjdWxhdGlvblJl
Y292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKIAotICAgIFB0clRhZyBleGl0VGFnID0gcHRy
VGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICB7CiAgICAgICAgIENDYWxsSGVscGVycyBq
aXQoY29kZUJsb2NrKTsKIApAQCAtMTA3NywxNCArMTA3NCwxNCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYo
CiAgICAgICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
T1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSwKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLCBleGl0VGFnLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcs
CiAgICAgICAgICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9w
ZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQu
bV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhl
eGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCiAgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRh
KCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2Nv
ZGUucmV0YWdnZWRDb2RlKGV4aXRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2Nr
KSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7
CiAKICAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDkgKzE0NSw5IEBAIHN0cnVjdCBP
U1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBzdGF0aWMgdm9pZCBKSVRfT1BFUkFU
SU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKICAgICBzdGF0aWMg
dm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwogCisgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS8zOTQ5ODI0ND4uCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zm
c2V0IHsgMCB9OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIAogICAgIFJlZlB0
cjxPU1JFeGl0U3RhdGU+IGV4aXRTdGF0ZTsKICAgICAKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICB2b2lkIHNldFBhdGNoYWJs
ZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKLSAgICBD
b2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7
CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBjb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwogICAgIHZvaWQgY29ycmVjdEp1bXAoTGlua0J1ZmZl
ciYpOwogCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw4IEBAIHZvaWQg
aGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBqaXQubW92ZShHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogI2Vu
ZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyKHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdGFnKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdykpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gaml0Lmp1bXAo
KTsKICAgICAKICAgICB0b29GZXdGYWlscy5saW5rKCZqaXQpOwpAQCAtMTg4LDcgKzE4Nyw3IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigp
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogCi0gICAgICAgICAgICAg
ICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9u
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0yNzYsOSArMjc1LDggQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVC
YXJyaWVyKENDYWxsSGVscGVycwogI2VuZGlmCiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4ob3duZXIpOwotICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlv
bk9TUldyaXRlQmFycmllciwgdGFnKSksIHNjcmF0Y2gpOwotICAgIGppdC5jYWxsKHNjcmF0Y2gs
IHRhZyk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNj
cmF0Y2gpOworICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CiAKICNpZiBD
UFUoWDg2KQogICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2Yodm9pZCopICogNCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBA
IC0zMTksMTIgKzMxNywxMCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIEND
YWxsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9
PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1h
cCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+
aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAg
QVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKLSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWco
Q29kZVB0clRhZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdn
ZWQobG9jYXRpb25UYWcsIGV4aXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCog
anVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVl
ZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCkBAIC0zMzIsNyArMzI4LDcgQEAgdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIH0KICAgICAKICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJl
Z1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwgZXhpdFRhZyk7CisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDQsNyArMzA0NCw3IEBAIHN0YXRp
YyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkg
YmxvY2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAo
dm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9jaywgZW50
cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CiAgICAgICAgICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJj
IyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdD
b2RlUHRyPGNoYXIqPihhZGRyZXNzLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihl
eGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVz
cywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE2Niw3ICszMTY2LDcgQEAgc3RhdGljIGNoYXIq
IHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGpp
dENvZGUtPm9zckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgp
OwogICAgIGlmICghYWRkcmVzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0clRhZywgYml0d2lzZV9jYXN0PFB0
clRhZz4oZXhlYykpOworICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpT
RW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93
UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsMTIgKzE2MiwxMSBAQCBjbGFzcyBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5l
CiAgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKICAgICBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCisgICAgICAgIEp1bXBU
eXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAg
ICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJl
bWVudCByZXF1aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGU+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxN
b2RlLCByZXF1aXJlbWVudCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJndW1lbnRzKHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCi0gICAgICAgICwgbV9jYWxsVGFnKGNhbGxU
YWcpCiAgICAgewogICAgIH0KIApAQCAtMTc2LDcgKzE3NSw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHVucGFja0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQsIHN0ZDo6aW5kZXhfc2Vx
dWVuY2U8QXJndW1lbnRzSW5kZXguLi4+KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0VXAoaml0
KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9m
dW5jdGlvbiwgbV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpn
ZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOworICAgICAgICB0aGlzLT5yZWNv
cmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCBleHRyYWN0UmVzdWx0
KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4u
LikpOwogICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwogICAgIH0KIApAQCAtMTg2LDM2ICsx
ODUsMTYgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4u
PiBtX2FyZ3VtZW50czsKLSAgICBQdHJUYWcgbV9jYWxsVGFnOwogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAotICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCi0gICAgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1
aXJlbWVudCwKLSAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1l
bnRzLi4uPj4oCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIHNwaWxsTW9k
ZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAogICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAgICBTcGlsbFJlZ2lzdGVyc01vZGUg
c3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LAogICAgIFJl
c3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewogICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjxK
dW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudHMuLi4+PigKLSAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBzcGlsbE1vZGUsIHJlcXVp
cmVtZW50LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEp1
bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0
b3I+IHNsb3dQYXRoQ2FsbCgKLSAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIFB0clRhZyBjYWxsVGFnLAotICAgIFJlc3VsdFR5cGUg
cmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotewotICAgIHJldHVybiBzbG93UGF0aENh
bGwoCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIE5lZWRUb1NwaWxsLCBF
eGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0LCBhcmd1bWVudHMu
Li4pOworICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50
LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KQEAgLTIyNCw3ICsyMDMsNyBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNs
b3dQYXRoR2VuZXJhdG9yCiAgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCiB7CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1
aXJlbWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgZnJv
bSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6
OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5
cGUsIHVuc2lnbmVkIG51bWJlck9mQXNzaWdubWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMDY2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1w
KCkpOwogCiAgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksIEdl
dFByb3BlcnR5UHRyVGFnLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAgICAgc3BpbGxNb2RlLCBFeGNlcHRp
b25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAg
ICAgCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZFdpdGhUaAogICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAK
ICAgICBhdXRvIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRhZywK
KyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwKICAgICAgICAgRG9udFNwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05l
ZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQ
UiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgCkBAIC0yNTA2LDcgKzI1
MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpA
QCAtMjU2Miw3ICsyNTYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFnLAor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2Jq
ZWN0SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKQEAgLTI2MTQsNyArMjYxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJU
YWcsCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjc3Myw3ICsyNzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Qg
PyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0IDogb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCksCi0gICAgICAgICAgICAg
ICAgICAgIFB1dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHZhbHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbm9SZXN1
bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTI4NTcsNyArMjg1Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5v
cCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QpLAotICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVB0clRhZywgTm9SZXN1bHQs
IGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MzIsOCArMzkzMiw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRF
bWl0UHJvZmlsaW5nKTsKLSAgICBQdHJUYWcgbWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRh
ZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKLQogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsK
ICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0
eSgpKTsKIApAQCAtMzk2Miw5ICszOTYwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1hdGhJQyhOb2RlKgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAgICBhZGRJ
Q0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoaW5nRnVuY3Rpb24pLCBtYXRoSUNUYWcs
IHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+
KHJlcGF0Y2hpbmdGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBpbm5lckxl
ZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9u
U3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9u
LCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CiAKICAgICAgICAg
ICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CkBAIC0zOTkzLDcgKzM5OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TWF0aElDKE5vZGUqCiAgICAgICAgIH0KIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0KIApAQCAtNDYzOCw4ICs0NjM2LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogCiAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBt
YXRoSUMtPmdlbmVyYXRlSW5saW5lKG1faml0LCAqaWNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVt
aXRQcm9maWxpbmcpOwotICAgIFB0clRhZyBtYXRoSUNUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFn
LCBtYXRoSUMtPmluc3RydWN0aW9uKCkpOwotCiAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewog
ICAgICAgICBBU1NFUlQoIWljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkp
OwogCkBAIC00NjU4LDkgKzQ2NTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0
aElDKE5vZGUqCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwogCiAgICAgICAg
ICAgICBpZiAoaWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAg
ICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiks
IG1hdGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1
bmN0aW9uKSwgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFn
LCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwg
cmVzdWx0UmVncywgY2hpbGRSZWdzKTsKIAogICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxh
bnMpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTQ2ODEsNyArNDY3
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywgcmVzdWx0UmVncywg
Y2hpbGRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIGNoaWxkUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAgICAgfQogCkBAIC05MDAwLDYgKzg5OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2FsbERPTShOb2RlCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzaWduYXR1cmUtPnVuc2FmZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9u
UHRyVGFnKTsKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykgewogICAgIGNhc2UgMToKQEAgLTkwMjQsNyArOTAyMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUKIHsKICAgICBET01KSVQ6OkNhbGxET01HZXR0
ZXJTbmlwcGV0KiBzbmlwcGV0ID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+c25pcHBldDsK
ICAgICBpZiAoIXNuaXBwZXQpIHsKLSAgICAgICAgYXV0byogZ2V0dGVyID0gbm9kZS0+Y2FsbERP
TUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3Vz
dG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKQEAgLTkwMzUsNyArOTAzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NR2V0dGUKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRp
b25fRUpJPihDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChu
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIG1f
aml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9qaXQudm0oKS0+dG9w
Q2FsbEZyYW1lKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKGdldHRlcik7
CisgICAgICAgIG1faml0LmFwcGVuZENhbGwoZ2V0dGVyLnJldGFnZ2VkPENGdW5jdGlvblB0clRh
Zz4oKSk7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKIAogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtMTAyMjIsOCArMTAyMTksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IG1faml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gpOwogI2VuZGlmCi0gICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLSAgICBtX2ppdC5qdW1w
KHNjcmF0Y2gsIHRhZyk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7
CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKIH0KIApAQCAtMTAyNDksOCArMTAy
NDUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAKICAgICAg
ICAgdmFsdWUudXNlKCk7CiAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1faml0
LmNvZGVCbG9jaygpLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0g
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CiAg
ICAgICAgIGF1dG8gbm90SW50MzIgPSBtX2ppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7
CiAgICAgICAgIGVtaXRTd2l0Y2hJbnRKdW1wKGRhdGEsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAgICAgbm90SW50MzIubGluaygmbV9qaXQpOwpAQCAt
MTAyNTksNyArMTAyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5v
ZGUqCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0gICAgICAgIG1faml0Lmp1bXAoc2Ny
YXRjaCwgdGFnKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNTE2LDE2ICsxMDUxMCwxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAgICAgIH0KICAgICAgICAgdG90YWxM
ZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byogY29kZUJs
b2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisKICAgICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8
IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVu
Z3RoKCkpIHsKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgb3BlcmF0
aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNo
VGFibGVJbmRleCksIHN0cmluZyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0g
ICAgICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOworICAgICAgICBtX2ppdC5qdW1wKHN0cmlu
ZywgSlNTd2l0Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTA1
NTgsMTUgKzEwNTQ5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdP
blMKICAgICBlbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSgKICAgICAgICAgZGF0YSwgY2Fz
ZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgc3RyaW5nLCBsZW5ndGhHUFIsIHRlbXBHUFIsIDAsIGZh
bHNlKTsKICAgICAKLSAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLQogICAgIHNsb3dDYXNlcy5s
aW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RyaW5nKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIG1faml0Lmp1
bXAoc3RyaW5nLCB0YWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm9kZSogbm9kZSwg
U3dpdGNoRGF0YSogZGF0YSkKQEAgLTEyNzEzLDcgKzEyNzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcgogICAgIH0KICAgICB9CiAKLSAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlCeUludCwgSGFzUHJvcGVydHlQdHJUYWcsIHJlc3VsdEdQUiwgYmFzZUdQUiwg
aW5kZXhHUFIsIHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgp
KSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIs
IGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUo
KSkpKTsKIAogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0K
QEAgLTEyNzgxLDcgKzEyNzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERp
cmVjdFBuYQogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwg
R2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKHByb3BlcnR5R1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBi
YXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUikpKTsKIAogICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAjZW5kaWYKQEAgLTEyODg5LDcgKzEyODc3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKIAogICAgIGF1dG8gc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgUHV0UHJvcGVydHlQdHJUYWcsIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVS
ZWdzLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIE5v
UmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAogICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAK
ICAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjMw
NjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MzEsMzAgKzkzMSwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KLSAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwg
dGFnLCByZXN1bHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIFJlc3VsdFJlZ1R5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RkOjpl
bmFibGVfaWZfdDwKLSAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwKLSAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJU
YWcsIHJlc3VsdCwgYXJncy4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0Ci0gICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZhbHVlLAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKLSAgICB7Ci0gICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZywgYXJncy4uLik7Ci0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBBcmcsIHR5cGVuYW1lLi4uIEFy
Z3M+CkBAIC05NjQsMTcgKzk0NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4K
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmcgYXJnLCBBcmdz
Li4uIGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IENGdW5jdGlvblB0clRhZywgYXJnLCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0
LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIE5vUmVzdWx0VGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAg
ewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
LSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0YWcpOworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmcsIGFyZ3MuLi4pOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05ODMsMTcgKzk1NCw4IEBA
IHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJncy4uLiBhcmdzKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIE5v
UmVzdWx0LCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNh
bGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcpCi0gICAgewot
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGU+CkBAIC0xMDAyLDcgKzk2NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4K
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcpOworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogI3VuZGVmIEZJUlNUX0FSR1VNRU5U
X1RZUEUKQEAgLTEwMzksNjIgKzEwMDIsNTYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJl
c3VsdHMsIGFuZCBvcHRpb25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBl
eGNlcHRpb24uCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAg
ICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7Cisg
ICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
ZnVuY3Rpb24pOwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKSAmJiAocmVz
dWx0ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0KQorCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHQpOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0MSwgR1BSUmVnIHJlc3Vs
dDIpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJS
ZWcgcmVzdWx0MikKICAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsKGZ1bmN0aW9uLCB0YWcpOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHQx
LCByZXN1bHQyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQ
UlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdDEsIHJlc3Vs
dDIpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHJlc3VsdFJlZ3MuZ3ByKCkpOwogI2Vs
c2UKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHRhZywgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHRSZWdzKTsKLSAgICB9CisKICNp
ZiBDUFUoWDg2KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS5mc3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlc3VsdCk7CkBAIC0xMTAyLDI2ICsxMDU5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQogI2VsaWYgQ1BVKEFSTSkgJiYgIUNQVShBUk1fSEFSREZQKQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihyZXN1
bHQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZWxzZSAvLyBDUFUoWDg2XzY0KSB8fCAoQ1BV
KEFSTSkgJiYgQ1BVKEFSTV9IQVJERlApKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2Vu
ZGlmCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdCk7Ci0g
ICAgfQogCiAgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlv
biBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShy
ZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JF
eGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAg
ICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsIHZtKTsKLSAgICBQdHJUYWcgb3Ny
RXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgb3NyRXhpdFRodW5rVGFnLCAiREZHIE9TUiBleGl0IHRodW5r
Iik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiREZHIE9TUiBleGl0IHRodW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogCkBAIC04Myw4ICs4Miw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCi0gICAg
UHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTEw
MSwxNyArOTksMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAog
I2VuZGlmCiAgICAgfQogCi0gICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRk
cmVzcygmdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBwdHJUYWcoREZHT1NSRXhpdFB0clRh
Zywgdm0pKTsKKyAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2
bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQdHJUYWcpOwogCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKE9TUkV4aXQ6OmNvbXBpbGVPU1JF
eGl0LCBjYWxsVGFnKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpKTsKIAotICAg
IFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pOwot
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JFeGl0VGh1bmtUYWcsICJE
RkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRo
dW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlU
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRy
KTsKIApAQCAtMTQ5LDkgKzE0Niw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRo
dW5rR2VuZXIKIAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKLSAgICBQdHJUYWcgb3NyRW50cnlUaHVua1RhZyA9IHB0clRhZyhERkdP
U1JFbnRyeVB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JF
bnRyeVRodW5rVGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZW50cnkgdGh1bmsi
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQCBj
bGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50
cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5j
cHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBBNjRET3Bjb2Rl
IGFybTY0T3Bjb2RlOwogCi0gICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IHJlbW92ZUNvZGVQdHJU
YWc8dWludDMyX3QqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHVpbnQzMl90
KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDMyX3Qq
PigpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgd2hpbGUgKGJ5dGVDb3Vu
dCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fz
c2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rp
c2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNp
emUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNh
c3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBj
b2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KQogewogICAgIEFSTXY3RE9wY29kZSBhcm1PcGNvZGU7CiAKLSAgICB1aW50MTZfdCogY3VycmVu
dFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpJn4xKTsKKyAgICB1aW50MTZfdCogY3Vy
cmVudFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkmfjEpOwogICAgIHVp
bnQxNl90KiBlbmRQQyA9IGN1cnJlbnRQQyArIChzaXplIC8gc2l6ZW9mKHVpbnQxNl90KSk7CiAK
ICAgICB3aGlsZSAoY3VycmVudFBDIDwgZW5kUEMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIz
MDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEyICszNywxMiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQ
dHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCit2
b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpCiB7CiAgICAgaWYgKHRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgcHJl
Zml4LCBvdXQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgb3V0LnByaW50ZigiJXNkaXNh
c3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSArIHNpemUpOworICAgIG91dC5wcmludGYoIiVzZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBm
b3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4LCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSwgY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6
ZSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgY2hhciogaGVhZGVyIHsgbnVsbHB0ciB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjb2RlUmVmOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxEaXNhc3NlbWJseVB0clRh
Zz4gY29kZVJlZjsKICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICBjb25zdCBjaGFyKiBwcmVm
aXggeyBudWxscHRyIH07CiB9OwpAQCAtMTI4LDcgKzEyOCw3IEBAIEFzeW5jaHJvbm91c0Rpc2Fz
c2VtYmxlciYgYXN5bmNocm9ub3VzRGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiB2b2lk
IGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiBwcmVmaXgpCisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUmVmLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4KQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+
IHRhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERpc2Fzc2VtYmx5VGFzaz4oKTsKICAgICB0YXNrLT5o
ZWFkZXIgPSBzdHJkdXAoaGVhZGVyLmRhdGEoKSk7IC8vIFl1Y2shIFdlIG5lZWQgdGhpcyBiZWNh
dXNlIENTdHJpbmcgZG9lcyByYWN5IHJlZmNvdW50aW5nLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA2
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE5ICsyNiwyMCBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgIlB0clRhZy5oIgogI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOwotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwordGVtcGxhdGU8
UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi1i
b29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90
LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7Citib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVf
dCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYpOwogI2Vsc2UKLWlubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBj
b25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBj
b25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2
LDEyICs0NywxMiBAQCBpbmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvCiAK
IC8vIFByaW50cyBlaXRoZXIgdGhlIGRpc2Fzc2VtYmx5LCBvciBhIGxpbmUgb2YgdGV4dCBpbmRp
Y2F0aW5nIHRoYXQgZGlzYXNzZW1ibHkgZmFpbGVkIGFuZAogLy8gdGhlIHJhbmdlIG9mIG1hY2hp
bmUgY29kZSBhZGRyZXNzZXMuCi12b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsK
K3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsK
IAogLy8gQXN5bmNocm9ub3VzIGRpc2Fzc2VtYmx5LiBUaGlzIGhhcHBlbnMgb24gYW5vdGhlciB0
aHJlYWQsIGFuZCBjYWxscyB0aGUgcHJvdmlkZWQKIC8vIGNhbGxiYWNrIHdoZW4gdGhlIGRpc2Fz
c2VtYmx5IGlzIGRvbmUuCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29u
c3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBzaXplX3Qs
IGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBj
aGFyKiBwcmVmaXgpOwogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25v
dXNEaXNhc3NlbWJseSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA2
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2Vt
Ymxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxNyArMzMsMTcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qg
c2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIHVkX3Qg
ZGlzYXNzZW1ibGVyOwogICAgIHVkX2luaXQoJmRpc2Fzc2VtYmxlcik7Ci0gICAgdWRfc2V0X2lu
cHV0X2J1ZmZlcigmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVuc2ln
bmVkIGNoYXIqPigpLCBzaXplKTsKKyAgICB1ZF9zZXRfaW5wdXRfYnVmZmVyKCZkaXNhc3NlbWJs
ZXIsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1bnNpZ25lZCBjaGFyKj4oKSwg
c2l6ZSk7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICB1ZF9zZXRfbW9kZSgmZGlzYXNzZW1ibGVyLCA2
NCk7CiAjZWxzZQogICAgIHVkX3NldF9tb2RlKCZkaXNhc3NlbWJsZXIsIDMyKTsKICNlbmRpZgot
ICAgIHVkX3NldF9wYygmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVp
bnRwdHJfdD4oKSk7CisgICAgdWRfc2V0X3BjKCZkaXNhc3NlbWJsZXIsIGNvZGVQdHIudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwogICAgIHVkX3NldF9zeW50YXgoJmRp
c2Fzc2VtYmxlciwgVURfU1lOX0FUVCk7CiAgICAgCiAgICAgdWludDY0X3QgY3VycmVudFBDID0g
ZGlzYXNzZW1ibGVyLnBjOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9VRGlzODZEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA2NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDExICszMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVT
RShVRElTODYpCiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4
LCBQcmludFN0cmVhbSYgb3V0KTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKIAogI2Vsc2UgLy8gVVNFKFVESVM4
NikKIAotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29u
c3QgY2hhciosIFByaW50U3RyZWFtJikgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8vIFVT
RShVRElTODYpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRh
Zz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFt
JiBvdXQpCiB7CiAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvZGVQdHIs
IHNpemUsIHByZWZpeCwgb3V0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEyICsxMzQsMTEgQEAg
dm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsK
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZU
TE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7CiAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMTUzLDkgKzE1Miw4IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBD
VG9Db2RlT3JpZ2luTWFwcGluZygpKQogICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlcikpOwogCi0gICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFnKEZUTENvZGVQ
dHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwgPSBzdGF0ZS5m
aW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlw
b2ludExhYmVsKDApLCBlbnRyeVRhZyk7Ci0gICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBs
YWJlbC5leGVjdXRhYmxlQWRkcmVzczxHZW5lcmF0ZWRGdW5jdGlvbj4oKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2Rl
TGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBv
aW50TGFiZWwoMCkpOworICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gbGFiZWw7CiAgICAg
c3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKIAogICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGgubV9lbnRy
eXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsKQEAgLTE2Myw3ICsxNjEsNyBAQCB2
b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OwogICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+
IGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9p
bnRJbmRleF07CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hcHBlbmRDYXRjaEVudHJ5
cG9pbnQoCi0gICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVs
KGVudHJ5cG9pbnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVj
b2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKGVudHJ5
cG9pbnRJbmRleCkpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOwogICAgIH0KICAgICBzdGF0
ZS5qaXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBAIEV4Y2VwdGlvblRh
cmdldDo6fkV4Y2VwdGlvblRhcmdldCgpCiB7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2Vw
dGlvblRhcmdldDo6bGFiZWwoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgUHRyVGFnIGhhbmRsZXJU
YWcpCitDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBFeGNlcHRpb25U
YXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgaWYgKG1faXNEZWZh
dWx0SGFuZGxlcikKLSAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigqbV9kZWZh
dWx0SGFuZGxlciwgaGFuZGxlclRhZyk7Ci0gICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2hhbmRsZS0+bGFiZWwsIGhhbmRsZXJUYWcpOworICAgICAgICByZXR1cm4gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCptX2RlZmF1bHRIYW5kbGVyKTsK
KyAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KG1faGFuZGxlLT5sYWJlbCk7CiB9CiAKIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNl
cHRpb25UYXJnZXQ6Omp1bXBzKENDYWxsSGVscGVycyYgaml0KQpAQCAtNTAsMTMgKzUwLDEzIEBA
IEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRpb25UYXIKICAgICAgICAgQm94PEND
YWxsSGVscGVyczo6TGFiZWw+IGRlZmF1bHRIYW5kbGVyID0gbV9kZWZhdWx0SGFuZGxlcjsKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtC
dWZmZXIubG9jYXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
KTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCpkZWZhdWx0SGFuZGxlcikpOwogICAg
ICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+
IGhhbmRsZSA9IG1faGFuZGxlOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwsIERG
R09TUkV4aXRQdHJUYWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3Vs
dCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE9TUkV4aXRQdHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsK
ICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oCShyZXZpc2lvbiAy
MzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+RXhjZXB0aW9u
VGFyZ2V0KCk7CiAKICAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2luZywg
YnV0IG5vdCBhbnkgc29vbmVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtCdWZm
ZXImLCBQdHJUYWcgaGFuZGxlclRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4gbGFiZWwoTGlua0J1ZmZlciYpOwogCiAgICAgLy8gT3IsIHlvdSBjYW4g
Z2V0IGEgSnVtcExpc3QgYXQgYW55IHRpbWUuIEFueXRoaW5nIHlvdSBhZGQgdG8gdGhpcyBKdW1w
TGlzdCB3aWxsIGJlIGxpbmtlZCB0bwogICAgIC8vIHRoZSB0YXJnZXQncyBsYWJlbC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlvbikoRXhlY1N0YXRlKik7CisvLyBQ
b2ludHMgdG8gYSBmdW5jdGlvbiBvZiBwcm90b3R5cGU6IEVuY29kZWRKU1ZhbHVlICgqKShFeGVj
U3RhdGUqKS4KK3VzaW5nIEdlbmVyYXRlZEZ1bmN0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz47CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICB9CiB9CiAKLXZvaWQgSklU
Q29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29kZSkKK3ZvaWQgSklUQ29kZTo6aW5p
dGlhbGl6ZUIzQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZSkKIHsKICAgICBtX2Iz
Q29kZSA9IGIzQ29kZTsKIH0KQEAgLTYxLDE3ICs2MSwxNyBAQCB2b2lkIEpJVENvZGU6OmluaXRp
YWxpemVCM0J5cHJvZHVjdHMoc3RkCiAgICAgbV9iM0J5cHJvZHVjdHMgPSBXVEZNb3ZlKGJ5cHJv
ZHVjdHMpOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyIGFkZHJlc3MpCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGFkZHJlc3MpCiB7CiAgICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFk
ZHJlc3M7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tF
bnRyeXBvaW50KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludCkKIHsKICAgICBtX2Fy
aXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBK
SVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQorSklUQ29k
ZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNo
ZWNrTW9kZSBhcml0eUNoZWNrKQogewogICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgewogICAgIGNh
c2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtODAsMTggKzgwLDE2IEBAIEpJVENvZGU6OkNv
ZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwKICAgICAgICAgcmV0dXJuIG1fYXJpdHlDaGVj
a0VudHJ5cG9pbnQuY29kZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRyeVB0
clRhZz4oKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChz
aXplX3Qgb2Zmc2V0KQogewotICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVB
ZGRyZXNzPGNoYXIqPigpICsgb2Zmc2V0OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2FkZHJl
c3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwogICAgIGlmICghb2Zm
c2V0KQogICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygp
OwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1f
YWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgcmV0
dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVQdHJUYWcpOwor
ICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9yQ2FsbC51bnRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVybiB0YWdDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0KIAogdm9pZCogSklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMTcgKzQ0LDE3IEBAIHB1
YmxpYzoKICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKIAotICAgIENvZGVQdHIgYWRk
cmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOworICAgIENvZGVQdHI8SlNFbnRy
eVB0clRhZz4gYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwogICAgIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlkZTsKICAg
ICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIG92ZXJyaWRlOwogICAg
IHNpemVfdCBzaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKikgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZik7CisgICAgdm9pZCBpbml0
aWFsaXplQjNDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgaW5pdGlhbGl6
ZUIzQnlwcm9kdWN0cyhzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+KTsKLSAg
ICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyKTsKLSAgICB2b2lkIGluaXRp
YWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbChDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIGluaXRpYWxp
emVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmPEpTRW50cnlQdHJUYWc+KTsKICAgICAKICAg
ICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIG92ZXJy
aWRlOwogCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKIAotICAgIENv
ZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KKyAgICBDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IGIzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYjNDb2RlOyB9CiAgICAgCiAg
ICAgSklUQ29kZSogZnRsKCkgb3ZlcnJpZGU7CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24oKSBvdmVycmlkZTsKQEAgLTc0LDEwICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0
ZToKLSAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7Ci0gICAgQ29kZVJlZiBtX2IzQ29kZTsK
KyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fYWRkcmVzc0ZvckNhbGw7CisgICAgQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBtX2IzQ29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1
ZUJ5cHJvZHVjdHM+IG1fYjNCeXByb2R1Y3RzOwotICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50
cnlwb2ludDsKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fYXJpdHlDaGVja0VudHJ5cG9p
bnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21t
b24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBiM0NvZGVSZWYgPQotICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNh
c3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgICAgIEZJTkFMSVpFX0NP
REVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywK
ICAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRM
aW5rQnVmZmVyCi0gICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpl
bnRyeXBvaW50TGlua0J1ZmZlciwgQ29kZVB0clRhZywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZl
cgorICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2lu
dExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQg
dGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0
YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKyAgICAgICAgOiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0Nv
ZGVSZWYuY29kZSgpKTsKIAogICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVm
KTsKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVj
a0NvZGVSZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNs
b3dQYXRoLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIExh
enlTbG93UGF0aDo6fkxhenlTbG93UGF0aCgpCiB9CiAKIHZvaWQgTGF6eVNsb3dQYXRoOjppbml0
aWFsaXplKAotICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAg
Q29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBkb25lLAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwKICAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8
R2VuZXJhdG9yPiBnZW5lcmF0b3IKICAgICApCiB7CkBAIC02MywxNCArNjMsMTMgQEAgdm9pZCBM
YXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogCiAgICAgbV9nZW5lcmF0b3ItPnJ1
bihqaXQsIHBhcmFtcyk7CiAKLSAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6
eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPih0aGlzKSk7CiAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
KTsKLSAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9kb25lLnJldGFnZ2Vk
KHNsb3dQYXRoVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIGxpbmtCdWZmZXIubGluayhwYXJh
bXMuZG9uZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKLSAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldC5yZXRh
Z2dlZChzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKTsKLSAgICBtX3N0dWIgPSBGSU5BTEla
RV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIHNsb3dQYXRoVGFnLCAiTGF6eSBzbG93
IHBhdGggY2FsbCBzdHViIik7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1w
cywgbV9leGNlcHRpb25UYXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNv
ZGVCbG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsICJMYXp5IHNsb3cgcGF0
aCBjYWxsIHN0dWIiKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChtX3BhdGNo
YWJsZUp1bXAucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJDb2RlUHRyVGFnKSwgQ29kZUxvY2F0
aW9uTGFiZWwobV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi5jb2RlKCkpKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwy
NyArNjksMjcgQEAgcHVibGljOgogICAgIH5MYXp5U2xvd1BhdGgoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZSgKLSAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbCBkb25lLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJn
ZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBDb2RlTG9jYXRp
b25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGRvbmUsCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgIENhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+CiAgICAg
ICAgICk7CiAKLSAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lKCkgY29u
c3QgeyByZXR1cm4gbV9kb25lOyB9CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPiBwYXRjaGFibGVKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9wYXRjaGFibGVKdW1wOyB9Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZG9uZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9uZTsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4OyB9CiAKICAgICB2b2lkIGdlbmVy
YXRlKENvZGVCbG9jayopOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoKSBjb25z
dCB7IHJldHVybiBtX3N0dWI7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KIAogcHJpdmF0ZToK
LSAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBtX2RvbmU7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7Cisg
ICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXA7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9kb25lOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fZXhjZXB0aW9uVGFyZ2V0OwogICAg
IFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICBDYWxsU2l0ZUluZGV4IG1fY2FsbFNp
dGVJbmRleDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9zdHViOwogICAgIFJlZlB0cjxH
ZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4K
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
Ci0gICAgVk0mIHZtLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFy
Z3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFZNJiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4g
YXJndW1lbnRzKQogewogICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigK
ICAgICAgICAgWz0sICZ2bV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExp
bmsuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTUgKzE0MCwxMyBAQCB2b2lkIGxpbmso
U3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7Ci0gICAgICAgICAgICBQdHJUYWcgY2FsbFRh
ZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKGNhbGxUYWcp
OworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAg
ICAgICAgICBQdHJUYWcgbG9va3VwVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwobG9va3VwVGFnKTsKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZy
b21DYWxsZXJGcmFtZSA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICBq
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAgICAgICAgICAgICBub0V4Y2VwdGlvbi5s
aW5rKCZqaXQpOwogCkBAIC0xNzIsMTQgKzE3MCwxMyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyKGNvZGVCbG9jay0+bV9pc0NvbnN0cnVj
dG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNo
ZWNrLCBjYWxsVGFnKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBsb29rdXBUYWcpKTsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoYXJp
dHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCAm
dm0pLCBOZWFyQ29kZVB0clRhZykpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFp
blBhdGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5n
ZW5lcmF0ZWRGdW5jdGlvbikpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFy
aXR5Q2hlY2ssIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY29kZUJsb2NrLT5tX2lzQ29u
c3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2spKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOworICAgICAgICAgICAgbGlu
a0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+
KHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFn
KEZUTENvZGVQdHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRp
YWxpemVBZGRyZXNzRm9yQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0YWdDb2RlUHRyPHZv
aWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiwgZW50cnlUYWcsIENvZGVQdHJUYWcpKSk7CisK
KyAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE5
OCw5ICsxOTUsOSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgc3RhdGUu
YWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CisgICAgICAg
IGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7
CiAKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKGxpbmtC
dWZmZXItPmxvY2F0aW9uT2Yoc3RhcnQsIENvZGVQdHJUYWcpKTsKKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKGxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4oc3RhcnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE5ICsyODYsMTcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRocm93VGFnID0gcHRyVGFnKEZU
TE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0LmNhbGwodGhyb3dUYWcpOworICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxvb2t1cFRhZyA9IHB0
clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0
LmNhbGwobG9va3VwVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAog
ICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
ICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGhyb3dDYWxsLCBGdW5jdGlvblB0cihvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgdGhyb3dUYWcpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0
aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0aHJvd0NhbGws
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
RXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9v
a3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9v
a3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMzY1LDcgKzM2
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmV4
Y2VwdGlvbkhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4oKmV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsK
QEAgLTcxNzAsMTUgKzcxNjgsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhM
aW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVh
ckNvZGVQdHJUYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNs
b3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+KGxpbmtDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRp
b25PZih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRh
Zz4oZmFzdENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
IApAQCAtNzMxOCw5ICs3MzE0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwYXRjaGFibGVKdW1wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChjYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
LCBTbG93UGF0aFB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHBhdGNoYWJsZUp1bXApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGNh
bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRy
eVB0clRhZz4oc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcExvY2F0aW9uLApAQCAt
NzM2NywxMyArNzM2MywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHNsb3dQYXRoLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGNh
bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBz
bG93UGF0aExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC03NDkyLDE1
ICs3NDg4LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJU
YWcsIHZtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBs
aW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVu
Y3Rpb25QdHIobGlua0NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2Fs
bCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0
VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNFbnRyeVB0clRhZz4oc2xvd0NhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RDYWxs
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NzYzNyw5ICs3NjMxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25Q
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihjYWxsZWUsIHRhZykpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIHRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjYWxsZWUpKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVj
aygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVs
cGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIApAQCAtNzc5MywxNSAr
Nzc4NiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNvZGVQdHJUYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+KGxpbmtDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihz
bG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJn
ZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oZmFzdENhbGwpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtNzk3OCw5ICs3OTY5LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1
c2VkUmVnaXN0ZXJzKCkpOwogCiAgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NG
dW5jdGlvblB0cihjYWxsZWUsIHRhZykpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjApOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25Bcmd1bWVudEdQUjAsIHRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihjYWxsZWUpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAg
ICAgICAgICAgfTsKIApAQCAtODA3OCwxNSArODA2OCwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2Fs
bCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25P
Zih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4o
ZmFzdENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApA
QCAtODE2OCw5ICs4MTU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXF1aXJlZEJ5
dGVzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgcmVx
dWlyZWRCeXRlcyk7CiAgICAgICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkNhbGxFdmFsKT4oR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
blB0cihvcGVyYXRpb25DYWxsRXZhbCwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwLCB0YWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAp
OworICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3Vt
ZW50R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhzdGF0ZS0+dm0oKSwgQXNzZW1ibHlIZWxwZXJz
OjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CkBAIC04ODUyLDggKzg4MzksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wUmVwbGFjZW1lbnQg
anVtcFJlcGxhY2VtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihsYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obGFiZWwpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxPU1JFeGl0UHRyVGFn
PihoYW5kbGUtPmxhYmVsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21t
b24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoanVtcFJlcGxhY2VtZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTk2OTcsMTggKzk2ODQsMTggQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGp1bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oZG9uZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPj0gMCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmlubGlu
ZVNpemUgPSBpbmxpbmVTaXplOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlv
biA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc2xv
d1BhdGhDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
QmVnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzbG93UGF0aEJlZ2luKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTE5MTgsNyArMTE5MDUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbHVyZUNhc2VzID0gZG9tSklU
LT5nZW5lcmF0b3IoKS0+cnVuKGppdCwgZG9tSklUUGFyYW1zKTsKIAogICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlcywgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihoYW5kbGUt
PmxhYmVsKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6OmZvckNoZWNrKCk7CkBAIC0xMTk1Nyw2ICsx
MTk0NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQgKyAxOwogICAgICAgICBMVmFsdWUg
cmVzdWx0OworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc2lnbmF0dXJlLT51bnNhZmVGdW5jdGlvbiksIENGdW5jdGlvblB0clRhZyk7CiAgICAgICAg
IHN3aXRjaCAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgY2FzZSAxOgog
ICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUD4oc2lnbmF0dXJlLT51bnNhZmVGdW5jdGlvbikp
LCBtX2NhbGxGcmFtZSwgb3BlcmFuZHNbMF0pOwpAQCAtMTE5ODMsNyArMTE5NzEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gU2luY2UgdGhlIGdldHRlciBkb2VzIG5vdCBoYXZlIGNvZGUg
c2V0dGluZyB0b3BDYWxsRnJhbWUsIEFzIGlzIHRoZSBzYW1lIHRvIElDLCB3ZSBzaG91bGQgc2V0
IHRvcENhbGxGcmFtZSBpbiBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5v
cGVyYXRpb24obV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3NvckdldHRl
ciksCisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24obV9ub2Rl
LT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3NvckdldHRlci5yZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPENGdW5jdGlvblB0clRhZz4oKSksCiAgICAgICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0ciht
X2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlm
aWVyTnVtYmVyXSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTM5ODks
MjYgKzEzOTc3LDIxIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRo
dW5rVGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgdm0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFn
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2Vu
ZXJhdG9ySnVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+Z2V0Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0gc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1Bh
dGg+KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHNsb3dQYXRo
VGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4o
bGF6eVNsb3dQYXRoLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkp1bXAgbGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cGF0Y2hhYmxlSnVtcCwgc2xvd1BhdGhUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hh
YmxlSnVtcCkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSwgc2xvd1BhdGhU
YWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBsaW5rZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KGRvbmUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW4pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhenlTbG93UGF0aC0+aW5pdGlhbGl6ZSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5rZWREb25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwo
bGlua0J1ZmZlciwgc2xvd1BhdGhUYWcpLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwobGlua0J1ZmZl
ciksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbFNpdGVJbmRleCwgZ2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5sYXp5
U2xvd1BhdGhzW2luZGV4XSA9IFdURk1vdmUobGF6eVNsb3dQYXRoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDgsNyArMTA4LDcgQEAgT1NSRXhpdDo6T1NSRXhpdCgKIHsKIH0KIAotQ29kZUxvY2F0aW9u
SnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJs
b2NrKSBjb25zdAorQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAogewog
ICAgIFVOVVNFRF9QQVJBTShmdGxDb2RlQmxvY2spOwogICAgIHJldHVybiBtX3BhdGNoYWJsZUp1
bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24g
MjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTksMTIgKzExOSwxMiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBE
Rkc6Ok9TUkV4aXRCYXNlCiAgICAgT1NSRXhpdChPU1JFeGl0RGVzY3JpcHRvciosIEV4aXRLaW5k
LCBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYm9vbCB3
YXNIb2lzdGVkKTsKIAogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBtX2Rlc2NyaXB0b3I7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogICAgIC8vIFRoaXMgdGVsbHMgdXMgd2hlcmUgdG8gcGxh
Y2UgYSBqdW1wLgotICAgIENvZGVMb2NhdGlvbkp1bXAgbV9wYXRjaGFibGVKdW1wOworICAgIENv
ZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wOwogICAgIFZl
Y3RvcjxCMzo6VmFsdWVSZXA+IG1fdmFsdWVSZXBzOwogCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAg
ICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGNvZGVMb2NhdGlvbkZvclJlcGF0
Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OwogICAgIHZvaWQgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7
CiAgICAgICAgIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShw
cm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21GVEwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjMwNjY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5
KAogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKLSAgICB1bnNpZ25lZCBleGl0SUQsIEpJ
VENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFB0clRhZyBleGl0U2l0ZVRhZykKKyAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGpp
dENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgLy8gVGhpcyBjb2RlIHJlcXVpcmVzIGZyYW1lUG9pbnRlclJlZ2lzdGVyIGlzIHRoZSBzYW1l
IGFzIGNhbGxGcmFtZVJlZ2lzdGVyCiAgICAgc3RhdGljX2Fzc2VydChNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICJNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIgYW5kIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyIG11c3QgYmUgdGhlIHNhbWUiKTsKQEAgLTMzOCw5ICszMzgsOCBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKT4oCiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbiksCiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOwot
ICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUiwgdGFn
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFnKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRl
cmlhbGl6ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9u
VG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKIAogICAgICAgICAgICAgLy8gTGV0IGV2
ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgpAQCAtMzY3LDkgKzM2Niw4IEBAIHN0YXRpYyB2
b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1hdGVyaWFsaXphdGlvbiksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKSwKICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVu
dHMpKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSLCB0YWcpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdElu
T1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIAogICAgIC8vIFNhdmUgYWxsIHN0
YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhl
IGFwcHJvcHJpYXRlIHBsYWNlIGluCkBAIC00OTYsNyArNDk0LDcgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVN0dWIoCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAg
ICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICBzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZU
TE9TUkV4aXQoKSwKLSAgICAgICAgcGF0Y2hCdWZmZXIsIGV4aXRTaXRlVGFnLAorICAgICAgICBw
YXRjaEJ1ZmZlciwgT1NSRXhpdFB0clRhZywKICAgICAgICAgIkZUTCBPU1IgZXhpdCAjJXUgKCVz
LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzIiwKICAgICAgICAgICAgIGV4aXRJRCwg
dG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKQEAg
LTU0NCwxMyArNTQyLDEyIEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhl
Y1MKIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9y
aWdpbik7CiAKLSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMT1NSRXhpdFB0clRhZywg
JmV4aXQpOwotICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgaml0Q29kZSwgZXhpdCwgJnZtLCBjb2Rl
QmxvY2ssIHRodW5rVGFnKTsKKyAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQs
ICZ2bSwgY29kZUJsb2NrKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAg
ICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlv
bkxhYmVsKGV4aXQubV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcp
KSk7CisgICAgICAgIGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2Rl
TG9jYXRpb25MYWJlbDxPU1JFeGl0UHRyVGFnPihleGl0Lm1fY29kZS5jb2RlKCkpKTsKICAgICAK
LSAgICByZXR1cm4gZXhpdC5tX2NvZGUucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihleGVjKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gZXhpdC5t
X2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
SGFuZGxlLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDEzIEBA
IHZvaWQgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayhTdGF0ZSYKICAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwogICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW3NlbGYsIGp1bXAsIG15
TGFiZWwsIGNvbXBpbGF0aW9uLCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICBzZWxmLT5leGl0Lm1fcGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKKyAgICAgICAgICAgIHNlbGYtPmV4aXQubV9wYXRj
aGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oanVtcCkpOwogCi0gICAgICAgICAgICBQdHJU
YWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMT1NSRXhpdFB0clRhZywgJnZtKTsKICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcCwKLSAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAg
ICAgICAgICBpZiAoY29tcGlsYXRpb24pCi0gICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmFk
ZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG15TGFiZWwpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkgfSk7CisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRl
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG15TGFiZWwpIH0pOwog
ICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDcgQEAg
ZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVAogICAgIExhenlTbG93UGF0
aCYgbGF6eVNsb3dQYXRoID0gKmppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdOwogICAgIGxh
enlTbG93UGF0aC5nZW5lcmF0ZShjb2RlQmxvY2spOwogCi0gICAgUHRyVGFnIHNsb3dQYXRoVGFn
ID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oJmxh
enlTbG93UGF0aCkpOwotICAgIHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLnJldGFnZ2VkQ29k
ZShzbG93UGF0aFRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OnNjaGVkdWxlCiAgICAg
ICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hhbmRsZXIgPSBoYW5kbGVyOwogICAgICAg
ICAgICAgICAgICAgICBuZXdIYW5kbGVyLnN0YXJ0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CiAg
ICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gY2FsbFNpdGVJbmRleC5iaXRzKCkg
KyAxOwotICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihoYW5kbGUtPmxhYmVsKTsKICAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0hhbmRsZXIp
OwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDI1ICsxMTMsMjIgQEAgU2xvd1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRo
Q2FsbENvbnRleAogICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMiht
X3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IH0KIAotU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQo
dm9pZCogY2FsbFRhcmdldCkgY29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250
ZXh0OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCkgY29uc3QKIHsKICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBj
YWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBtX29mZnNldCk7CiB9CiAKLVNsb3dQYXRo
Q2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIEZ1bmN0aW9uUHRyIGNh
bGxUYXJnZXQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwoVk0m
IHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCiB7Ci0gICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsVGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0g
ICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZXhlY3V0YWJsZUFkZHJlc3MpOwotICAgIFNsb3dQYXRo
Q2FsbEtleSBrZXkgPSBrZXlXaXRoVGFyZ2V0KGV4ZWN1dGFibGVBZGRyZXNzKTsKLSAgICBQdHJU
YWcgY2FsbFRhZyA9IGtleS5jYWxsUHRyVGFnKCk7Ci0gICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9
IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKGNhbGxUYWcpLCBrZXkpOworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXkgPSBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCBy
ZXN1bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpLCBrZXkpOwog
CiAgICAgbV9qaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtyZXN1bHQsICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHVu
ayA9CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRo
dW5rID0KICAgICAgICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5r
KHJlc3VsdC5rZXkoKSk7CiAKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2Fs
bCgpLCBDb2RlTG9jYXRpb25MYWJlbCh0aHVuay5jb2RlKCkpKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9jYXRpb25MYWJlbDxPcGVyYXRpb25QdHJU
YWc+KHRodW5rLnJldGFnZ2VkQ29kZTxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgfSk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAg
KzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6IFRoZSBjYWxsIHRoYXQgdGhpcyByZXR1
cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUgbGlua2VkIGJ5IHRoZSBKSVQgdXNpbmcgYWRkTGlu
a1Rhc2soKSwKICAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciB5b3UgdG8gbGluayBpdCB5
b3Vyc2VsZi4KLSAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBGdW5jdGlvblB0ciBjYWxs
VGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpOwogCiBwcml2YXRlOgotICAgIFNsb3dQYXRoQ2FsbEtl
eSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0OworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCkgY29uc3Q7CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKICAg
ICBSZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwpAQCAtNzgsNyArNzgs
NyBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFNsb3dQ
YXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFZNJiB2bSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBl
eGNlcHRpb25UYXJnZXQsCi0gICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRH
UFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKQogewogICAgIFNsb3dQYXRoQ2FsbCBjYWxsOwogICAgIHsKQEAgLTk0LDcgKzk0LDcg
QEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRp
b25UYXJnZXQsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAorICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwKICAgICBBcmd1bWVudFR5cGVz
Li4uIGFyZ3VtZW50cykKIHsKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewpAQCAtMTEwLDcgKzEx
MCw3IEBAIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4KIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigK
ICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAotICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAg
cmV0dXJuIGNhbGxPcGVyYXRpb24oCiAgICAgICAgIHN0YXRlLnZtKCksIHVzZWRSZWdpc3RlcnMs
IGppdCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4pLCBleGNl
cHRpb25UYXJnZXQsIGZ1bmN0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB2b2lkIFNs
b3dQYXRoQ2FsbEtleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5w
cmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQpLCAi
LCBhcmd1bWVudFJlZ2lzdGVycyA9ICIsIG1fYXJndW1lbnRSZWdpc3RlcnMsICI+Iik7CisgICAg
b3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0
ID0gIiwgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdl
dC5leGVjdXRhYmxlQWRkcmVzcygpKSwgIiwgYXJndW1lbnRSZWdpc3RlcnMgPSAiLCBtX2FyZ3Vt
ZW50UmVnaXN0ZXJzLCAiPiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShG
VExfSklUKQogCi0jaW5jbHVkZSAiUHRyVGFnLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewpAQCAtNDUsMjkgKzQ1LDI3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIGNsYXNzIFNsb3dQYXRoQ2FsbEtleSB7CiBwdWJsaWM6CiAgICAgU2xvd1BhdGhD
YWxsS2V5KCkKLSAgICAgICAgOiBtX2NhbGxUYXJnZXQoMCkKLSAgICAgICAgLCBtX29mZnNldCgw
KQorICAgICAgICA6IG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBTbG93UGF0
aENhbGxLZXkoCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxUYXJn
ZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiBhcmd1bWVudFJlZ2lzdGVycywKKyAgICAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHNldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0
LCBjb25zdCBSZWdpc3RlclNldCYgYXJndW1lbnRSZWdpc3RlcnMsCiAgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQpCiAgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkKLSAgICAgICAgLCBtX2Nh
bGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldC5y
ZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpCiAgICAgICAgICwgbV9hcmd1bWVudFJlZ2lzdGVy
cyhhcmd1bWVudFJlZ2lzdGVycykKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgewog
ICAgIH0KICAgICAKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQotICAgIHZvaWQqIGNhbGxUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+IGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KICAgICBjb25z
dCBSZWdpc3RlclNldCYgYXJndW1lbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50UmVnaXN0ZXJzOyB9CiAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CiAgICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KHZvaWQq
IGNhbGxUYXJnZXQpCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
VGFnZ2VkV2l0aChjYWxsVGFyZ2V0LCBDRnVuY3Rpb25QdHJUYWcpOwogICAgICAgICByZXR1cm4g
U2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgYXJndW1lbnRSZWdp
c3RlcnMoKSwgb2Zmc2V0KCkpOwogICAgIH0KICAgICAKQEAgLTc4LDE0ICs3NiwxMiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgU2xvd1BhdGhDYWxsS2V5KEVtcHR5VmFsdWVUYWcpCiAgICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpFbXB0eVZhbHVlKQotICAgICAgICAsIG1fY2Fs
bFRhcmdldCgwKQogICAgICAgICAsIG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KICAgICAKICAg
ICBTbG93UGF0aENhbGxLZXkoRGVsZXRlZFZhbHVlVGFnKQogICAgICAgICA6IG1fdXNlZFJlZ2lz
dGVycyhSZWdpc3RlclNldDo6RGVsZXRlZFZhbHVlKQotICAgICAgICAsIG1fY2FsbFRhcmdldCgw
KQogICAgICAgICAsIG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KQEAgLTEwMSwxOSArOTcsMTIg
QEAgcHVibGljOgogICAgIH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsgUHRySGFzaDx2b2lkKj46Omhhc2go
bV9jYWxsVGFyZ2V0KSArIG1fb2Zmc2V0OwotICAgIH0KLQotICAgIFB0clRhZyBjYWxsUHRyVGFn
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGluY2x1ZGUgZmFjdG9y
cyB3aGljaCBhcmUgaW52YXJpYW50IGZvciB0aGUgc2FtZSBzbG93IHBhdGggc2l0ZS4KLSAgICAg
ICAgLy8gbV9jYWxsVGFyZ2V0IGNhbiB2YXJ5IGFuZCBzaG91bGQgYmUgZXhjbHVkZWQuCi0gICAg
ICAgIHJldHVybiBwdHJUYWcoRlRMU2xvd1BhdGhQdHJUYWcsIG1fdXNlZFJlZ2lzdGVycy5oYXNo
KCksIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQ
dHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBt
X29mZnNldDsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0
ZXJzOwotICAgIHZvaWQqIG1fY2FsbFRhcmdldDsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IG1fY2FsbFRhcmdldDsKICAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJz
OwogICAgIHB0cmRpZmZfdCBtX29mZnNldDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAg
ICAgOiBncmFwaChncmFwaCkKLSAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CiAgICAgc3dp
dGNoIChncmFwaC5tX3BsYW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw4ICs0Niw4IEBAIGVudW0gY2xhc3MgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXIK
ICAgICBOb3ROZWVkZWQgCiB9OwogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVy
aWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBGdW5jdGlvblB0ciBnZW5l
cmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUaHVua1RhZywgY29uc3QgY2hhciogbmFtZSwg
dW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVp
cmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCitzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKAorICAgIFZNKiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5lcmF0
aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVk
IGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCBm
cmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQogewogICAgIEFzc2VtYmx5SGVscGVy
cyBqaXQobnVsbHB0cik7CiAKQEAgLTg2LDkgKzg2LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBnZW5lcmljR2VuZQogICAgIGppdC5wZWVrKAogICAgICAgICBHUFJJbmZvOjphcmd1
bWVudEdQUjEsCiAgICAgICAgIChzdGFja01pc2FsaWdubWVudCAtIE1hY3JvQXNzZW1ibGVyOjpw
dXNoVG9TYXZlQnl0ZU9mZnNldCgpKSAvIHNpemVvZih2b2lkKikpOwotICAgIFB0clRhZyBnZW5l
cmF0b3JDYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxsKGdlbmVy
YXRvckNhbGxUYWcpOwotICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2Fs
bCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKICAgICAvLyBBdCB0aGlzIHBvaW50IHdl
IHdhbnQgdG8gbWFrZSBhIHRhaWwgY2FsbCB0byB3aGF0IHdhcyByZXR1cm5lZCB0byB1cyBpbiB0
aGUKICAgICAvLyByZXR1cm5WYWx1ZUdQUi4gQnV0IGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgZG8g
dGhpcywgd2UgbXVzdCByZXN0b3JlIGFsbCByZWdpc3RlcnMuCiAgICAgLy8gVGhlIHdheSB3ZSB3
aWxsIGFjY29tcGxpc2ggdGhpcyBpcyBieSBhcnJhbmdpbmcgdG8gaGF2ZSB0aGUgdGFpbCBjYWxs
IHRhcmdldCBpbiB0aGUKQEAgLTExNywzMCArMTE2LDMwIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZ2VuZXJpY0dlbmUKICAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVy
KTsKIAogI2lmIENQVShBUk02NCkgJiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQotICAgIGppdC51
bnRhZ1B0cihBc3NlbWJseUhlbHBlcnM6OmxpbmtSZWdpc3RlciwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgIGppdC51bnRhZ1B0cihBc3NlbWJseUhlbHBlcnM6OmxpbmtSZWdpc3Rl
ciwgcmVzdWx0VGFnKTsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocmVzdWx0VGFnKTsKICNlbmRpZgogICAgIGppdC5yZXQoKTsKICAgICAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZ2VuZXJhdGlvbkZ1bmN0aW9u
LCBnZW5lcmF0b3JDYWxsVGFnKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIHJlc3VsdFRodW5rVGFnLCAiJXMiLCBuYW1lKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgZ2VuZXJhdGlvbkZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiJXMiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOwotICAgIFB0clRhZyB0aHVua1RhZyA9IHB0
clRhZyhGVExPU1JFeGl0UHRyVGFnLCB2bSk7CiAgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoCi0gICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxlRlRMT1NSRXhp
dCksIHRodW5rVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNU
b1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7Cisg
ICAgICAgIHZtLCBjb21waWxlRlRMT1NSRXhpdCwgT1NSRXhpdFB0clRhZywgIkZUTCBPU1IgZXhp
dCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRq
dXN0bWVudFJlcXVpcmVtZW50OjpOZWVkZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOwot
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIHZtKTsK
ICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAgICAgdm0s
IEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgpLCB0aHVua1RhZywgIkZUTCBsYXp5
IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFu
ZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOb3ROZWVkZWQpOworICAgICAgICB2bSwgY29t
cGlsZUZUTExhenlTbG93UGF0aCwgSklUU3R1YlJvdXRpbmVQdHJUYWcsICJGVEwgbGF6eSBzbG93
IHBhdGggZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFj
a0FkanVzdG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRD
bG9iYmVyKQpAQCAtMTcxLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNo
ZWNrKEFzc2VtYmwKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxs
cHRyKTsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMjA0LDkgKzIwMyw4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CiAgICAgCiAgICAgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soaml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7Ci0gICAgCi0g
ICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKIAogICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CkBAIC0yMzIs
OCArMjMwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rRwogICAg
IGppdC5yZXQoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxU
YXJnZXQoKSwgY2FsbFRhZykpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBrZXkuY2FsbFB0clRhZygpLCAiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRv
Q1N0cmluZyhrZXkpLmRhdGEoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBrZXkuY2Fs
bFRhcmdldCgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtl
eSkuZGF0YSgpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDM2ICszOCwz
NiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhD
YWxsS2V5Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dQYXRoQ2FsbFRodW5rR2Vu
ZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
eXBlQXJndW1lbnQ+CiBzdHJ1Y3QgVGh1bmtNYXAgewogICAgIHR5cGVkZWYgS2V5VHlwZUFyZ3Vt
ZW50IEtleVR5cGU7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gVG9UaHVua01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5
cGUsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IFRvVGh1bmtNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4s
IEtleVR5cGU+IEZyb21UaHVua01hcDsKICAgICAKICAgICBUb1RodW5rTWFwIG1fdG9UaHVuazsK
ICAgICBGcm9tVGh1bmtNYXAgbV9mcm9tVGh1bms7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdl
bmVyYXRlSWZOZWNlc3NhcnkoCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlSWZOZWNlc3NhcnkoCiAgICAgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmFtZSBN
YXBUeXBlOjpLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUgZ2VuZXJhdG9yKQogewogICAgIHR5
cGVuYW1lIE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV90b1RodW5r
LmZpbmQoa2V5KTsKICAgICBpZiAoaXRlciAhPSBtYXAubV90b1RodW5rLmVuZCgpKQogICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWU7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJl
c3VsdCA9IGdlbmVyYXRvcihrZXkpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiByZXN1bHQgPSBnZW5lcmF0b3Ioa2V5KTsKICAgICBtYXAubV90b1RodW5rLmFk
ZChrZXksIHJlc3VsdCk7CiAgICAgbWFwLm1fZnJvbVRodW5rLmFkZChyZXN1bHQuY29kZSgpLCBr
ZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+
Ci10eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3R5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9y
VGh1bmsoTWFwVHlwZSYgbWFwLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IHB0cikKIHsKICAgICB0eXBlbmFtZSBNYXBUeXBlOjpGcm9tVGh1bmtNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtYXAubV9mcm9tVGh1bmsuZmluZChwdHIpOwogICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIg
IT0gbWFwLm1fZnJvbVRodW5rLmVuZCgpKTsKQEAgLTc5LDEzICs3OSwxMyBAQCBjbGFzcyBUaHVu
a3MgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRodW5rcyk7CiBwdWJsaWM6CiAgICAgVGh1
bmtzKCkgPSBkZWZhdWx0OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0aENh
bGxUaHVuayhjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdldFNsb3dQYXRoQ2FsbFRodW5rKGNvbnN0IFNsb3dQYXRo
Q2FsbEtleSYga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWZOZWNlc3Nhcnko
CiAgICAgICAgICAgICBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcik7CiAgICAgfQotICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93
UGF0aENhbGxUaHVuayhNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQorCisgICAgU2xvd1BhdGhD
YWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRU
aHVua1B0clRhZz4gcHRyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGtleUZvclRodW5rKG1fc2xv
d1BhdGhDYWxsVGh1bmtzLCBwdHIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgT3Bjb2Rl
SUQgSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlECiAgICAgLy8gVGhlIE9wY29kZUlEIGlzIGVtYmVk
ZGVkIGluIHRoZSBpbnQzMl90IHdvcmQgcHJlY2VkaW5nIHRoZSBsb2NhdGlvbiBvZgogICAgIC8v
IHRoZSBMTEludCBjb2RlIGZvciB0aGUgb3Bjb2RlIChzZWUgdGhlIEVNQkVEX09QQ09ERV9JRF9J
Rl9ORUVERUQgbWFjcm8KICAgICAvLyBpbiBMb3dMZXZlbEludGVycHJldGVyLmNwcCkuCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIocmVtb3ZlQ29kZVB0clRhZzx2b2lkKj4ob3Bj
b2RlKSk7CisgICAgYXV0byBjb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2Rl
UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKG9wY29kZSk7CiAgICAgaW50MzJf
dCogb3Bjb2RlSURBZGRyZXNzID0gY29kZVB0ci5kYXRhTG9jYXRpb248aW50MzJfdCo+KCkgLSAx
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+KCpvcGNvZGVJ
REFkZHJlc3MpOwogICAgIEFTU0VSVChvcGNvZGVJRCA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsOSArMzM3LDggQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogI2Vsc2UKICAgICBtb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogI2VuZGlmCi0gICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkV4Y2VwdGlv
bkZ1enosIHRhZykpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGNh
bGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCB0YWcpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25FeGNl
cHRpb25GdXp6KSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgY2Fs
bChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIE9wZXJhdGlvblB0clRhZyk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwpAQCAtNzEzLDEwICs3MTIsOSBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgQ2FsbCBjYWxs
ID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzaygKICAgICAgICAgWz0sICZ2bV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFn
KExpbmtWaXJ0dWFsQ2FsbFB0clRhZywgJnZtKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAqaW5mbyk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8t
PnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxw
dHIsIHRydWUpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRp
b25MYWJlbCh2aXJ0dWFsVGh1bmsucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFn
KSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0p
OwogfQogCkBAIC05MzMsOSArOTMxLDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2Fs
bChWTSYgdm0sIAogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iCiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25Q
dHIoZnVuY3Rpb24sIHRhZykpLCBzY3JhdGNoKTsKLSAgICBjYWxsKHNjcmF0Y2gsIHRhZyk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGZ1
bmN0aW9uKSksIHNjcmF0Y2gpOworICAgIGNhbGwoc2NyYXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBHUFJJbmZvOjpyZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDgg
QEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7CiAgICAgSnVtcCBvayA9
IGJyYW5jaFB0cihCZWxvdywgc2hhZG93UGFja2V0LCBUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0No
aWNrZW4oKS5sb2dFbmQoKSkpOwogICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
blByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKT4oKTsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHRhZykp
LCBzY3JhdGNoMU5vbkFyZ0dQUik7Ci0gICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUiwgdGFnKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwor
ICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSksIHNj
cmF0Y2gxTm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
LCBzaGFkb3dQYWNrZXQpOwogICAgIG9rLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIz
MDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIC8vIEFzc2VtYmxlIGEgdGh1bmsgdGhhdCB3aWxsIHNlcnZl
IGFzIHRoZSBtZWFucyBmb3Igd3JpdGluZyBpbnRvIHRoZSBKSVQgcmVnaW9uLgotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgd3JpdGVUaHVuayA9IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Io
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3JpdGFibGVBZGRyKSwgc3R1YkJhc2UsIHN0dWJTaXpl
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB3cml0ZVRo
dW5rID0gaml0V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0
YWJsZUFkZHIpLCBzdHViQmFzZSwgc3R1YlNpemUpOwogCiAgICAgICAgIGludCByZXN1bHQgPSAw
OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBDUFUoQVJNNjQp
ICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwgdm9p
ZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRy
LCB2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplKQogICAgIHsKICAgICAgICAgdXNpbmcg
bmFtZXNwYWNlIEFSTTY0UmVnaXN0ZXJzOwogICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyOwpAQCAtMjk5LDggKzI5OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29sZSBvciBhbnl3aGVyZSBpbiBtZW1v
cnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgogICAgICAgICAvLyBUaGUgc2Vjb25kIGlz
IHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBjb2RlIGlzIHJlYWRhYmxlIHdoZW4gdXNpbmcg
dGhlCiAgICAgICAgIC8vIGFzeW5jRGlzYXNzZW1ibHkgb3B0aW9uIGFzIG91ciBjYWxsZXIgd2ls
bCBzZXQgb3VyIHBhZ2VzIGV4ZWN1dGUgb25seS4KLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhKSVRXcml0ZVRodW5rUHRyVGFnLCAmaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pOwot
ICAgICAgICByZXR1cm4gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHko
dGFnKTsKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOwogICAgIH0KICNlbHNlIC8vIENQVShBUk02NCkgJiYg
VVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCiAgICAgc3RhdGljIHZvaWQgZ2Vu
ZXJpY1dyaXRlVG9KSVRSZWdpb24ob2ZmX3Qgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YVNpemUpCkBAIC0zMDgsMTUgKzMwNywxOCBAQCBwcml2YXRlOgogICAgICAgICBtZW1j
cHkoKHZvaWQqKShzdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRh
LCBkYXRhU2l6ZSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGppdFdyaXRl
VGh1bmtHZW5lcmF0b3Iodm9pZCogYWRkcmVzcywgdm9pZCosIHNpemVfdCkKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9p
ZCogYWRkcmVzcywgdm9pZCosIHNpemVfdCkKICAgICB7CiAgICAgICAgIHN0YXJ0T2ZGaXhlZFdy
aXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsK
LSAgICAgICAgdWludHB0cl90IGZ1bmN0aW9uID0gKHVpbnRwdHJfdCkoKHZvaWQqKSZnZW5lcmlj
V3JpdGVUb0pJVFJlZ2lvbik7CisgICAgICAgIHZvaWQqIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKICNpZiBDUFUoQVJNX1RIVU1C
MikKICAgICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAgICBmdW5jdGlvbiAtPSAx
OworICAgICAgICB1aW50cHRyX3QgZnVuY3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihmdW5jdGlvbik7CisgICAgICAgIGZ1bmN0aW9uQXNJbnQgLT0gMTsKKyAgICAgICAg
ZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKICNlbmRp
ZgotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCh2b2lkKilmdW5jdGlvbikpOworICAgICAg
ICBhdXRvIGNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRh
Z0NGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihjb2RlUHRyKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIzMDY2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw4ICs5MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogcGVyZm9ybUpJ
VE1lbWNweSh2b2kKICAgICAgICAgICAgIC8vIFVzZSBleGVjdXRlLW9ubHkgd3JpdGUgdGh1bmsg
Zm9yIHdyaXRlcyBpbnNpZGUgdGhlIEpJVCByZWdpb24uIFRoaXMgaXMgYSB2YXJpYW50IG9mCiAg
ICAgICAgICAgICAvLyBtZW1jcHkgdGhhdCB0YWtlcyBhbiBvZmZzZXQgaW50byB0aGUgSklUIHJl
Z2lvbiBhcyBpdHMgZGVzdGluYXRpb24gKGZpcnN0KSBwYXJhbWV0ZXIuCiAgICAgICAgICAgICBv
ZmZfdCBvZmZzZXQgPSAob2ZmX3QpKCh1aW50cHRyX3QpZHN0IC0gc3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpOwotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRXcml0
ZVRodW5rUHRyVGFnLCAmaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pOwotICAgICAgICAg
ICAgcmV0YWdDb2RlUHRyKGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uLCB0YWcsIENGdW5j
dGlvblB0clRhZykob2Zmc2V0LCBzcmMsIG4pOworICAgICAgICAgICAgcmV0YWdDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnLCBDRnVuY3Rpb25QdHJUYWc+KGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0
aW9uKShvZmZzZXQsIHNyYywgbik7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
OkdDQXdhcmVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IGNvZGUsIFZNJiB2bSkKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0pCiAgICAgOiBKSVRTdHViUm91dGluZShjb2RlKQog
ICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxzZSkKICAgICAsIG1faXNKZXR0aXNvbmVkKGZhbHNl
KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkCiB9CiAKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMpCiAgICAgOiBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUoY29kZSwgdm0pCiAgICAgLCBtX2NlbGxzKGNlbGxzLnNpemUoKSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCB2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSCiAKIAog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHVi
Um91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpT
Q2VsbCo+JiBjZWxscywKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBW
ZWN0b3I8SlNDZWxsKj4mIGNlbGxzLAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhjZXB0
aW9uSGFuZGxlcnMsIENhbGxTaXRlSW5kZXggZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgp
CiAgICAgOiBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBvd25lciwgY2Vs
bHMpCiAgICAgLCBtX2NvZGVCbG9ja1dpdGhFeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9ja0ZvckV4
Y2VwdGlvbkhhbmRsZXJzKQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lV2l0aEV4Y2VwdGlvbkgKIAogCiBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLAog
ICAgIFZNJiB2bSwKICAgICBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGJvb2wgbWFrZXNDYWxs
cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3
ICs0OSw3IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogLy8gbGlzdCB3aGljaCBkb2VzIG5v
dCBnZXQgcmVjbGFpbWVkIGFsbCBhdCBvbmNlKS4KIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGlu
ZSA6IHB1YmxpYyBKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6Ci0gICAgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJik7CisgICAgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mLCBWTSYpOwogICAgIHZpcnR1YWwgfkdDQXdhcmVKSVRTdHViUm91dGluZSgpOwogICAg
IAogICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAg
LTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIGNsYXNzIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBNYXJraW5n
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYpOwor
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mKTsKICAg
ICB2aXJ0dWFsIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7CiAgICAgCiBwcm90ZWN0
ZWQ6CkBAIC05NCw3ICs5NCw3IEBAIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNl
cHRpb24KIHB1YmxpYzoKICAgICB0eXBlZGVmIEdDQXdhcmVKSVRTdHViUm91dGluZSBCYXNlOwog
Ci0gICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0
b3I8SlNDZWxsKj4mLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKyAgICBHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25z
dCBWZWN0b3I8SlNDZWxsKj4mLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKIAogICAgIHZv
aWQgYWJvdXRUb0RpZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgp
IG92ZXJyaWRlOwpAQCAtMTExLDcgKzExMSw3IEBAIHByaXZhdGU6CiAvLyBhZnRlciB0aGUgZmly
c3QgY2FsbCB0byBDKysgb3IgSlMuCiAvLyAKIC8vIFJlZjxKSVRTdHViUm91dGluZT4gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCi0vLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUs
CisvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
JiBjb2RlLAogLy8gICAgVk0mIHZtLAogLy8gICAgY29uc3QgSlNDZWxsKiBvd25lciwKIC8vICAg
IGJvb2wgbWFrZXNDYWxscywKQEAgLTEyNCw3ICsxMjQsNyBAQCBwcml2YXRlOgogLy8gd2F5Lgog
CiBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtl
c0NhbGxzLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXNDYWxscywKICAgICBj
b25zdCBWZWN0b3I8SlNDZWxsKj4mID0geyB9LCAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zv
ckV4Y2VwdGlvbkhhbmRsZXJzID0gbnVsbHB0ciwgQ2FsbFNpdGVJbmRleCBleGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDExICs2NywxMSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21w
aWxlVGltZTsKIAotdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCi0gICAgICAgIENvZGVMb2NhdGlvbkNhbGwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwKLSAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24pOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwKKyAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAogSklUOjpKSVQoVk0q
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQpCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIG1fdm0pLCBOZWFyQ29kZVB0clRh
ZykpOworICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRo
IEFTU0VSVHMuCkBAIC03ODgsMjcgKzc4OCwyNSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6Omxp
bmsoKQogICAgICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxl
LT5icmFuY2hPZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJs
ZS0+Y3RpT2Zmc2V0cy5zaXplKCkpOwogCiAgICAgICAgICAgICBhdXRvKiBzaW1wbGVKdW1wVGFi
bGUgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZTsKLSAgICAgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHNpbXBsZUp1bXBUYWJsZSk7Ci0gICAg
ICAgICAgICBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdLCB0YWcp
OworICAgICAgICAgICAgc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNv
cmQuZGVmYXVsdE9mZnNldF0pOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgp
OyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0c1tqXTsKICAgICAgICAgICAgICAgICBz
aW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQKLSAgICAgICAgICAgICAgICAg
ICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zm
c2V0XSwgdGFnKQorICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkKICAgICAg
ICAgICAgICAgICAgICAgOiBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0g
U3dpdGNoUmVjb3JkOjpTdHJpbmcpOwogCiAgICAgICAgICAgICBhdXRvKiBzdHJpbmdKdW1wVGFi
bGUgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZTsKLSAgICAgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHN0cmluZ0p1bXBUYWJsZSk7CiAgICAg
ICAgICAgICBzdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQgPQotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVm
YXVsdE9mZnNldF0sIHRhZyk7CisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogc3RyaW5nSnVt
cFRhYmxlLT5vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGxvY2F0aW9uLmJyYW5jaE9mZnNldDsKICAgICAgICAgICAgICAgICBsb2NhdGlv
bi5jdGlPZmZzZXQgPSBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgdGFnKQorICAgICAg
ICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkKICAgICAgICAgICAgICAgICAgICAgOiBz
dHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTgxNiw3ICs4MTQsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+
ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1toYW5kbGVyLnRhcmdldF0sIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4K
KyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPihtX2xhYmVsc1toYW5kbGVyLnRhcmdldF0pOwogICAgIH0KIAog
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9jYWxscykgewpAQCAtODMyLDE4ICs4MzEsMTggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgbV9wdXRCeUlkc1tpXS5maW5h
bGl6ZShwYXRjaEJ1ZmZlcik7CiAKICAgICBpZiAobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkpIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlciA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9leGNlcHRpb25IYW5kbGVyLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4g
ZXhjZXB0aW9uSGFuZGxlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4obV9leGNlcHRpb25IYW5kbGVyKTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGJ5VmFsQ29tcGlsYXRpb25JbmZvIDogbV9ieVZhbENvbXBpbGF0aW9uSW5mbykgewogICAgICAg
ICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVOb3RJbmRleEp1bXAgPSBieVZhbENvbXBpbGF0
aW9uSW5mby5ub3RJbmRleEp1bXA7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25KdW1wIG5vdElu
ZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoKTsKKyAgICAgICAgICAgIGF1dG8gbm90SW5kZXhK
dW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgaWYg
KEp1bXAocGF0Y2hhYmxlTm90SW5kZXhKdW1wKS5pc1NldCgpKQotICAgICAgICAgICAgICAgIG5v
dEluZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihwYXRj
aGFibGVOb3RJbmRleEp1bXApKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlw
ZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21w
aWxhdGlvbkluZm8uYmFkVHlwZUp1bXApKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZv
LmRvbmVUYXJnZXQpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbmV4dEhvdFBhdGhU
YXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5leHRI
b3RQYXRoVGFyZ2V0KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoVGFy
Z2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5zbG93UGF0
aFRhcmdldCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZvLnJldHVybkFkZHJlc3Mp
OworICAgICAgICAgICAgICAgIG5vdEluZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXA8SlNFbnRy
eVB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihwYXRjaGFibGVO
b3RJbmRleEp1bXApKTsKKyAgICAgICAgICAgIGF1dG8gYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRp
b25KdW1wPEpTRW50cnlQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4oYnlWYWxDb21waWxhdGlvbkluZm8uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPE5vUHRyVGFnPiBkb25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxOb1B0clRhZz4oYnlWYWxDb21waWxhdGlvbkluZm8uZG9uZVRhcmdldCk7CisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0aW9uSW5mby5uZXh0SG90UGF0
aFRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gc2xvd1Bh
dGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0
aW9uSW5mby5zbG93UGF0aFRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPiByZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
YnlWYWxDb21waWxhdGlvbkluZm8ucmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgICAgICpieVZh
bENvbXBpbGF0aW9uSW5mby5ieVZhbEluZm8gPSBCeVZhbEluZm8oCiAgICAgICAgICAgICAgICAg
YnlWYWxDb21waWxhdGlvbkluZm8uYnl0ZWNvZGVJbmRleCwKQEAgLTg2MSwyMiArODYwLDIwIEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlv
bkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CiAgICAgICAgIGluZm8uc2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGNvbXBp
bGF0aW9uSW5mby5ob3RQYXRoQmVnaW4pKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7CisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNFbnRyeVB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bikpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4ocGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aEJl
Z2luKSksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRy
eVB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOwogICAgIH0KIAogICAgIEpJ
VENvZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKSB7Ci0gICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKENvZGVQdHJUYWcsIG1fY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChieXRlY29kZU9mZnNldCwg
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0sIHRhZykpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkK
KyAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0LCBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwog
ICAgIH0KICAgICBqaXRDb2RlTWFwLmZpbmlzaCgpOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRD
b2RlTWFwKFdURk1vdmUoaml0Q29kZU1hcCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2FyaXR5Q2hlY2ssIENv
ZGVQdHJUYWcpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0
eUNoZWNrKTsKIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChwYXRjaEJ1ZmZlcik7CkBAIC04OTEsOCArODg4LDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsKICAgICAKLSAgICBD
b2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLCBDb2Rl
UHRyVGFnLAorICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09E
RSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5t
YWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKQEAgLTkz
Myw4ICs5MzAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAg
ICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUs
IHRhZykpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlv
blB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
KSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9CiAKQEAg
LTk1Myw4ICs5NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpKTsKKyAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSgpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEzICs3MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1
Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207CiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBGdW5jdGlvblB0ciBjYWxsZWU7
CisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlOwogCiAgICAgICAg
IENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3Jk
KE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5j
dGlvblB0ciBjYWxsZWUpCisgICAgICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
ZnJvbSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4gY2FsbGVlKQogICAgICAgICAgICAgOiBmcm9tKGZyb20pCiAgICAgICAgICAgICAsIGJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQpA
QCAtMTc0LDcgKzE3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbzsKICAgICB9OwogCi0gICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKQEAgLTI2NywxOCArMjY3LDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAgICAgIC8vIEFk
ZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgot
ICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRh
ZyB0YWcpCisgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGNhbGwodGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
ZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFn
KSkpOworICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRh
Zyk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
bV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7
CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAKICNpZiBPUyhX
SU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1Bh
dGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQorICAg
ICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFB0clRhZyB0YWcpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUo
dGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxs
LCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOworICAgICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVP
ZmZzZXQsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICAgICAgfQogI2VuZGlmCkBAIC03MTYsMzkgKzcx
NiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4pOwogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRT
bG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0
aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnLCBpbnQpOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcsIGludCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOwog
ICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgaW50IHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHRhZywgcmVzdWx0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgdGFnLCByZXN1bHQsIGFyZ3MuLi4pOwotICAgICAgICB9Ci0K
LSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJU
YWcgdGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUob3BlcmF0aW9uLCB0YWcp
OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCisjaWYgT1MoV0lORE9X
UykgJiYgQ1BVKFg4Nl82NCkKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzNjRCaXRUeXBlKCkgeyByZXR1cm4gc2l6ZW9mKFR5
cGUpIDw9IDg7IH0KIApAQCAtNzU3LDg3ICs3NDEsNTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2
YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlPigpLCAiV2luNjQgY2Fubm90IHVz
ZSBzdGFuZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4i
KTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
LCB0YWcpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICAgICAgfQogI2Vsc2UgLy8gT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82
NCkKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4g
QXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFn
KTsKLSAgICAgICAgfQotI2VuZGlmIC8vIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFn
LCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3Bl
cmF0aW9uLCB0YWcsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgICAgICB9CisjZW5kaWYgLy8gT1MoV0lORE9X
UykgJiYgQ1BVKFg4Nl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgog
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uLCB0YWcsIHJl
c3VsdCwgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRy
VGFnIHRhZywgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgQXJncy4uLiBhcmdzKQotICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24sIHRhZyk7Ci0gICAgICAgICAgICBzZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb24sIHRhZywgcmVzdWx0
UmVncywgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHVwZGF0ZVRv
cENhbGxGcmFtZSgpOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0
YWcpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CisgICAgICAgICAgICBzZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb24sIHRh
ZywgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24sIHRhZywgYXJncy4uLik7Cisg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
b3BlcmF0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNuaXBw
ZXRHZW5lcmF0b3I+CkBAIC04NDksOCArNzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKIAotICAgICAgICBDYWxsIGVtaXROYWtlZENh
bGwoQ29kZVB0ciBmdW5jdGlvbiA9IENvZGVQdHIoKSk7Ci0gICAgICAgIENhbGwgZW1pdE5ha2Vk
VGFpbENhbGwoQ29kZVB0ciBmdW5jdGlvbiA9IENvZGVQdHIoKSk7CisgICAgICAgIENhbGwgZW1p
dE5ha2VkQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiBmdW5jdGlvbiA9IENvZGVQdHI8Tm9QdHJUYWc+
KCkpOworICAgICAgICBDYWxsIGVtaXROYWtlZFRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IGZ1
bmN0aW9uID0gQ29kZVB0cjxOb1B0clRhZz4oKSk7CiAKICAgICAgICAgLy8gTG9hZHMgdGhlIGNo
YXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIGludG8gZHN0LgogICAg
ICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKQEAgLTkzNiw3ICs4ODQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGlzYXNzZW1ibGVyPiBtX2Rp
c2Fzc2VtYmxlcjsKICAgICAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21w
aWxhdGlvbjsKLSAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJh
dG9yKFZNKik7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKIAogICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzA1LDEyICs3MDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPAogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlu
bGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElu
bGluZUNvZGUpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJl
c3VsdFJlZ3MsIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
IApAQCAtNzc5LDEyICs3NzgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC04MTksMTUgKzgxNywxNCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKICNlbmRpZgogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgp
OwpAQCAtODg2LDE1ICs4ODMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQwogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAotICAg
IFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9u
KTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCBjYWxsVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIGNhbGxUYWcsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZp
c2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFr
ZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVh
c29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTAsOSArMjUwLDgg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bExpbmtJbmZvKSwgcmVnVDIpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0Nh
bGxQdHJUYWcsIG1fdm0pOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBO
ZWFyQ29kZVB0clRhZykpOworICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWls
Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9u
IDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZihKCiB7CiB9CiAKLUpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2Rl
UmVmKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVSZWY6OkpJ
VENvZGVXaXRoQ29kZVJlZihDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUVHlwZSBqaXRU
eXBlKQogICAgIDogSklUQ29kZShqaXRUeXBlKQogICAgICwgbV9yZWYocmVmKQogewpAQCAtMTIx
LDEyICsxMjEsMTIgQEAgSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKAog
dm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIGFzc2VydElzVGFn
Z2VkV2l0aChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Cisg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBK
U0VudHJ5UHRyVGFnKTsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBD
b2RlUHRyVGFnKTsKLSAgICByZXR1cm4gdGFnQ29kZVB0cihleGVjdXRhYmxlQWRkcmVzcyArIG9m
ZnNldCwgQ29kZVB0clRhZyk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0Nv
ZGVQdHI8Y2hhciosIEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICByZXR1cm4gdGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRk
cmVzcyArIG9mZnNldCk7CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQpAQCAtMTYxLDcgKzE2MSw3IEBAIERpcmVjdEpJVENv
ZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXQKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGly
ZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShK
SVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29k
ZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKICAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFy
aXR5Q2hlY2spCiB7CkBAIC0xNzMsNyArMTczLDcgQEAgRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJ
VENvZGUoKQogewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJ
VENvZGU6OkNvZGVSZWYgcmVmLCBKSVRDb2RlOjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrKQordm9p
ZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2RlOjpDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwogICAgIG1fcmVmID0gcmVmOwpA
QCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYo
SkkKICAgICBBU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIg
RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCitKSVRD
b2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxs
KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogewogICAgIHN3aXRjaCAoYXJpdHkpIHsKICAgICBjYXNl
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoKQEAgLTE5Myw3ICsxOTMsNyBAQCBKSVRDb2RlOjpDb2Rl
UHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGCiAgICAgICAgIHJldHVybiBtX3dpdGhBcml0eUNo
ZWNrOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKIH0KIAog
TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdFR5cGUpCkBAIC0yMDEsNyAr
MjAxLDcgQEAgTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdAogewogfQog
Ci1OYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5
cGUpCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
cmVmLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRU
eXBlKQogewogfQpAQCAtMjEwLDEzICsyMTAsMTMgQEAgTmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJ
VENvZGUoKQogewogfQogCi12b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKENv
ZGVSZWYgcmVmKQordm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IHJlZikKIHsKICAgICBBU1NFUlQoIW1fcmVmKTsKICAgICBtX3JlZiA9
IHJlZjsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0pJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
TmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRjaCAoYXJpdHkpIHsKQEAgLTIyNiw3
ICsyMjYsNyBAQCBKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGCiAgICAg
ICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVQdHIoKTsKKyAgICByZXR1cm4gQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw4ICs1MCw4IEBA
IGNsYXNzIFZNOwogCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEpJVENvZGU+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBD
b2RlUmVmOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+OworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVSZWYgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPjsKIAogICAgIGVudW0gSklUVHlwZSA6IHVpbnQ4X3QgewogICAg
ICAgICBOb25lLApAQCAtMTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpp
dENvZGUtPmppdFR5cGUoKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRP
ZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCkgPSAwOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHByaXZhdGU6CiBjbGFzcyBKSVRDb2Rl
V2l0aENvZGVSZWYgOiBwdWJsaWMgSklUQ29kZSB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUQ29kZVdp
dGhDb2RlUmVmKEpJVFR5cGUpOwotICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRU
eXBlKTsKKyAgICBKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgSklU
VHlwZSk7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5KSVRDb2RlV2l0aENvZGVSZWYoKTsKQEAg
LTIxNywzMiArMjE3LDMyIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKSBvdmVy
cmlkZTsKIAogcHJvdGVjdGVkOgotICAgIENvZGVSZWYgbV9yZWY7CisgICAgQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklU
Q29kZVdpdGhDb2RlUmVmIHsKIHB1YmxpYzoKICAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwot
ICAgIERpcmVjdEpJVENvZGUoQ29kZVJlZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKICAgICB2aXJ0dWFsIH5EaXJl
Y3RKSVRDb2RlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmLCBD
b2RlUHRyIHdpdGhBcml0eUNoZWNrKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVS
ZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sp
OwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7
CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQ29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOwor
ICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKIGNsYXNz
IE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKIHB1YmxpYzoKICAg
ICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUpOwotICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJlZiwgSklU
VHlwZSk7CisgICAgTmF0aXZlSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBKSVRUeXBl
KTsKICAgICB2aXJ0dWFsIH5OYXRpdmVKSVRDb2RlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFs
aXplQ29kZVJlZihDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWY8
SlNFbnRyeVB0clRhZz4pOwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNr
TW9kZSkgb3ZlcnJpZGU7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBhZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCShyZXZpc2lvbiAyMzA2Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMjggKzM4LDI4IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IEVudHJ5IHsKICAgICAg
ICAgRW50cnkoKSB7IH0KIAotICAgICAgICBFbnRyeSh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
b2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24pCisgICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
bikKICAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICAsIG1fY29kZUxvY2F0aW9uKGNvZGVMb2NhdGlvbikKICAgICAgICAgeyB9CiAKICAgICAg
ICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlSW5kZXg7IH0KLSAgICAgICAgaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlv
bigpIHsgcmV0dXJuIG1fY29kZUxvY2F0aW9uOyB9CisgICAgICAgIGlubGluZSBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24oKSB7IHJldHVybiBtX2NvZGVMb2Nh
dGlvbjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4
OwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2NvZGVMb2NhdGlvbjsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9jb2RlTG9jYXRpb247CiAgICAgfTsKIAog
cHVibGljOgotICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2Nh
dGlvbkxhYmVsIGNvZGVMb2NhdGlvbikKKyAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24pCiAg
ICAgewogICAgICAgICBtX2VudHJpZXMuYXBwZW5kKHsgYnl0ZWNvZGVJbmRleCwgY29kZUxvY2F0
aW9uIH0pOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoKCkgeyBtX2VudHJpZXMuc2hyaW5rVG9G
aXQoKTsgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluZCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSBjb25zdAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGZpbmQodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0K
ICAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxFbnRyeSwgdW5zaWduZWQ+KG1fZW50cmllcywKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkt
PmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgaWYgKCFlbnRy
eSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgIHJldHVy
biBlbnRyeS0+Y29kZUxvY2F0aW9uKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjEsOSArMTYxLDkgQEAgdm9pZCBKSVREaXNhc3NlbWJsZXI6OnJlcG9ydEluc3Ry
dWN0aW9ucwogCiB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50U3Ry
ZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBm
cm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCiB7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGZyb20pOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHRvTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodG8pOwotICAgIGRp
c2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwgdG9Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzczx1aW50
cHRyX3Q+KCkgLSBmcm9tTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpLCAi
ICAgICAgICAiLCBvdXQpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFn
PiBmcm9tTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+
KGZyb20pOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFnPiB0b0xvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPih0byk7CisgICAg
ZGlzYXNzZW1ibGUoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uLmRhdGFMb2NhdGlvbjx1aW50cHRy
X3Q+KCkgLSBmcm9tTG9jYXRpb24uZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSwgIiAgICAgICAg
Iiwgb3V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQog
ICAgICAgICBjYXRjaFJvdXRpbmUgPSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPnUucG9pbnRlcjsK
ICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0Q29k
ZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CisgICAgICAgIGNhdGNoUm91dGluZSA9IExM
SW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyhoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
CiAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wRW50cnlGcmFtZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsMTggKzczLDE4IEBAIEpJ
VEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6
OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsK
ICAgICBBU1NFUlQobV9zdGFydC5pc1NldCgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFy
dCA9IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdGFydCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0ID0gZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdGFydCk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guc3RhcnQgPSBz
dGFydDsKIAogICAgIGludDMyX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIHN0YXJ0LCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1f
ZG9uZSkpOworICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZjxOb1B0clRhZz4obV9k
b25lKSk7CiAgICAgQVNTRVJUKGlubGluZVNpemUgPiAwKTsKICAgICBtX3N0dWJJbmZvLT5wYXRj
aC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKIAogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRh
RnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1f
c2xvd1BhdGhDYWxsKSk7CisgICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mPE5vUHRy
VGFnPihtX3Nsb3dQYXRoQ2FsbCkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0
YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2lu
KSk7CisgICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mPE5vUHRyVGFnPihtX3Nsb3dQ
YXRoQmVnaW4pKTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjEgKzExNiwxOSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAgICAgY29udDhCaXQubGluayh0aGlzKTsKIH0K
IAotQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVu
Y3Rpb24pCitBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0
cjxOb1B0clRhZz4gdGFyZ2V0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwo
KTsKLSAgICBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSwgTmVhckNvZGVQdHJUYWcpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFr
ZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbikpKTsKKyAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgSklUOjpD
YWxsIEpJVDo6ZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0ciBmdW5jdGlvbikKK0FMV0FZU19JTkxJ
TkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFy
Z2V0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZz
ZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhclRhaWxDYWxsKCk7Ci0gICAgYXNz
ZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5lYXJD
b2RlUHRyVGFnKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9i
eXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24pKSk7CisgICAgbV9jYWxscy5hcHBl
bmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKICAg
ICByZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC0xNTEsMzUgKzE0OSwzNSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhCiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1l
KCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24s
IHRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rp
b24pOwogICAgIGV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKICNpZiBP
UyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5
cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyAgdGFnKQorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tB
bmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoZnVuY3Rpb24s
IHRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoU2xv
d1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uKTsKICAgICBleGNlcHRpb25DaGVjaygpOwogICAgIHJl
dHVybiBjYWxsOwogfQogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3Qg
RnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHNl
dHRpbmcgdG9wQ2FsbEZyYW1lIHRvIHRoZWlyIGNhbGxlcgotICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICBleGNlcHRpb25DaGVja1dp
dGhDYWxsRnJhbWVSb2xsYmFjaygpOwogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcs
IGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgdGFn
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE4OCw5ICsxODYsOSBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNh
bGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgaW50IGRzdCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgdGFnKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
OSArNjIsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldChtX2lu
bGluZVNpemUpOyB9Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydExvY2F0aW9u
KCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2Nh
dGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3Rh
cnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9m
ZnNldChtX2lubGluZVNpemUpOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0
T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9CisgICAgQ29kZUxvY2F0
aW9uQ2FsbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIG1f
aW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExv
Y2F0aW9uKTsgfQogICAgIAogICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBq
aXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9IHRydWUpCiAgICAgewpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkKKyAgICB2b2lkIGdlbmVy
YXRlT3V0T2ZMaW5lKENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGF1dG8gbGlua0p1bXBUb091
dE9mTGluZVNuaXBwZXQgPSBbJl0gKCkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpAQCAtMTM5LDEzICsxMzksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtX2lubGluZVNpemUpKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIG1faW5saW5lU3RhcnQuZGF0YUxvY2F0aW9uKCksIGppdC5tX2Fzc2VtYmxl
ci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0Jy
YW5jaENvbXBhY3Rpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5p
c1ZhbGlkKCkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsKG1fY29kZS5jb2RlKCkpKTsKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgTmVhckNvZGVQdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0
byBvdXQgb2YgbGluZSBzdHViIik7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fY29kZS5jb2RlKCkpKTsK
KyAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRo
SUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CiAgICAgICAg
IH07CiAKICAgICAgICAgYXV0byByZXBsYWNlQ2FsbCA9IFsmXSAoKSB7Ci0gICAgICAgICAgICBQ
dHJUYWcgY2FsbFRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIG1faW5zdHJ1Y3Rpb24pOwotICAg
ICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgY2FsbFJlcGxhY2VtZW50LCBjYWxsVGFnKTsKKyAgICAgICAgICAgIGZ0bFRo
dW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCkudGVt
cGxhdGUgcmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgY2FsbFJlcGxhY2VtZW50KTsKICAg
ICAgICAgfTsKIAogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKQEAgLTE2OCw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9Eb25l
LCBkb25lTG9jYXRpb24oKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJ
WkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZm
ZXIsIE5lYXJDb2RlUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZh
c3QgSUMgc25pcHBldCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5r
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQg
b2YgbGluZSBmYXN0IElDIHNuaXBwZXQiKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWdl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHdvbid0IG5lZWQgdG8gcmVnZW5lcmF0ZSwgc28gd2UgY2FuIHdpcmUgdGhl
IHNsb3cgcGF0aCBjYWxsCkBAIC0yMTAsNyArMjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dQYXRoSnVtcExpc3QsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigp
KTsKIAogICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzog
Z2VuZXJhdGluZyBvdXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAgY29k
ZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2Vu
ZXJhdGluZyBvdXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CiAgICAgICAgIH0KIAogICAgICAgICBs
aW5rSnVtcFRvT3V0T2ZMaW5lU25pcHBldCgpOwpAQCAtMjE4LDE3ICsyMTcsMTcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBmaW5hbGl6ZUlubGluZUNvZGUoY29uc3QgTWF0aElDR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICB7Ci0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRo
U3RhcnQsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3Rh
dGUuZmFzdFBhdGhTdGFydCk7CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFydDsKIAogICAg
ICAgICBtX2lubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAotICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0
UGF0aEVuZCwgTm9QdHJUYWcpKTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KHN0YXRlLmZhc3RQYXRoRW5kKSk7CiAgICAgICAgIEFTU0VSVChtX2lu
bGluZVNpemUgPiAwKTsKIAogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxM
b2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoQ2FsbCkp
OworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oc3Rh
dGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3Rh
cnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAg
ICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0KSk7Cisg
ICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihzdGF0ZS5z
bG93UGF0aFN0YXJ0KSk7CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUo
KSBjb25zdCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsgfQpAQCAtMjQ3LDggKzI0Niw4IEBAIHB1
YmxpYzoKIAogICAgIEFyaXRoUHJvZmlsZSogbV9hcml0aFByb2ZpbGU7CiAgICAgSW5zdHJ1Y3Rp
b24qIG1faW5zdHJ1Y3Rpb247Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IG1faW5saW5lU3RhcnQ7CiAgICAgaW50MzJfdCBtX2lubGluZVNpemU7
CiAgICAgaW50MzJfdCBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbjsKICAg
ICBpbnQzMl90IG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMzA2
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMzcsMTcgKzEwMzcsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywg
bV9jb2RlQmxvY2spOwogICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFk
VHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5
cGVKdW1wVG9Eb25lKSk7CiAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRh
ZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFk
ZHJlc3MudmFsdWUoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBOb1B0clRhZykp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJU
YWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIzMDY2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0Miw4ICs2NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVj
dGlvbiogY3VyCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBQdHJUYWcgZXhjZXB0aW9uSGFuZGxlclRhZyA9IEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgZXhjZXB0aW9uSGFu
ZGxlclRhZyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewpAQCAtNjgxLDcgKzY4MCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOworICAg
IGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5
Nyw3ICs2OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRh
YmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0
clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyArNzExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFs
dWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2MywxNyArMTE2Miwx
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICAKICAgICBieVZh
bEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBIYXNQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFk
ZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjMyLDcgKzEyMzEs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVyCiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgSGFzUHJvcGVydHlQdHJUYWcsIGRz
dCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsNyArODAxLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsT3B0aQogICAgIGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uUHV0
QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMpOwogICAgIH0KICAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9CkBAIC04ODUsNyArODg1LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VgogICAgIGlmICh0cnlEaXJl
Y3RQdXRCeVZhbE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRh
ZykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwog
ICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1
ZSwgYnlWYWxJbmZvKTsKQEAgLTkzMiwxMiArOTMyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2EKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IFB0clRhZyByZXN1bHRUYWcpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxl
ckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBw
dHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldENv
ZGVCbG9jaygwKTsKIApAQCAtOTUzLDE5ICs5NTIsMTkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSwgcmVzdWx0VGFnKSwKKyAgICAgICAgICAgICAgICB0YWdDRnVuY3Rp
b25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLAogICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
ICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5v
bmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0
aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVj
dXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgfQogCkBAIC05ODIsMTcgKzk4MSwxNyBAQCBzdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIHZtLT5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlLCByZXN1bHRUYWcpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6
Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAg
ICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCisgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1l
KSk7CiB9CiAKQEAgLTEwMDIsNyArMTAwMSw2IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBQdHJUYWcgbGlua2VkVGFy
Z2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKQEAgLTEw
MTIsMjYgKzEwMTAsMjYgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYg
KGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
Pigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua0ZvcihleGVj
Q2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRy
LCBDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxs
TGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCi0gICAgICAg
ICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQdHIoY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpLCBDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgdm9p
ZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxl
ZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbyk7
CiAgICAgfQogCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3Bl
VW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4
ZWN1dGFibGUoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwg
TXVzdENoZWNrQXJpdHkpOwpAQCAtMTAzOSw4ICsxMDM3LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAg
ICAgICAgICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9u
UHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
KHRocm93RXhjZXB0aW9uVGFnLCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwog
ICAgICAgICB9OwogCkBAIC0xMDY1LDkgKzEwNjIsOSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zv
cihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwg
Q29kZVB0clRhZyk7CisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywg
Y29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCi0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChj
b2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIGxpbmtlZFRhcmdldFRhZykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRh
aWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDk3LDEwICsxMDk0LDEw
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKIAogICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHI7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0
clRhZywgTmVhckNvZGVQdHJUYWcpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTExMTIsMTYgKzExMDksMTYgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlua0luZm8tPm1h
eE51bUFyZ3VtZW50cygpOwogICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3RzIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBj
b2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVj
a0FyaXR5KS5yZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RD
aGVja0FyaXR5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpLnJl
dGFnZ2VkKENvZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIGNvZGVQdHIg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJl
cXVpcmVkKTsKICAgICB9CiAgICAgCiAgICAgbGlua0RpcmVjdEZvcihleGVjLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIFB0
clRhZyByZXN1bHRUYWcpCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKQEAgLTExMzQsMTIgKzExMzEsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5j
dGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25D
ZWxsKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oKnZt
LCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9
IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAg
ICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChj
b2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAg
ICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgcmVzdWx0VGFnKTsKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxM
aW5rSW5mbyk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CkBAIC0xMTQ3LDEyICsxMTQ0LDEx
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CiAgICAgaWYgKFVO
TElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25U
YWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgICAgICBpZiAoIWlz
Q2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMs
IGZ1bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTExNjEsMjMgKzExNTcsMjAg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICBFWENF
UFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gcmVpbnRlcnByZXRfY2FzdDxF
eGNlcHRpb24qPihlcnJvcikpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGhyb3dFeGNl
cHRpb25UYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0clRh
ZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICBraW5kLCBNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2Fs
bCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBQdHJUYWcgcmVzdWx0
VGFnID0gcHRyVGFnKExpbmtQb2x5bW9ycGhpY0NhbGxSZXN1bHRQdHJUYWcsIHZtKTsKLSAgICBT
bG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2Fs
bGVlLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCByZXN1bHRUYWcpOworICAg
IFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWND
YWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCiAgICAgbGlua1Bv
bHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkpOwogICAgIApAQCAtMTE4NiwxMSArMTE3OSw4IEBAIFNsb3dQYXRo
UmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIFB0clRhZyByZXN1bHRUYWcg
PSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbElnbm9yZWQsIHJlc3VsdFRhZyk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRo
RnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbEln
bm9yZWQpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCkBAIC0xNTkwLDggKzE1ODAsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAg
ICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJ1
ZVRyaVN0YXRlKTsKICAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB2bS5nZXRDVElTdHViKERGRzo6
b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0clRhZywgJnZtKTsKLSAg
ICAgICAgdGFyZ2V0UEMgPSByZXRhZ0NvZGVQdHIodGFyZ2V0UEMsIHRodW5rVGFnLCBiaXR3aXNl
X2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgIHRhcmdldFBDID0gcmV0YWdDb2RlUHRyKHRh
cmdldFBDLCBKSVRUaHVua1B0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBkYXRhQnVmZmVyKTsKICAgICB9CiAK
QEAgLTE2NDIsMTAgKzE2MzEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyCiAgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAg
ICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKLSAg
ICAgICAgdm9pZCogZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGlt
aXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAg
ICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGVudHJ5LCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihlbnRyeSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBlbnRyeSA9IERGRzo6
cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICByZXR1cm4gZW50cnkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7
CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTY2NCwxMCArMTY1MSw4
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBzd2l0Y2gg
KG9wdGltaXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVENvZGU6OkRG
R0pJVDoKICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogewotICAgICAgICB2b2lkKiBlbnRyeSA9
IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgoZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KGVudHJ5KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHJl
dHVybiBlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKICAgICB9CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkBAIC0xODUyLDcgKzE4MzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBn
ZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQu
YXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAg
ICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAg
ICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBv
cGVyYXRpb25HZXRCeVZhbFN0cmluZyk7CiAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChl
eGVjLCBpKTsKICAgICAgICAgICAgIH0KQEAgLTE5OTIsNyArMTk3Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBpZiAodHJ5R2V0QnlWYWxPcHRpbWl6
ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSA9
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRy
eSB0byBvcHRpbWl6ZS4KICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgb3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdl
dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MpKTsKQEAgLTIwMzIsNyArMjAxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSGEKICAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEw
CiAgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7
CiAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMs
IEhhc1Byb3BlcnR5UHRyVGFnKSk7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlHZW5lcmljKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA5Myw3ICsy
MDc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAg
ICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMt
PmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgYXV0byBnZXRCeVZhbEZ1bmN0aW9uID0g
YnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihn
ZXRCeVZhbEZ1bmN0aW9uLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgZ2V0QnlWYWxGdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBi
YXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKQEAgLTIyNDIsNyArMjIyNyw3
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoQ2hhclcKICAgICAgICAgICAg
IHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgoKnZhbHVlKVswXSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWco
U3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgo
cmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKQEAgLTIyNjEsNyArMjI0Niw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3dpdGNoSW1tV2kKICAgICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aUZv
clZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlEZWZhdWx0
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgcHRy
VGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKHJlc3VsdCwgSlNTd2l0Y2hQdHJUYWcpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjgxLDcgKzIyNjYsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUp
KTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKLUpJVDo6Q29kZVJlZiBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCitKSVQ6OkNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtMTY3
LDcgKzE2Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRy
VGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFu
Y2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsK
KyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihtX3ZtLT5nZXRD
VElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NTcsNyArNTU3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIHBva2UocmVnVDEs
IHBva2VPZmZzZXQrKyk7CiAgICAgcG9rZShyZWdUMCwgcG9rZU9mZnNldCsrKTsKICAgICBwb2tl
KFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgcG9rZU9mZnNldCsrKTsKLSAgICBDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIE5vUHRyVGFnKTsK
KyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1p
emUpOwogI2Vsc2UKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3Nl
biB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBwaW5nIHNo
b3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDY2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAotSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KFZNKiB2bSkKK0pJVDo6Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC05MSw3ICs5MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwg
c3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIz
Miw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0
aGlzKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCBkc3QsIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xvd0RvbmVDYXNlID0ganVtcCgpOwog
CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCAKICAg
ICAgICAgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAg
ICAgIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChDb2Rl
TG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRh
Zz4obV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8s
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBA
IC0yNzAsNyArMjcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1
YwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFn
LCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZh
bEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTQ1
MCw3ICs0NTAsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQYXRoSnVtcCgp
LmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIFB1dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHBy
b3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCkBAIC00ODcsNyAr
NDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEludGVycHJldGVy
OjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IFB1dFByb3BlcnR5UHRyVGFnLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoSW5zdAogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJv
cGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmlt
cGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwo
KSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KQEAgLTYyNSw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChJCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1
bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzA0
LDcgKzcwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzQ2LDcgKzc0Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQ
dXRQcm9wZXJ0eVB0clRhZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmlt
cGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0xMjc5
LDE3ICsxMjc5LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4K
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxh
YmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAg
IAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAot
ICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAg
ICAiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAg
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFzdERvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0RvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvTmV4dEhvdFBhdGgpKTsKICAgICBpZiAoIW1fZXhj
ZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkBAIC0xMzE3LDEyICsxMzE3LDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZm
ZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVz
JyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRm
OCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnZhbHVlKCkpOwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYywgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9Q
dHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQpAQCAtMTM2MSw4ICsxMzYxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKICAg
ICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgpKTsKQEAgLTEzNzIsMTYgKzEzNzIsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0
T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3Q7CiAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAgICAgIkJhc2VsaW5lIHB1
dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgfSBl
bHNlIHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRy
VGFnLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGlu
ZVB0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRy
ZXNzKSksIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
IHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEzOTUsNyArMTM5
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKIAogICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0
T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUp
KTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7
CkBAIC0xNDA3LDEyICsxNDA3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
V2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJs
b2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRf
YnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3Bl
cnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0g
Z2VuLnN0dWJJbmZvKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJ
bmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
YyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljKSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
Um91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNz
IEpJVFN0dWJSb3V0aW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGlu
ZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSklUU3R1YlJv
dXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKQorICAgIEpJVFN0dWJSb3V0
aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNv
ZGUpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAg
IHsKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50
IHRvIHBhc3MgYSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCiAgICAg
Ly8gYSBSZWZQdHI8SklUU3R1YlJvdXRpbmU+LgogICAgIHN0YXRpYyBSZWY8SklUU3R1YlJvdXRp
bmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJhd0NvZGVQb2ludGVyKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHJhd0NvZGVQb2ludGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSklUU3R1YlJvdXRpbmUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEpJVFN0dWJSb3V0aW5lKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsK
ICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKQEAgLTY5LDExICs2
OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlzIGNvcHlhYmxl
LCBidXQgYXQgdGhlIGNvc3Qgb2YgcmVmZXJlbmNlCiAgICAgLy8gY291bnRpbmcgY2h1cm4uIFJl
dHVybmluZyBhIHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9mIHJlZHVjaW5nCiAgICAgLy8gdGhl
IGNodXJuLgotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZTsgfQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKLSAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFzQ29kZVB0cihSZWY8SklUU3R1YlJvdXRp
bmU+JiYgc3R1YlJvdXRpbmUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRT
dHViUm91dGluZVB0clRhZz4gYXNDb2RlUHRyKFJlZjxKSVRTdHViUm91dGluZT4mJiBzdHViUm91
dGluZSkKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsK
ICAgICAgICAgQVNTRVJUKCEhcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9j
b2RlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9j
b2RlOwogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ2ICs0
NSw0NiBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKIHsK
ICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0
aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklU
VGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSogdm0pCiB7
CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0qIHZt
KQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZt
LCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5h
dGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSogdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpj
YW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91
dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNh
bGwoVk0qIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBj
dGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3Ry
dWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1
bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2bSkKIHsKICAgICBBU1NFUlQo
Vk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlv
bkNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
SklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0q
IHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAu
YWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOworICAgIENUSVN0dWJNYXA6
OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5
KSB7CiAgICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlz
dGluZyBlbnRyaWVzLgogICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkBA
IC05MywxMiArOTMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1
YgogICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhp
c3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgIENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlT
dHViTWFwLmZpbmQoZ2VuZXJhdG9yKTsKICAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVu
ZCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7CiAgICAgcmV0dXJu
IGVudHJ5LT52YWx1ZTsKIH0KIApAQCAtMTIzLDEyICsxMjMsMTIgQEAgTmF0aXZlRXhlY3V0YWJs
ZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogCiAgICAgUmVmUHRyPEpJVENvZGU+IGZvckNhbGw7
CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZW50
cnkgPSBnZW5lcmF0b3Iodm0pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gZW50cnkgPSBnZW5lcmF0b3Iodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CiAgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50
cnkuY29kZSgpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGZvckNhbGwgPSBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDYWxsKHZtKSksIEpJVENvZGU6
Okhvc3RDYWxsVGh1bmspKTsKKyAgICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVmKG5ldyBOYXRpdmVK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNhbGwodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkp
LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCi0gICAgUmVmPEpJVENvZGU+IGZvckNv
bnN0cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pKSwgSklU
Q29kZTo6SG9zdENhbGxUaHVuaykpOworICAgIFJlZjxKSVRDb2RlPiBmb3JDb25zdHJ1Y3QgPSBh
ZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZtKS5y
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAg
IAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRh
YmxlOjpjcmVhdGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9uLCBXVEZN
b3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBpbnRyaW5zaWMsIHNpZ25hdHVyZSwgbmFt
ZSk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUo
ZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRp
dmVFeGVjdXRhYmxlLCB0aGlzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAg
SklUVGh1bmtzKCk7CiAgICAgdmlydHVhbCB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Rp
TmF0aXZlVGFpbENhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwo
Vk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2
ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25z
dHJ1Y3QoVk0qKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1
bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIo
VGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY3RpU3R1YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVu
Y3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWRO
YXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2Vu
ZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+
IENUSVN0dWJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElTdHViTWFwOwogICAgIENUSVN0dWJN
YXAgbV9jdGlTdHViTWFwOwogCiAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPiBIb3N0RnVuY3Rpb25LZXk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNw
cAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBQQ1Rv
Q29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUCiAgICAgICAgICAgICBjb2RlT3Jp
Z2luQ29tcHJlc3Nvci53cml0ZTx1aW50cHRyX3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgfTsKIAotICAgIG1fcGNSYW5nZVN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3Rh
cnQpLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCk7Ci0gICAgbV9wY1JhbmdlRW5kID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2Nh
dGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFM
b2NhdGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlRW5kID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPE5vUHRyVGFnPihidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCkuZW5kKS5kYXRhTG9j
YXRpb248dWludHB0cl90PigpOwogICAgIG1fcGNSYW5nZUVuZCAtPSAxOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKTsgaSsrKSB7CiAg
ICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdlJiBjb2RlUmFuZ2UgPSBi
dWlsZGVyLm1fY29kZVJhbmdlc1tpXTsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKLSAgICAgICAgdm9p
ZCogZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlv
bigpOworICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRh
Zz4oY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgdm9pZCogZW5kID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRp
b24oKTsKICAgICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0YXJ0KSk7CiAgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEpOwogICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQogICAg
ICAgICAgICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CiAg
ICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3Rh
cnQpOworICAgICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
YnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQp
OwogCiAgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CiAgICAgICAgIGJ1aWxkQ29kZU9yaWdp
blRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NCw2ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ1aWxkTWFwcGluZzsKIH07
CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzY2NTg+CiBjbGFzcyBQQ1RvQ29kZU9y
aWdpbk1hcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXApOwog
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBvbHltb3JwaGljQ2FsbENhc2U6OmR1
bXAoUHJpbnRTdHJlCiB9CiAKIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVS
ZWYsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwK
KyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBj
b2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVyRnJh
bWUsCiAgICAgQ2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxs
Q2FzZT4mIGNhc2VzLAogICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiYmIGZhc3RDb3VudHMpCiAg
ICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZVJlZiwgdm0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCBwcml2YXRl
OgogY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKLSAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgICAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lLCBDYWxsTGlua0luZm8mLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2Fz
ZT4mLAogICAgICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4mJiBmYXN0Q291bnRzKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjMwNjY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNDAgKzY2LDM3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRnVuY3Rp
b25QdHIgcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1
dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsKQogewotICAgIEZ1bmN0aW9uUHRyIHRhcmdldCA9IE1hY3JvQXNz
ZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxPcGVyYXRpb25Q
dHJUYWc+KGNhbGwpOwogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGF1dG8q
IGNhbGxUYXJnZXQgPSBjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhD
YWxsVGh1bmsoc2xvd1BhdGhUaHVuaykuY2FsbFRhcmdldCgpOwotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHIoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxPcGVyYXRpb25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4
ZWN1dGFibGVBZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpOworICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5r
KHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwogICAgIH0K
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHVudGFnQ0Z1bmN0aW9uUHRyKHRhcmdldC5l
eGVjdXRhYmxlQWRkcmVzcygpLCBQdXRQcm9wZXJ0eVB0clRhZyksIENGdW5jdGlvblB0clRhZyk7
CisgICAgcmV0dXJuIHRhcmdldC5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCk7CiB9CiAKLXZv
aWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9j
YXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uLCBQdHJUYWcgY2Fs
bFRhZykKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgewogICAg
ICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwogICAgICAgICBGVEw6OlRodW5rcyYgdGh1
bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHIgdGFyZ2V0ID0gTWFjcm9B
c3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENh
bGxUYXJnZXQ8T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRo
dW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPEpJVFRodW5r
UHRyVGFnPigpKTsKICAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtl
eUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOwotICAgICAgICBrZXkgPSBrZXku
d2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHIodGh1bmtzLmdldFNsb3dQYXRo
Q2FsbFRodW5rKGtleSkuY29kZSgpKTsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5ld0Nh
bGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIGtleS5jYWxsUHRyVGFnKCkpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24p
OworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5yZXRhZ2dlZENv
ZGU8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZWxzZSAv
LyBFTkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwg
RnVuY3Rpb25QdHIobmV3Q2FsbGVlRnVuY3Rpb24sIGNhbGxUYWcpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0
aW9uUHRyVGFnPigpKTsKIH0KIAogZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CkBAIC0xNTAsNyAr
MTQ3LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludAogICAgIH0K
IH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5j
dGlvbihHZXRCeUlES2luZCBraW5kKQoraW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQp
CiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUlES2luZDo6Tm9ybWFsOgpA
QCAtMTY2LDcgKzE2Myw3IEBAIGlubGluZSBGdW5jdGlvblB0ciBhcHByb3ByaWF0ZU9wdGltaXpp
bmcKICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRy
IGFwcHJvcHJpYXRlR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQpCitpbmxpbmUgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5SWRGdW5jdGlvbihHZXRC
eUlES2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlJREtp
bmQ6Ok5vcm1hbDoKQEAgLTIxMCw3ICsyMDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1p
emluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0QXJyYXlMZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI2Nyw3ICsyNjQsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9w
ZXJ0eU5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5m
by5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVu
Y3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICB9CkBAIC0zNzYsNyArMzczLDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZv
T3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgp
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8s
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5MSw3ICszODgsNyBAQCB2b2lkIHJlcGF0Y2hHZXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgCiAgICAgaWYgKHRyeUNhY2hlR2V0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZXRCeUlkRnVuY3Rpb24o
a2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlh
dGVHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgIH0KIH0KIApAQCAtNDYzLDcgKzQ2MCw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxM
b2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCksIFB1dFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRo
dW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0
aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2Uo
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTgyLDcgKzU3OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CiAKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC01OTcsNyArNTk0LDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVgogICAgIAogICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9u
Q2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8u
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCks
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAg
fQogfQogCkBAIC02NzEsNyArNjY4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlSW4oCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9ySW4oKSwKLSAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNjg2LDI0ICs2ODMsMjMgQEAgdm9pZCByZXBhdGNoSW4oCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIGlm
ICh0cnlDYWNoZUluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8p
ID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9u
SW4sIENGdW5jdGlvblB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0
aW9uSW4pOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgUHRyVGFnIGxpbmtU
YWcpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYp
CiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVSZWYucmV0YWdnZWRDb2Rl
KGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oY29kZVJlZi5jb2RlKCkpKTsKIH0KIAotc3RhdGlj
IHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlua1RhZykKK3N0YXRpYyB2b2lkIGxpbmtT
bG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0
Q1RJU3R1YihnZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5r
VmlydHVhbENhbGxQdHJUYWcsIHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuaywgbGlua1RhZyk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0
dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxM
aW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3Jl
YXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0K
IApAQCAtNzIxLDcgKzcxNyw3IEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlND
ZWxsKiAKIAogdm9pZCBsaW5rRm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpTT2JqZWN0
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBQdHJUYWcgY29kZVRhZykK
KyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwogCkBAIC03
NDMsMTQgKzczOSwxMyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3Nl
bWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwg
aW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBv
aW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNv
ZGVQdHIucmV0YWdnZWQoY29kZVRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
ZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxp
emF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkp
IHsKLSAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0
clRhZywgJnZtKTsKLSAgICAgICAgbGlua1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8sIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1RhZyk7CisgICAgICAgIGxpbmtTbG93
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNzU5LDcgKzc1NCw3IEBAIHZvaWQg
bGlua0ZvcigKIAogdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIoKSk7CiAgICAgCkBAIC03NzQsOCArNzY5LDggQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogCiAg
ICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFp
bENhbGwpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKGNhbGxMaW5r
SW5mby5wYXRjaGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRy
KSk7Ci0gICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0lu
Zm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQ
dHIpKTsKKwogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChleGVjLCAmY2FsbExpbmtJbmZvKTsKIH0KQEAgLTc4OSw3ICs3
ODQsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8pOwogfQogCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBQdHJUYWcgY29kZVRh
ZykKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVm
KQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlu
a0luZm8uY2xlYXJDb2RlQmxvY2soKTsKQEAgLTgwMSw3ICs3OTYsNyBAQCBzdGF0aWMgdm9pZCBy
ZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0lu
Zm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwotICAgICAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmLCBjb2RlVGFnKTsKKyAgICAgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7CiAgICAgICAgIGNhbGxMaW5r
SW5mby5jbGVhckNhbGxlZSgpOwogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CkBAIC04MTYsOCArODExLDcgQEAgdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxv
ZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCAiXG4i
KTsKICAgICAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZt
KTsKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExp
bmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtODI5LDE2ICs4MjMsMTUg
QEAgdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbAogICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygi
TGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7CiAKLSAgICBQdHJUYWcgbGlua1Rh
ZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsICZ2bSk7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5m
byk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rLCBsaW5r
VGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgcmV2
ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVs
bHB0ciwgdHJ1ZSkpOwogfQogCiBuYW1lc3BhY2Ugewogc3RydWN0IENhbGxUb0NvZGVQdHIgewog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogfTsKIH0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKIApAQCAtMTAzNCw3ICsxMDI3LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAKICAgICAgICAgQ2FsbFZhcmlhbnQg
dmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhl
Y3V0YWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhh
c0pJVENvZGVGb3JDYWxsKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0
YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNo
ZWNrTm90UmVxdWlyZWQpOwpAQCAtMTA4MCw3ICsxMDczLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogI2VuZGlmCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJK
aXQuanVtcCgpOwpAQCAtMTA5OCwyMSArMTA5MSwyMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoCiAgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9y
bWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCiAg
ICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0Nh
bGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKICAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2Fs
bCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIu
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnRQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3ModGFyZ2V0KSkpOwogI2Vsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5yZXRhZ2dlZChDb2Rl
UHRyVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
VG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIu
Y29kZVB0cikpOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAg
UHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1Rh
ZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUg
PSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5B
TElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IE5lYXJDb2RlUHRyVGFnLAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAg
ICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zm
c2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxp
c3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCkBAIC0xMTIxLDcgKzExMTMsNyBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hP
blJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCi0gICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQt
Yml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24t
Y2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKQEAg
LTExMzksNyArMTEzMSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIAogdm9pZCByZXNl
dEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgR2V0QnlJREtpbmQga2luZCkKIHsKLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOwogfQogCkBAIC0xMTU4LDcgKzExNTAsNyBAQCB2b2lkIHJlc2V0
UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0KIAotICAg
IGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2Fs
bExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjMwNjY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDggKzQ1LDggQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwg
Sgogdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBQdXRLaW5kKTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciwgUHRyVGFnKTsKLXZvaWQgbGlua0RpcmVjdEZvcihFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RG
b3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJik7CiB2b2lkIHVubGlua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBs
aW5rVmlydHVhbEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mKTsKQEAgLTU0LDcgKzU0LDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbAogdm9pZCByZXNldEdl
dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlES2luZCk7CiB2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNl
dEluKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsLCBGdW5jdGlvblB0ciBuZXdD
YWxsZWVGdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcpOwordm9pZCBmdGxUaHVua0F3YXJlUmVwYXRj
aENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDggQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC0+bW92ZShKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVQ6OmFyZ3VtZW50R1BSMCk7
CiAgICAgICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbVB0cihtX3BjKSwgSklUOjphcmd1
bWVudEdQUjEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU2xvd1BhdGhQ
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2ppdC0+
Y2FsbCh0YWcpOwotICAgICAgICBtX2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIobV9zbG93UGF0aEZ1bmN0aW9u
LCB0YWcpKSk7CisgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gbV9qaXQtPmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
bV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obV9z
bG93UGF0aEZ1bmN0aW9uKSkpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgbV9qaXQtPmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDE2KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMzA2
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY0LDI1ICsxNjQsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaywgY29uc3Qg
Y2hhciogdGh1bmtLaW5kKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFs
bGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2sp
KTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAg
ICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3Bl
Y2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKKyAgICAgICAgICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRo
dW5rIGZvciAlcyIsIHRodW5rS2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVz
IHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBh
cmd1bWVudAogICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJsZSBh
cmNoaXRlY3R1cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uKQorICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJsZShGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBh
c3NlcnRJc0NGdW5jdGlvblB0cihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3BlY2lhbGl6ZWRUaHVua1B0clRhZywgbmV4dFB0
clRhZ0lEKCkpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2Fs
bCh0YWcpLCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOworICAgICAgICAgICAgbV9jYWxs
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChKSVRUaHVua1B0clRhZyksIGZ1bmN0aW9uLnJl
dGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihGdW5jdGlvblB0ciBmdW5j
dGlvbikKKyAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOwpAQCAtMjA5LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWls
dXJlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4+IG1fY2Fs
bHM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+Pj4gbV9jYWxsczsKICAgICB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3
LDEzIEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiUHRyVGFnLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgVk07Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7Cit0ZW1w
bGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoVk0qKTsKK3VzaW5nIFRodW5rR2Vu
ZXJhdG9yID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiAoKikoVk0qKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAKIC8v
IFdlIHdpbGwganVtcCBoZXJlIGlmIHRoZSBKSVQgY29kZSB0cmllcyB0byBtYWtlIGEgY2FsbCwg
YnV0IHRoZQogLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVzIHRvIHRocm93IGFu
IGV4Y2VwdGlvbiBpbnN0ZWFkLgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTcwLDIzICs3MCwxOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAKICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJh
bWUpOwogCi0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0
aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CiAKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhy
b3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
dGhyb3dFeGNlcHRpb25UYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0
aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAK
LXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVk
TGlua2VkVGFyZ2V0VGFnKQorc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBq
aXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQogewot
ICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7Ci0KICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwpAQCAtOTksOSAr
OTQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQubW92ZShHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxU
YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHNsb3dQYXRoRnVuY3Rpb24p
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgOCksIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwOSw5
ICsxMDQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKHNs
b3dQYXRoRnVuY3Rpb24pPihHUFJJbmZvOjpyZWdUMik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihzbG93UGF0aEZ1bmN0aW9uLCBjYWxs
VGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9u
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMTIyLDcgKzExNyw3IEBAIHN0YXRpYyB2
b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgIC8v
IFRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIEdQUiB3aWxsIGhvbGQgYSBub24temVybyB2YWx1ZSBm
b3IgdGFpbCBjYWxscy4KIAotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcp
OwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC51bnRhZ1JldHVybkFk
ZHJlc3MoKTsKIApAQCAtMTMzLDEwICsxMjgsMTAgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3Io
CiAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogCiAgICAgZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgaml0Lmp1bXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewog
ICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsg
cmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0
byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE0
NSwzMyArMTQwLDI5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIK
ICAgICAvLyBiZWVuIGFkanVzdGVkLCBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFp
bGFibGUgZm9yIHVzZS4KICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgUHRyVGFnIGV4cGVj
dGVkTGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwsIGV4cGVjdGVkTGlua2Vk
VGFyZ2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7
CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBsaW5rVGFnLCAiTGluayBjYWxsIHNsb3cgcGF0
aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRm9yIGNsb3N1
cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUg
dXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdv
aW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIFB0clRhZyBleHBlY3RlZExpbmtl
ZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7
Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwg
ZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJh
dGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWco
TGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBsaW5rVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRklYTUU6
IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxs
IHZzLiBhIHNsb3cKIC8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBm
YXN0IHRhaWwgY2FsbHMgZm9yIG1lZ2Ftb3JwaGljCiAvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5n
IHRoZSBzaHVmZmxlci4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDg4MzEKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUz
Ml82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlz
IG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAg
LTIzMiwxMiArMjIzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3Io
Vk0KIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBK
SVQgY29kZS4KICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwgY2FsbENvZGUoaml0LmxhYmVsKCkp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0LCBDb2RlUHRy
VGFnKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgSlNF
bnRyeVB0clRhZyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKICAgICAg
ICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJlZ1Q0KTsKICAgICB9
Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIENvZGVQdHJUYWcpOworICAgIGppdC5qdW1w
KEdQUkluZm86OnJlZ1Q0LCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIG5vdEpTRnVuY3Rpb24ubGlu
aygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZv
OjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKQEAgLTI0OCwxMyArMjM5LDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJn
ZXRUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlua2VkVGFy
Z2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7
CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsIHZt
KTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsIGxpbmtUYWcsCisg
ICAgICAgIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIlZpcnR1
YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkg
PT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpOwogfQpAQCAtMjYy
LDcgKzI1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KIGVu
dW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRh
Z3MsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsKIGVudW0gY2xhc3MgVGh1bmtGdW5j
dGlvblR5cGUgeyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0aW9uIH07CiAKLXN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlv
blR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1
bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQorc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1
bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3Vl
IHBhY2tldHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTY4OQpAQCAtMzA3LDkgKzI5Niw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5
cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29k
ZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50
ZXJmYWNlSklUOjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRy
VGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJl
c3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2
ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlv
bjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEpTRW50cnlQdHJUYWcpOwogCiAg
ICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFj
ZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0zMjgsNyArMzE3LDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVzaSwgSW50ZXJuYWxGdW5jdGlv
bjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIFg4NlJlZ2lzdGVyczo6cjkpOwog
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNv
bjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgaml0LnhvcjY0KFg4NlJlZ2lzdGVy
czo6ZXNpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5
LCBDb2RlUHRyVGFnKTsKKyAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBKU0VudHJ5UHRy
VGFnKTsKIAogI2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVk
eCwgcjgsIHI5LCAuLi4pOwpAQCAtMzQzLDkgKzMzMiw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtG
dW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBYODZSZWdp
c3RlcnM6OnI5KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsK
KyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpy
OSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVs
c2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJz
OjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkp
LCBDb2RlUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rp
b25Gb3Ioa2luZCkpLCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZhY2VKSVQ6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMzY3LDcgKzM1Niw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0LmxvYWRQdHIo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngxLCBJbnRlcm5hbEZ1bmN0
aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQVJNNjRSZWdpc3RlcnM6Ongy
KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNvZGVQ
b2lzb246OmtleSgpKSwgQVJNNjRSZWdpc3RlcnM6OngxKTsKICAgICBqaXQueG9yNjQoQVJNNjRS
ZWdpc3RlcnM6OngxLCBBUk02NFJlZ2lzdGVyczo6eDIpOwotICAgIGppdC5jYWxsKEFSTTY0UmVn
aXN0ZXJzOjp4MiwgQ29kZVB0clRhZyk7CisgICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6Ongy
LCBKU0VudHJ5UHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAjaWYgQ1BV
KE1JUFMpCkBAIC0zODMsOSArMzcyLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlw
ZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgICAgIGppdC54b3JQdHIo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
KSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6
b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVQdHJUYWcpOworICAgICAgICBq
aXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRH
UFIxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwg
SlNFbnRyeVB0clRhZyk7CiAKICNpZiBDUFUoTUlQUykKICAgICAvLyBSZXN0b3JlIHN0YWNrIHNw
YWNlCkBAIC00MjksOSArNDE4LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZQogI2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJl
Z2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgotICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoRXhjZXB0aW9uSGFuZGxlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0
cihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdGFnKSksIEpTSW50ZXJmYWNlSklUOjpyZWdU
Myk7Ci0gICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCB0YWcpOworICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKSksIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMyk7CisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBPcGVyYXRpb25QdHJU
YWcpOwogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaml0LmFkZFB0cihK
U0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VsaWYgT1MoV0lORE9XUykKQEAgLTQ0MSw0MCArNDI5LDQwIEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENv
ZGVQdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVu
a0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlU
eXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3Mg
IiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0
aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0
cmFtcG9saW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVu
Y3Rpb24gPyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBX
aXRoU2F2ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50
ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDog
IiIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBuYXRp
dmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uLCBDb2RlRm9y
Q2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRh
aWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlh
SnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJh
dG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1
bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhvdXRT
YXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0
aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2Vu
ZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVj
dCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVy
bmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9y
R2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5jdGlvbiwgQ29kZUZv
ckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW50ZXJuYWxGdW5jdGlvbkNvbnN0
cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJl
dHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpJbnRlcm5hbEZ1
bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFy
aXR5Rml4dXBHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJ
VCBqaXQodm0pOwogCkBAIC00OTQsNyArNDgyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFy
aXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
LCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBleHRyYVRlbXApOwogICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFU
ZW1wKTsKLSAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gcHRyVGFnKEFyaXR5Rml4dXBQdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gc3RhdGlj
X2Nhc3Q8UHRyVGFnPihyYW5kb20oKSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRy
dXN0ZWRJbW1QdHIodGVtcFJldHVyblBDVGFnKSwgZXh0cmFUZW1wKTsKICAgICBqaXQudGFnUHRy
KEdQUkluZm86OnJlZ1QzLCBleHRyYVRlbXApOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwpAQCAtNjE5LDE5ICs2MDcsMTcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogI2VuZGlmIC8vIEVuZCBvZiBV
U0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uLgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgUHRyVGFnIGFyaXR5Rml4dXBUYWcgPSBwdHJUYWco
QXJpdHlGaXh1cFB0clRhZywgdm0pOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBhcml0eUZpeHVwVGFnLCAiZml4dXAgYXJpdHkiKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKIAogICAgIGppdC5icmVha3BvaW50
KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
LSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJ1bnJlYWNoYWJsZSB0
aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJM
b2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQpAQCAtNjcyLDcgKzY1OCw3IEBA
IHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5k
RmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsK
ICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4MCw3ICs2NjYsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuCiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJp
bmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4OSw3ICs2NzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJBdCIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIC8vIGxv
YWQgY2hhciBjb2RlCkBAIC02OTksNyArNjg1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZy
b21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm9uSW50QXJnSnVtcDsKQEAgLTcyMCwxMSArNzA2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjbHozMlRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQ
b2ludFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAg
ICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBA
IC04ODAsMTIgKzg2NiwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcih0cnVuYyk7CiAK
IHN0YXRpYyBjb25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41OwogICAgIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTkyMywx
MSArOTA5LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8KICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAiZmxvb3IiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVu
a0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEp
OwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtOTQ2LDExICs5
MzIsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
ZWlsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dl
bmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1
bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0
LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTk2OSwxMSArOTU1
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG8KICAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1
bmMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAg
ICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJn
dW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGpp
dC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMDAzLDM3ICs5
ODksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJy
b3VuZCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleHBUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQot
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3Vi
bGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1
cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYg
KCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQu
Y2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihs
b2cpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAp
OwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2Fs
bCh2bSksICJsb2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAx
KTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCk7CkBAIC0xMDg2LDcgKzEwNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtH
ZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCh2bSwgMik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnMEp1bXA7CkBA
IC0xMTE3LDExICsxMTAzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5l
cmF0b3IKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiaW11bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmFuZG9tVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoKnZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qy
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCk7CkBAIC0xMTI5LDExICsxMTE1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21U
aHVua0dlbmVyYXQKIAogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKICNlbHNlCi0gICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhp
c05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTEyMTcsMTYgKzEyMDMs
MTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgR1BS
SW5mbzo6cmVnVDEpOwogICAgIGppdC54b3I2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDApOwogI2VuZGlmCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVn
VDAsIENvZGVQdHJUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBDb2RlUHRyVGFn
KTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCwgSlNFbnRy
eVB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOwog
CiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIAog
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlu
a0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgbGlua0J1ZmZlci5saW5r
KG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAotICAgICAgICBsaW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3BlY2lhbGl6ZWQg
dGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CisgICAg
ICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJv
dW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDQ2ICsyNiw0NyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5j
bHVkZSAiUHRyVGFnLmgiCiAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKK3RlbXBsYXRl
PFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3MgVk07CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Io
Vk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihW
TSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNKiwgQ2FsbExp
bmtJbmZvJik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJh
dG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0q
KTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
ZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dl
bmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21U
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0Nh
bGxUaHVuayhWTSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSosIENhbGxMaW5rSW5mbyYpOwor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29u
c3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3Io
Vk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSop
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxv
b3JUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI2ICs1OCwyNCBAQCB2b2lkIGlu
aXRpYWxpemUoKQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAgICBsbGludF9lbnRyeSgmRGF0YTo6
c19vcGNvZGVNYXApOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNP
REVfSURTOyArK2kpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IChpID09IG9wX2NhdGNoKSA/IEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcgOiBCeXRlY29kZVB0clRhZzsKLSAgICAgICAgRGF0YTo6c19v
cGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCB0YWcpOwotICAg
IH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7ICsraSkK
KyAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2Rl
TWFwW2ldLCBCeXRlY29kZVB0clRhZyk7CiAKICAgICBzdGF0aWMgY29uc3QgUHRyVGFnIHRhZ3NG
b3JPcGNvZGVbXSA9IHsKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfcHJvZ3JhbV9wcm9s
b2d1ZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9ldmFsX3Byb2xvZ3VlCi0gICAgICAg
IENvZGVQdHJUYWcsIC8vIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgIENv
ZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlCi0gICAgICAgIENv
ZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUKLSAgICAg
ICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKLSAg
ICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9j
aGVjawotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9nZW5lcmljX3JldHVybl9wb2ludAor
ICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCisgICAgICAg
IEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2V2YWxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0
clRhZywgLy8gbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0
clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRy
eVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZQorICAgICAg
ICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjawor
ICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2dlbmVyaWNfcmV0dXJu
X3BvaW50CiAgICAgICAgIEJ5dGVjb2RlUHRyVGFnLCAvLyBsbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lCiAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIC8vIGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxp
bnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9u
YXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCi0gICAgICAgIENvZGVQdHJUYWcsIC8v
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAgIEpT
RW50cnlQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgSlNF
bnRyeVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAg
IEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZQogICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbgogICAgIH07CiAKQEAgLTg5LDcgKzg3LDcgQEAgdm9pZCBpbml0
aWFsaXplKCkKICAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdID0gdGFnQ29kZVB0
cihEYXRhOjpzX29wY29kZU1hcFtvcGNvZGVJRF0sIHRhZ3NGb3JPcGNvZGVbaV0pOwogICAgIH0K
IAotICAgIHZvaWQqIGhhbmRsZXIgPSBMTEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lKTsKKyAgICB2b2lkKiBoYW5kbGVyID0gTExJbnQ6OmdldEV4
ZWN1dGFibGVBZGRyZXNzKGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4T3Bjb2RlTGVuZ3RoICsgMTsgKytpKQogICAgICAg
ICBEYXRhOjpzX2V4Y2VwdGlvbkluc3RydWN0aW9uc1tpXS51LnBvaW50ZXIgPSBoYW5kbGVyOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAy
MzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUg
Ik9wY29kZS5oIgotI2luY2x1ZGUgIlB0clRhZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NTUsNyArNTUsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBJbnN0cnVjdGlvbiogZXhjZXB0aW9u
SW5zdHJ1Y3Rpb25zKCk7CiAgICAgZnJpZW5kIE9wY29kZSogb3Bjb2RlTWFwKCk7CiAgICAgZnJp
ZW5kIE9wY29kZSBnZXRPcGNvZGUoT3Bjb2RlSUQpOwotICAgIGZyaWVuZCB2b2lkKiBnZXRDb2Rl
UHRyKE9wY29kZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4gZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldENvZGVSZWYoT3Bj
b2RlSUQpOwogfTsKIAogdm9pZCBpbml0aWFsaXplKCk7CkBAIC03OSwxNiArODAsMzYgQEAgaW5s
aW5lIE9wY29kZSBnZXRPcGNvZGUoT3Bjb2RlSUQgaWQpCiAjZW5kaWYKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEIGlkKQorQUxXQVlTX0lOTElORSB2b2lkKiBn
ZXRFeGVjdXRhYmxlQWRkcmVzcyhPcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0T3Bjb2RlKGlkKSk7CisgICAgQVNTRVJUKG9wY29kZUlE
ID49IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihnZXRPcGNvZGUob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4K
K0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNv
ZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhnZXRPcGNvZGUob3Bjb2RlSUQpKTsKK30KKwor
dGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz4gZ2V0Q29kZVJlZihPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRDb2RlUHRy
PHRhZz4ob3Bjb2RlSUQpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCit0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKE9wY29kZUlE
IG9wY29kZUlEKQoreworICAgIEFTU0VSVChvcGNvZGVJRCA+PSBOVU1CRVJfT0ZfQllURUNPREVf
SURTKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8
dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CiAKLUFMV0FZ
U19JTkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5jdGlvblB0cihPcGNvZGVJRCBjb2RlSWQpCisj
ZWxzZQorQUxXQVlTX0lOTElORSB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEIGlkKQogewotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cihjb2RlSWQpKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0T3Bjb2RlKGlkKSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50
cnlwb2ludC5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTIg
QEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bQogICAgIGlmIChWTTo6
Y2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgICAgICBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAg
ICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlv
bkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLCB2
bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAg
ICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0
cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTU5LDE5ICs1OSwxOSBAQCBzdGF0aWMgdm9pZCBz
ZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUo
Ci0gICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9n
dWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoZ2V0Q29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIGdldENvZGVQdHI8
SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJv
bG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKKyAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGdldENvZGVSZWY8
SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIGdl
dENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICAg
ICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ28KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2Rl
UmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9ldmFs
X3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVm
KCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgc2V0UHJv
Z3JhbUVudHJ5cG9pbnQoVk0mIHZtLAogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpj
YW5Vc2VKSVQoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZt
LmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IHZtLmdldENUSVN0dWIocHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAg
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAg
IFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3By
b2xvZ3VlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJl
ZiA9IGdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSk7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgc2V0TW9kdWxlUHJvZ3JhbUVu
dHJ5cG9pbnQoVgogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIo
bW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IHZtLmdldENUSVN0dWIobW9kdWxlUHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAg
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyB2b2lk
IHNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KFYKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X21vZHVsZV9w
cm9ncmFtX3Byb2xvZ3VlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZVJlZiA9IGdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbW9kdWxlX3Byb2dy
YW1fcHJvbG9ndWUpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwg
Y29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkocmV2
aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCogY2FsbFRvVGhy
b3coRXhlY1N0YXRlKiBleGVjKQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIEpTVmFsdWUoc2NvcGUu
ZXhjZXB0aW9uKCkpLCAiIChjYWxsVG9UaHJvdykuXG4iKTsKICNlbmRpZgotICAgIHJldHVybiBM
TEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lKTsKKyAg
ICByZXR1cm4gTExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKGxsaW50X3Rocm93X2R1cmluZ19j
YWxsX3RyYW1wb2xpbmUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDExICs0NDQsMTAgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKIAogICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBj
b2RlQmxvY2stPmppdENvZGVNYXAoKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRp
b24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAK
LSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZVB0clRhZywgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7Ci0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVM
b2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9U
V08oanVtcFRhcmdldCwgZXhlYy0+dG9wT2ZGcmFtZSgpKTsKQEAgLTE0MzgsNyArMTQzNyw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBp
ZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1
bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFs
dWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHZtLmdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNv
ZGVQdHIpOwogCiAgICAgICAgICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBj
YWxsTGlua0luZm8pIHsKQEAgLTE0NTAsMTIgKzE0NDksMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwg
Y2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5h
bEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFy
Z2V0ID0gY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7Cisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAgICAgICAgICAgYXNzZXJ0SXNU
YWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAg
ICAgICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQoY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMs
IGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Cisg
ICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0Nh
bGxlZSwgcGMsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwpAQCAtMTQ2NCw3ICsxNDYzLDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKQEAgLTE1MDAsMTQgKzE0OTksMTQgQEAgaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5yZW1vdmUoKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxs
ZXJDb2RlQmxvY2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7Ci0gICAgICAgIGNhbGxMaW5rSW5m
by0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIExMSW50
Q2FsbElDUHRyVGFnKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9
IGNvZGVQdHI7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKICAgICB9CiAKLSAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsK
KyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQoY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBl
eGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAg
IExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
Z2VuZXJpY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKQEAgLTE2MzcsNyArMTYzNiw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwKICAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhwY1szXS51Lm9wZXJhbmQpOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxl
ckZyYW1lKGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMoTExJ
bnQ6OmdldENvZGVQdHIobGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQpKTsKKyAgICBleGVjQ2Fs
bGVlLT5zZXRSZXR1cm5QQyhMTEludDo6Z2V0RXhlY3V0YWJsZUFkZHJlc3MobGxpbnRfZ2VuZXJp
Y19yZXR1cm5fcG9pbnQpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAgICAg
ZXhlYy0+c2V0Q3VycmVudFZQQyhwYyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEVuY29kZWRKU1ZhbHVlIEpTX0VYUE9SVF9Q
UklWQVRFIHZtRW50cnlUb1dhc20odm9pZCogY29kZSwgVk0qIHZtLCBQcm90b0NhbGxGcmFtZSog
ZnJhbWUpCiB7CisgICAgY29kZSA9IHJldGFnQ29kZVB0cjxXYXNtRW50cnlQdHJUYWcsIEpTRW50
cnlQdHJUYWc+KGNvZGUpOwogICAgIHJldHVybiB2bUVudHJ5VG9KYXZhU2NyaXB0KGNvZGUsIHZt
LCBmcmFtZSk7CiB9CiAgICAgCkBAIC01MSw1MCArNTIsNTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNf
RVhQT1JUX1BSSVZBVEUgdm1FbnRyeQogCiBuYW1lc3BhY2UgTExJbnQgewogCi1zdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwgT3Bjb2Rl
SUQgb3Bjb2RlSUQsIGNvbnN0IGNoYXIgKnRodW5rS2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwg
T3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IGNoYXIgKnRodW5rS2luZCkKIHsKICAgICBKU0ludGVy
ZmFjZUpJVCBqaXQodm0pOwogCiAgICAgLy8gRklYTUU6IHRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0
ZXIgd2F5IHRvIGRvIGl0IG9uIFg4NiwgYnV0IEknbSBub3Qgc3VyZSBJIGNhcmUuCi0gICAgTExJ
bnRDb2RlIHRhcmdldCA9IExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIob3Bjb2RlSUQpOwotICAg
IGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4odGFyZ2V0KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwLCBDb2RlUHRyVGFnKTsKKyAgICBMTEludENvZGUgdGFyZ2V0ID0gTExJ
bnQ6OmdldENvZGVGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihvcGNvZGVJRCk7CisgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKHRhcmdldCwgSlNFbnRyeVB0clRhZyk7CisKKyAgICBqaXQubW92ZShK
U0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YXJnZXQpLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDApOworICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7
CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZVB0clRhZywgIkxMSW50ICVz
IHByb2xvZ3VlIHRodW5rIiwgdGh1bmtLaW5kKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJMTEludCAlcyBwcm9sb2d1ZSB0aHVuayIsIHRo
dW5rS2luZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRy
eVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
cmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjYWxsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNvbnN0cnVjdEVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSwgImZ1bmN0
aW9uIGZvciBjb25zdHJ1Y3QiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjYWxsIHdp
dGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9y
Q29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBU
byh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaywgImZ1bmN0aW9u
IGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9ldmFsX3Byb2xvZ3Vl
LCAiZXZhbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBw
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRl
VGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlLCAicHJvZ3JhbSIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBtb2R1bGVQ
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRl
VGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSwgIm1vZHVs
ZV9wcm9ncmFtIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTIgKzQyLDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTX0VYUE9SVF9QUklWQVRFIHZtRW50cnkKIAogbmFtZXNwYWNlIExMSW50IHsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5
VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNh
bGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
dW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1
bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvZ3JhbUVudHJ5VGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjMwNjY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTIwMTEsOCArMjAxMSw4IEBAIG1hY3JvIGRvQ2FsbChzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9m
ZnNldFt0M10KICAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQogICAg
IG1vdmUgdDMsIHNwCi0gICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVD
b2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJbnRDYWxsSUNQdHJUYWcpCi0gICAgY2FsbFRh
cmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIExM
SW50Q2FsbElDUHRyVGFnKQorICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNo
aW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCisgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIEpT
RW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93OgogICAgIHNsb3dQYXRoRm9yQ2FsbChzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwoZW50
cnksIHRlbXApCiAgICAgaWYgQ19MT09QCiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50
cnkKICAgICBlbHNlCi0gICAgICAgIGNhbGwgZW50cnksIENvZGVQdHJUYWcKKyAgICAgICAgY2Fs
bCBlbnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZAogICAgIHN1YnAgMTYsIHNwCiBlbmQKQEAg
LTI3MCwxMCArMjcwLDEwIEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1w
KQogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBXZSBuZWVkIHRvIGFsbG9jYXRlIDMy
IGJ5dGVzIG9uIHRoZSBzdGFjayBmb3IgdGhlIHNoYWRvdyBzcGFjZS4KICAgICAgICAgc3VicCAz
Miwgc3AKLSAgICAgICAgY2FsbCB0ZW1wLCBDb2RlUHRyVGFnCisgICAgICAgIGNhbGwgdGVtcCwg
SlNFbnRyeVB0clRhZwogICAgICAgICBhZGRwIDMyLCBzcAogICAgIGVsc2UKLSAgICAgICAgY2Fs
bCB0ZW1wLCBDb2RlUHRyVGFnCisgICAgICAgIGNhbGwgdGVtcCwgSlNFbnRyeVB0clRhZwogICAg
IGVuZAogZW5kCiAKQEAgLTM3MCw3ICszNzAsNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9y
TG9vcCgpCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAg
YnRweiByMCwgLnJlY292ZXIKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCi0gICAgICAgICAgICBq
bXAgcjAsIENvZGVQdHJUYWcKKyAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAg
ICAgICAucmVjb3ZlcjoKICAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZz
ZXRbY2ZyXSwgUEMKICAgICAgICAgZW5kKQpAQCAtMjA1NiwxMSArMjA1NiwxMSBAQCBtYWNybyBk
b0NhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIGlmIFBPSVNPTgogICAgICAgICBsb2Fk
cCBfZ19KSVRDb2RlUG9pc29uLCB0MgogICAgICAgICB4b3JwIExMSW50Q2FsbExpbmtJbmZvOjpt
YWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyCi0gICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MSwgdDMs
IHQ0LCBMTEludENhbGxJQ1B0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHQyLCBM
TEludENhbGxJQ1B0clRhZykKKyAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQxLCB0MywgdDQsIEpT
RW50cnlQdHJUYWcpCisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MiwgSlNFbnRyeVB0clRh
ZykKICAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNo
aW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQotICAgICAg
ICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0
W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCisgICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExp
bmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcp
CisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNv
ZGVUYXJnZXRbdDFdLCBKU0VudHJ5UHRyVGFnKQogICAgIGVuZAogCiAub3BDYWxsU2xvdzoKQEAg
LTIxOTEsMTIgKzIxOTEsMTIgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJs
ZU9mZgogICAgIGVsc2UKICAgICAgICAgaWYgWDg2XzY0X1dJTgogICAgICAgICAgICAgc3VicCAz
Miwgc3AKLSAgICAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBD
b2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3Qx
XSwgSlNFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwgc3AKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwgdDIKICAgICAgICAgICAgIHhv
cnAgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCB0MgotICAgICAgICAgICAgY2FsbCB0
MiwgQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCB0MiwgSlNFbnRyeVB0clRhZwogICAgICAg
ICBlbmQKICAgICBlbmQKIApAQCAtMjIzNCwxMiArMjIzNCwxMiBAQCBtYWNybyBpbnRlcm5hbEZ1
bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRfV0lO
CiAgICAgICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0
aW9uW3QxXSwgQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3Qx
XSwgSlNFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwgc3AKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwgdDIKICAgICAgICAgICAgIHhv
cnAgb2Zmc2V0T2ZGdW5jdGlvblt0MV0sIHQyCi0gICAgICAgICAgICBjYWxsIHQyLCBDb2RlUHRy
VGFnCisgICAgICAgICAgICBjYWxsIHQyLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGVuZAogICAg
IGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI2
Miw5ICsyNjIsOCBAQCBjb25zdCBBcml0aFByb2ZpbGVJbnROdW1iZXIgPSAweDUwMDAwMAogCiAj
IFBvaW50ZXIgVGFncwogY29uc3QgQnl0ZWNvZGVQdHJUYWcgPSBjb25zdGV4cHIgQnl0ZWNvZGVQ
dHJUYWcKLWNvbnN0IENvZGVQdHJUYWcgPSBjb25zdGV4cHIgQ29kZVB0clRhZworY29uc3QgSlNF
bnRyeVB0clRhZyA9IGNvbnN0ZXhwciBKU0VudHJ5UHRyVGFnCiBjb25zdCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnID0gY29uc3RleHByIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLWNvbnN0IExMSW50
Q2FsbElDUHRyVGFnID0gY29uc3RleHByIExMSW50Q2FsbElDUHRyVGFnCiBjb25zdCBOb1B0clRh
ZyA9IGNvbnN0ZXhwciBOb1B0clRhZwogY29uc3QgU2xvd1BhdGhQdHJUYWcgPSBjb25zdGV4cHIg
U2xvd1BhdGhQdHJUYWcKIApAQCAtMTAzNyw3ICsxMDM2LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29k
ZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3AgY2Zy
CiAgICAgICAgIGVuZAotICAgICAgICBqbXAgcjAsIENvZGVQdHJUYWcKKyAgICAgICAgam1wIHIw
LCBKU0VudHJ5UHRyVGFnCiAgICAgLnJlY292ZXI6CiAgICAgICAgIGNvZGVCbG9ja0dldHRlcih0
MSwgdDIpCiAgICAgLmNvbnRpbnVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjMwNjY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBFeGVjdXRpb25Db3Vu
dGVyKiBDb21waWxhdGlvbjo6ZXhlY3V0aW9uCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0KCk7CiB9
CiAKLXZvaWQgQ29tcGlsYXRpb246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rvcjxjb25zdCB2
b2lkKj4mIGNvZGVBZGRyZXNzZXMpCit2b2lkIENvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZShj
b25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29k
ZUFkZHJlc3NlcykKIHsKICAgICBtX29zckV4aXRTaXRlcy5hcHBlbmQoT1NSRXhpdFNpdGUoY29k
ZUFkZHJlc3NlcykpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGREZXNj
cmlwdGlvbihjb25zdCBDb21waWxlZEJ5dGVjb2RlJik7CiAgICAgdm9pZCBhZGREZXNjcmlwdGlv
bihjb25zdCBPcmlnaW5TdGFjayYsIGNvbnN0IENTdHJpbmcmIGRlc2NyaXB0aW9uKTsKICAgICBF
eGVjdXRpb25Db3VudGVyKiBleGVjdXRpb25Db3VudGVyRm9yKGNvbnN0IE9yaWdpblN0YWNrJik7
Ci0gICAgdm9pZCBhZGRPU1JFeGl0U2l0ZShjb25zdCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBjb2Rl
QWRkcmVzc2VzKTsKKyAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsKICAgICBP
U1JFeGl0KiBhZGRPU1JFeGl0KHVuc2lnbmVkIGlkLCBjb25zdCBPcmlnaW5TdGFjayYsIEV4aXRL
aW5kLCBib29sIGlzV2F0Y2hwb2ludCk7CiAgICAgCiAgICAgdm9pZCBzZXRKZXR0aXNvblJlYXNv
bihKZXR0aXNvblJlYXNvbiwgY29uc3QgRmlyZURldGFpbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAko
cmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgSlNW
YWx1ZSBPU1JFeGl0U2l0ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIEpTQXJyYXkqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQWRkcmVz
c2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0p
KSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3RyaW5nKGV4
ZWMsIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ldLmRhdGFMb2NhdGlvbigp
KSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXRTaXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwyMyArMjYsMjQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAKIGNs
YXNzIE9TUkV4aXRTaXRlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPU1JFeGl0U2l0ZShjb25z
dCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBjb2RlQWRkcmVzc2VzKQorICAgIGV4cGxpY2l0IE9TUkV4
aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4+JiBjb2RlQWRkcmVzc2VzKQogICAgICAgICA6IG1fY29kZUFkZHJlc3Nlcyhjb2RlQWRkcmVz
c2VzKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmVjdG9yPGNvbnN0IHZvaWQqPiYg
Y29kZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KKyAgICBjb25z
dCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFk
ZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KICAgICAKICAgICBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPGNvbnN0
IHZvaWQqPiBtX2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0ludGVybmFsUHRyVGFnPj4gbV9jb2RlQWRkcmVzc2VzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OlByb2ZpbGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNs
ZWFyQ29kZSgpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0
cjsKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBudWxscHRyOwotICAgIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7
CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKICNlbmRpZgog
ICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7
CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NP
TVBJTEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGlu
bGluZSBib29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW4KIAogY2xhc3MgRXhlY3V0YWJs
ZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwotICAgIGZyaWVu
ZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJh
dG9yKFZNKik7CisgICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgaW50IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QgPSAwOwpAQCAt
MTQzLDggKzE0Myw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7
CiAgICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50Rm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01vZGUgYXJpdHkpCisKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogICAgIHsKICAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBm
b3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8vIG5vLWFyaXR5IGVu
dHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZh
bHVlIGRpcmVjdGx5IGluCkBAIC0xNTIsMTcgKzE1MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7
CiAgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAgICAgIGlmIChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KQorICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sp
CisgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiByZXN1bHQgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0
ID0KLSAgICAgICAgICAgIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxs
KGFyaXR5KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJl
c3VsdCA9IGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKGFyaXR5KTsK
ICAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CiAgICAgICAgICAgICAvLyBD
YWNoZSB0aGUgcmVzdWx0OyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIEpJVCdzIHZpcnR1YWwg
Y2FsbCBvcHRpbWl6YXRpb25zLgogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0yMzIs
OCArMjMxLDggQEAgcHJvdGVjdGVkOgogICAgIEludHJpbnNpYyBtX2ludHJpbnNpYzsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ2FsbDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlRm9yQ29uc3RydWN0OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2s7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2NywxMCBAQCB2b2lkIE5hdGl2ZUV4ZWN1
dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2sgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVj
a0FyaXR5KTsKICAgICBtX25hbWUgPSBuYW1lOwogCi0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1f
aml0Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1f
aml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVk
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCksIENv
ZGVQdHJUYWcpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVj
a05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChB
cml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcp
OworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2su
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRh
YmxlKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNp
Z25hdHVyZSogc2lnbmF0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TmF0aXZlRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVGdW5jdGlvbi5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwx
MCArNzAsMTAgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKGlu
dHB0cl90IGJpdHMpIDogbV9wdHIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXRzKSkgeyB9CiAKICAg
ICBUYWdnZWROYXRpdmVGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jKQotICAgICAgICA6IG1f
cHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYy5tX3B0ciwgQ29kZVB0clRhZykpCisgICAg
ICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5UHRyVGFnPihmdW5jLm1f
cHRyKSkKICAgICB7IH0KICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbihSYXdOYXRpdmVGdW5jdGlv
biBmdW5jKQotICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQ29k
ZVB0clRhZykpCisgICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5
UHRyVGFnPihmdW5jKSkKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fcHRyOyB9CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBOYXRpdmVGdW5jdGlvbigpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9wdHIpOwotICAgICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24+
KG1fcHRyLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPE5h
dGl2ZUZ1bmN0aW9uLCBKU0VudHJ5UHRyVGFnPihtX3B0cik7CiAgICAgfQogCiAgICAgdm9pZCog
cmF3UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDUyICszMSwy
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBGT1JfRUFDSF9QVFJUQUdfRU5VTSh2KSBc
CiAgICAgdihOb1B0clRhZykgXAotICAgIHYoTmVhckNvZGVQdHJUYWcpIFwKICAgICB2KENGdW5j
dGlvblB0clRhZykgXAogICAgIFwKLSAgICB2KEFyaXR5Rml4dXBQdHJUYWcpIFwKICAgICB2KEIz
Q0NhbGxQdHJUYWcpIFwKKyAgICB2KEIzQ29tcGlsYXRpb25QdHJUYWcpIFwKICAgICB2KEJ5dGVj
b2RlUHRyVGFnKSBcCi0gICAgdihCeXRlY29kZUhlbHBlclB0clRhZykgXAotICAgIHYoQ29kZVB0
clRhZykgXAotICAgIHYoREZHT1NSRW50cnlQdHJUYWcpIFwKLSAgICB2KERGR09TUkV4aXRQdHJU
YWcpIFwKLSAgICB2KERGR09wZXJhdGlvblB0clRhZykgXAorICAgIHYoRGlzYXNzZW1ibHlQdHJU
YWcpIFwKICAgICB2KEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpIFwKLSAgICB2KEZUTENvZGVQdHJU
YWcpIFwKLSAgICB2KEZUTExhenlTbG93UGF0aFB0clRhZykgXAotICAgIHYoRlRMT1NSRXhpdFB0
clRhZykgXAotICAgIHYoRlRMT3BlcmF0aW9uUHRyVGFnKSBcCi0gICAgdihGVExTbG93UGF0aFB0
clRhZykgXAotICAgIHYoR2V0UHJvcGVydHlQdHJUYWcpIFwKLSAgICB2KEdldHRlclNldHRlclB0
clRhZykgXAotICAgIHYoSGFzUHJvcGVydHlQdHJUYWcpIFwKLSAgICB2KEpJVENvZGVQdHJUYWcp
IFwKLSAgICB2KEpJVE9wZXJhdGlvblB0clRhZykgXAogICAgIHYoSklUVGh1bmtQdHJUYWcpIFwK
LSAgICB2KEpJVFdyaXRlVGh1bmtQdHJUYWcpIFwKLSAgICB2KExMSW50Q2FsbElDUHRyVGFnKSBc
Ci0gICAgdihMaW5rQ2FsbFB0clRhZykgXAotICAgIHYoTGlua0NhbGxSZXN1bHRQdHJUYWcpIFwK
LSAgICB2KExpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcpIFwKLSAgICB2KExpbmtQb2x5bW9ycGhp
Y0NhbGxSZXN1bHRQdHJUYWcpIFwKLSAgICB2KExpbmtWaXJ0dWFsQ2FsbFB0clRhZykgXAotICAg
IHYoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnKSBcCi0gICAgdihNYXRoSUNQdHJUYWcpIFwK
LSAgICB2KE5hdGl2ZUNvZGVQdHJUYWcpIFwKLSAgICB2KFB1dFByb3BlcnR5UHRyVGFnKSBcCisg
ICAgdihKSVRTdHViUm91dGluZVB0clRhZykgXAorICAgIHYoSlNFbnRyeVB0clRhZykgXAorICAg
IHYoSlNJbnRlcm5hbFB0clRhZykgXAorICAgIHYoSlNTd2l0Y2hQdHJUYWcpIFwKKyAgICB2KExp
bmtCdWZmZXJQdHJUYWcpIFwKKyAgICB2KE9wZXJhdGlvblB0clRhZykgXAorICAgIHYoT1NSRXhp
dFB0clRhZykgXAogICAgIHYoU2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KFNwZWNpYWxpemVkVGh1
bmtQdHJUYWcpIFwKLSAgICB2KFN3aXRjaFRhYmxlUHRyVGFnKSBcCi0gICAgdihUaHJvd0V4Y2Vw
dGlvblB0clRhZykgXAorICAgIHYoV2FzbUVudHJ5UHRyVGFnKSBcCiAgICAgdihZYXJyOEJpdFB0
clRhZykgXAogICAgIHYoWWFycjE2Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5OEJp
dFB0clRhZykgXAogICAgIHYoWWFyck1hdGNoT25seTE2Qml0UHRyVGFnKSBcCiAgICAgdihZYXJy
QmFja3RyYWNrUHRyVGFnKSBcCi0gICAgdihXYXNtQ2FsbFB0clRhZykgXAotICAgIHYoV2FzbUhl
bHBlclB0clRhZykgXAotCiAKIGVudW0gUHRyVGFnIDogdWludHB0cl90IHsKICNkZWZpbmUgREVD
TEFSRV9QVFJUQUdfRU5VTSh0YWcpICB0YWcsCkBAIC04NSw4ICs2MSw3IEBAIGVudW0gUHRyVGFn
IDogdWludHB0cl90IHsKIH07CiAKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90
PihOb1B0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSwgIiIpOwotc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5lYXJDb2RlUHRyVGFnKSA9PSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oQ0Z1bmN0aW9uUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpLCAiIik7Citz
dGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0Z1bmN0aW9uUHRyVGFnKSA9PSBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpLCAiIik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCiB7CkBAIC05OCwxMCArNzMsNyBAQCBpbmxpbmUgY29uc3QgY2hh
ciogcHRyVGFnTmFtZShQdHJUYWcgdGFnCiAjdW5kZWYgUkVUVVJOX1BUUlRBR19OQU1FCiB9CiAK
LXVpbnRwdHJfdCBuZXh0UHRyVGFnSUQoKTsKLQogI2lmICFVU0UoUE9JTlRFUl9QUk9GSUxJTkcp
Ci1pbmxpbmUgdWludHB0cl90IG5leHRQdHJUYWdJRCgpIHsgcmV0dXJuIDA7IH0KIAogaW5saW5l
IGNvbnN0IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKikgeyByZXR1cm4gIjxubyB0YWc+Ijsg
fQogCkBAIC0xMTEsMjEgKzgzLDM5IEBAIGlubGluZSBjb25zdGV4cHIgUHRyVGFnIHB0clRhZyhB
cmd1bWVudHMKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFz
dGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCB0YWdD
b2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFQgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQ+KHB0cik7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNv
bnN0ZXhwciBQdHJUeXBlIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4g
cHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5l
IFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwg
UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCB1bnRhZ0NvZGVQdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1
bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpICB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsg
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFB0
clR5cGUgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQog
Cit0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBl
IHVudGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlw
ZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIs
IFB0clRhZywgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+Pgor
aW5saW5lIFQgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29u
c3RleHByIFB0clR5cGUgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcsIFB0clRhZykg
eyByZXR1cm4gcHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgUHRyVGFnLCB0eXBlbmFtZSBQdHJU
eXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+
Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0
dXJuIHB0cjsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFQg
cmVtb3ZlQ29kZVB0clRhZyhQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0
cik7IH0KIApAQCAtMTM1LDE1ICsxMjUsMjcgQEAgaW5saW5lIGNvbnN0ZXhwciBQdHJUeXBlIHJl
bW92ZUNvZGVQdHJUYQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFQgdGFnQ0Z1bmN0
aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFQgdGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxp
bmUgUHRyVHlwZSB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4g
cHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5l
IFB0clR5cGUgdGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KKwog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFQgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1
bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0
cik7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFB0clR5cGUg
dW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gcHRyOyB9CiAK
K3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFB0clR5cGUg
dW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsgfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsg
fQogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cihQdHJUeXBlKSB7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzSW5pdGlhbGl6YXRpb24oaXNJbml0
aWFsaXphdGlvbikKICAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAgICAgLCBtX2Nh
Y2hlYWJpbGl0eShDYWNoaW5nQWxsb3dlZCkKLSAgICAgICAgLCBtX3B1dEZ1bmN0aW9uKG51bGxw
dHIpCiAgICAgewogICAgIH0KIApAQCAtNjcsMTcgKzY2LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
bV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b21WYWx1ZShKU09i
amVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQorICAgIHZvaWQgc2V0Q3VzdG9tVmFs
dWUoSlNPYmplY3QqIGJhc2UsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgewotICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihmdW5jdGlvbik7CiAg
ICAgICAgIG1fdHlwZSA9IEN1c3RvbVZhbHVlOwogICAgICAgICBtX2Jhc2UgPSBiYXNlOwogICAg
ICAgICBtX3B1dEZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0
b21BY2Nlc3NvcihKU09iamVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQorICAgIHZv
aWQgc2V0Q3VzdG9tQWNjZXNzb3IoSlNPYmplY3QqIGJhc2UsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgewotICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cihmdW5jdGlvbik7CiAgICAgICAgIG1fdHlwZSA9IEN1c3RvbUFjY2Vzc29yOwogICAgICAg
ICBtX2Jhc2UgPSBiYXNlOwogICAgICAgICBtX3B1dEZ1bmN0aW9uID0gZnVuY3Rpb247CkBAIC0x
MDAsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNTdHJpY3RNb2RlID0gdmFsdWU7CiAg
ICAgfQogCi0gICAgUHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwogICAgICAgICByZXR1cm4gbV9wdXRGdW5j
dGlvbjsKQEAgLTE0MCw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luaXRpYWxp
emF0aW9uOwogICAgIHVpbnQ4X3QgbV9jb250ZXh0OwogICAgIENhY2hlYWJpbGl0eVR5cGUgbV9j
YWNoZWFiaWxpdHk7Ci0gICAgUHV0VmFsdWVGdW5jIG1fcHV0RnVuY3Rpb247CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBtX3B1dEZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3Jp
cHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzcsMTIgKzEzNywxMiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omlu
c3RhbGxDb2RlKFZNJiB2CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2sgPyBnZW5lcmlj
Q29kZUJsb2NrLT5qaXRDb2RlKCkgOiBudWxscHRyOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbnVsbHB0cjsKICAgICAgICAgbV9udW1QYXJhbWV0
ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2sgPyBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgOiBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51bGxw
dHI7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrID0gbnVsbHB0cjsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
Z2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA6IE5V
TV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODIs
MjMgKzY4MiwyMyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hCiAg
ICAgVU5VU0VEX1BBUkFNKGludHJpbnNpYyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICBy
ZXR1cm4gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCp0aGlzLAotICAgICAgICBhZG9wdFJlZigq
bmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVS
ZWYobGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KSwgZnVuY3Rpb24sCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9uYXRpdmVfY29uc3RydWN0
X3RyYW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGNvbnN0cnVjdG9yLAorICAg
ICAgICBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTExJbnQ6OmdldENvZGVSZWY8SlNFbnRy
eVB0clRhZz4obGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxs
VGh1bmspKSwgZnVuY3Rpb24sCisgICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShM
TEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9uYXRpdmVfY29uc3RydWN0X3Ry
YW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGNvbnN0cnVjdG9yLAogICAgICAg
ICBOb0ludHJpbnNpYywgc2lnbmF0dXJlLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06
OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChjYW5Vc2VKSVQoKSkgewogICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcyk7Ci0gICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVy
biBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcykucmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKTsKKyAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0KHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgfQogI2VuZGlm
CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9j
YWxsX3RyYW1wb2xpbmUpOwotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUxMSW50Q29kZVB0cihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGlu
ZSk7CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUpOworICAgIHJldHVybiBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZSk7CiB9CiAKIFZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0NCw3ICs1
NDQsNyBAQCBwdWJsaWM6CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJM
RShKSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgewogICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0
aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICB9CkBAIC01NTYsNyArNTU2LDcgQEAgcHVibGlj
OgogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMs
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNv
bnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0Q1RJSW50
ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIzMDY2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM3LDcgKzQzNyw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWwKICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIGZwKSk7CiAgICAgICAgICAg
ICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywg
c2NyYXRjaDEsIHNjcmF0Y2gyKSk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtv
dmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1
ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVy
ZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRz
IHRvIGJlIGNvcnJlY3QuCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0RXhjZXB0aW9uQ2hlY2soQwogICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5q
dW1wKCk7CiAKICAgICBqaXQuYWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNl
cHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICB9KTsKIH0KIApAQCAtOTM3LDcgKzkzNyw3
IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQKICAgICAgICAgICAg
IGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwp
LCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1Rp
ZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPE5vUHRy
VGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2lu
Z2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CkBAIC0xMTEyLDcgKzExMTIsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1
bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5
UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTExMjgsNyArMTEyOCw2
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZVBvaXNvbmluZygpKQogICAgICAgICAgICAganVtcERlc3RpbmF0aW9uID0g
aXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4o
KSwganVtcERlc3RpbmF0aW9uLCBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOwogCi0gICAgICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAg
ICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigp
LnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNU
eXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CkBAIC0xMTM4LDkgKzExMzcsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlLCBjYWxsVGFnXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBjYWxsVGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5n
cHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICBVcHNpbG9uVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24gPSBy
ZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8
VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBlbWJlZGRlckNhbGxSZXN1bHQpOwpAQCAt
MTE2OCw3ICsxMTY3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bgogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CkBAIC0xMzEwLDcgKzEzMDksNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zCiAgICAgICAgIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGNhbGxlZUNvZGUsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQ
b2lzb24pKTsKIAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7
Ci0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5o
YXNoKCkpOwogICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbCht
X3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlw
ZSksCiAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMzI1LDcg
KzEzMjMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09
IFZvaWQgPyAwIDogMV0uZ3ByKCksIGNhbGxUYWcpOworICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc0LDEwICsxNzQsOCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogICAgICAgICBpZiAoaW1w
b3J0LT5raW5kICE9IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5zaXplKCk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9y
dEZ1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBkYXRhTG9n
TG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVu
Y3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIG1ha2VTdHJpbmcoaW1w
b3J0LT5tb2R1bGUpLCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+ZmllbGQpKTsKLSAgICAgICAg
YXV0byBiaW5kaW5nID0gd2FzbVRvV2FzbShzaWduYXR1cmUsIGltcG9ydEZ1bmN0aW9uSW5kZXgp
OworICAgICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KGJpbmRpbmcuZXJyb3IoKSkgewogICAgICAgICAgICAgY2FzZSBCaW5kaW5nRmFpbHVyZTo6T3V0
T2ZNZW1vcnk6CkBAIC0zMDMsNyArMzAxLDYgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvYwogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0g
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0
clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CkBAIC0zMTIsNyArMzA5LDcgQEAgdm9p
ZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRp
b24+KAotICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIGNhbGxU
YWcsICJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1
cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IGZ1
bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQogCkBAIC0zMjQsMjMgKzMyMSwyMCBA
QCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+
KAotICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIENvZGVQdHJU
YWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbklu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgICAgICAg
ICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVt
YmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAg
V1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxp
bmtlZCkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBleGVjdXRhYmxl
QWRkcmVzczsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcg
YSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxF
QVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2
MgogICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpOwotICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJU
YWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1
dGFibGVBZGRyZXNzLnJldGFnZ2VkKG9sZFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
YXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8
V2FzbUVudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRy
eVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2
aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwogICAgIH0KIAotICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKQorICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mJiB0YWtlV2FzbVRvV2FzbUV4
aXRTdHVicygpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhh
c1dvcmsoKSk7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fd2FzbVRvV2FzbUV4aXRTdHVicyk7
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBzdGF0ZVN0cmlu
ZyhTdGF0ZSk7CiAgICAgCiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwot
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsK
KyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2Fz
bVRvV2FzbUV4aXRTdHViczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBIYXNoU2V0PHVpbnQzMl90LCB0
eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzOwogICAg
IEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgdHlw
ZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25z
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2
aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKIHVzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKIAotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbShjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCitFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVuaXF1
aWZ5IHRoZSBzdHVicyBiYXNlZCBvbiBzaWduYXR1cmUgKyBpbmRleCB0byBzZWUgaWYgdGhpcyBz
YXZlcyBtZW1vcnkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NDE1NwpAQCAtODAsMTQgKzgwLDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgQmluZGluZ0YKICAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKICAgICBp
ZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCiAgICAgICAgIGppdC54b3JQdHIoSklUOjpUcnVz
dGVkSW1tUHRyKGdfSklUQ29kZVBvaXNvbiksIHNjcmF0Y2gpOwotICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgIGppdC5qdW1wKHNj
cmF0Y2gsIHRhZyk7CisgICAgaml0Lmp1bXAoc2NyYXRjaCwgV2FzbUVudHJ5UHRyVGFnKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0
YWcsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAi
V2ViQXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
ZW51bSBjbGFzcyBCaW5kaW5nRmFpbHVyZSB7CiAgICAgT3V0T2ZNZW1vcnksCiB9OwogCi1FeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKGNv
bnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2Fz
bSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJldmlzaW9uIDIz
MDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqY2FsbGVlKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpOyB9Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdh
c21FbnRyeVB0clRhZz4oKTsgfQogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhP
ck5hbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4
NSw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6
ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9Ci0gICAgdm9pZCBzZXR1cEZyYW1lSW5Q
cm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6
OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1
cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNp
emVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5v
dy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
aXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBu
b3cuIik7CkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21F
bnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBlbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qIGVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKQEAgLTEyMywxMCArMTIzLDEwIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CiAgICAgVmVjdG9yPFJlZlB0
cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVz
OwotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IG1fd2FzbUluZGlyZWN0Q2FsbEVu
dHJ5UG9pbnRzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CiAgICAgVmVjdG9yPFRpZXJVcENv
dW50PiBtX3RpZXJVcENvdW50czsKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJl
ZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlv
bkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcg
QEAgc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihTaWduYWwsIAogICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwg
ImZ1bmN0aW9uIHN0YXJ0OiAiLCBSYXdQb2ludGVyKHN0YXJ0KSwgIiBlbmQ6ICIsIFJhd1BvaW50
ZXIoZW5kKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rp
b24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IGVuZCkgewogICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZihXYXNtRmF1bHRTaWduYWxIYW5kbGVySW50ZXJuYWw6OnZlcmJvc2UsICJmb3Vu
ZCBtYXRjaCIpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhj
ZXB0aW9uU3R1YiA9IFRodW5rczo6c2luZ2xldG9uKCkuZXhpc3RpbmdTdHViKHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhjZXB0aW9uU3R1YiA9IFRodW5rczo6c2lu
Z2xldG9uKCkuZXhpc3RpbmdTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRv
cik7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGZvciB3aGF0ZXZlciByZWFzb24gd2UgZG9u
J3QgaGF2ZSBhIHN0dWIgdGhlbiB3ZSBzaG91bGQganVzdCB0cmVhdCB0aGlzIGxpa2UgYSByZWd1
bGFyIGNyYXNoLgogICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblN0dWIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1Niw3ICsyNTYsNyBAQCBp
bmxpbmUgYm9vbCBpc1ZhbGlkTmFtZVR5cGUoSW50IHZhbCkKIH0KIAogc3RydWN0IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGwgewotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbjsK
KyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsK
ICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlOwogfTsKIApAQCAtMjY2LDcgKzI2Niw3IEBA
IHN0cnVjdCBFbnRyeXBvaW50IHsKIH07CiAKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uOworICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsK
ICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCkBAIC0yNzQsNyArMjc0LDcgQEAgc3Ry
dWN0IEludGVybmFsRnVuY3Rpb24gewogLy8gd2l0aCBhbGwgaW1wb3J0cywgYW5kIHRoZW4gYWxs
IGludGVybmFsIGZ1bmN0aW9ucy4gV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBhbmQgRnVu
Y3Rpb25JbmRleFNwYWNlIGFyZSBvbmx5CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMg
Zm9yIHRoZXNlIG9wY29kZXMgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIHsKLSAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIqOworICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+KjsKICNpZiAhQ09NUElMRVJfU1VQUE9SVFMoTlNETUlfRk9S
X0FHR1JFR0FURVMpCiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpID0gZGVmYXVs
dDsKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4LCBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCShyZXZpc2lvbiAyMzA2Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3Rh
bmNlIGFuZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5k
IGFyZSBvdGhlcndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3Vy
cyB0aHJvdWdoIGltcG9ydCBmdW5jdGlvbi4KICAgICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3Rh
bmNlIHsgbnVsbHB0ciB9OwogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxscHRyIH07Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3YXNtVG9FbWJlZGRlclN0dWI7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsK
ICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1i
ZWRkaW5nLCB0aGlzIGlzIGEgUG9pc29uZWRCYXJyaWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAg
IHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0
RnVuY3Rpb25zOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE0ICs5NywxMyBAQCB2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhh
c2goKSk7CiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBjYWxs
VGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1fZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVu
Y3Rpb25bJWldICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1v
dmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludDsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tG
b3IobW9kZSgpKSk7CiAgICAgICAgIFJlZjxDYWxsZWU+IGNhbGxlZSA9IENhbGxlZTo6Y3JlYXRl
KFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKQEAgLTEyMCwx
NiArMTE5LDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAg
ICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gV1RG
TW92ZShjYWxsZWUpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkQ2FsbHMp
IHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50OworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
ICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZV0uY29kZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCk7CisgICAg
ICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9p
bnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CiAKLSAgICAgICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRyVGFn
KFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKGVudHJ5cG9pbnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAg
ICB9CiAgICAgICAgIHVubGlua2VkQ2FsbHMgPSBzdGQ6OmV4Y2hhbmdlKG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21DYWxsc2l0ZXNbbV9mdW5jdGlvbkluZGV4XSwgdW5saW5rZWRDYWxscyk7CiAg
ICAgfQpAQCAtMTQ5LDEwICsxNDUsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihj
YWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwu
ZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwg
YXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRv
ICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2ln
bmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGVudHJ5cG9p
bnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExv
Y2tlciYpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIApAQCAtNTIsMTkgKzUyLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAot
ICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwog
ICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAogICAg
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24gPSBUaHVua3M6OnNpbmdsZXRv
bigpLnRocm93V2FzbUV4Y2VwdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIodGhyb3dXYXNtRXhjZXB0
aW9uLCB0YWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29k
ZVB0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKKyAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHJvd1dhc21FeGNlcHRpb24p
KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhy
b3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTc0LDExICs3MywxMSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93CiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEV4Y2VwdGlv
blR5cGU6OlN0YWNrT3ZlcmZsb3cpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBhdXRv
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuanVtcCgpOwogICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCku
c3R1Yihsb2NrZXIsIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcs
ICJUaHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsKKyAgICBsaW5rQnVmZmVyLmxpbmso
anVtcFRvRXhjZXB0aW9uSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+
KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yihsb2NrZXIsIHRocm93RXhjZXB0aW9uRnJvbVdhc21U
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cihjb25zdCBBYnN0cmFjdExvY2tlciYpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYpCiB7CiAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcHV0IHRo
ZSBmdW5jdGlvbiBpbmRleCBpbnRvIEdQUkluZm86OmFyZ3VtZW50R1BSMQogICAgIENDYWxsSGVs
cGVycyBqaXQ7CkBAIC05MywxNiArOTIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdn
ZXJPTUdUaWVyVXBUaAogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSW5zdGFuY2UqLCB1aW50MzJf
dCk7CiAgICAgUnVuIHJ1biA9IE9NR1BsYW46OnJ1bkZvckluZGV4OwotICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihydW4sIHRhZykp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5jYWxsKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgdGFnKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIsIE9wZXJhdGlvblB0clRh
Zyk7CiAKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVy
T2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRl
cyk7CiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlRyaWdnZXIgT01H
IHRpZXIgdXAiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIlRyaWdnZXIgT01HIHRpZXIgdXAiKTsKIH0KIAogc3RhdGljIFRodW5rcyogdGh1
bmtzOwpAQCAtMTMwLDI4ICsxMjgsMjggQEAgVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5rczo6dGhy
b3dXYXNtRXhjZQogICAgIHJldHVybiBtX3Rocm93V2FzbUV4Y2VwdGlvbjsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIFRodW5rczo6c3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IFRodW5rczo6c3R1YihUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgIHJldHVybiBzdHViKGxvY2tlciwgZ2VuZXJhdG9yKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIFRodW5rczo6c3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IFRodW5rczo6c3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiB7CiAgICAgQVNTRVJUKCEhZ2VuZXJhdG9yKTsKICAgICB7Ci0gICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHVicy5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHVicy5hZGQoZ2VuZXJh
dG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAgICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUg
PSBnZW5lcmF0b3IobG9ja2VyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGUgPSBnZW5lcmF0b3IobG9ja2VyKTsKICAgICAvLyBXZSBzcGVjaWZpY2FsbHkg
ZG9uJ3QgdXNlIHRoZSBpdGVyYXRvciBoZXJlIHRvIGFsbG93IGdlbmVyYXRvciB0byByZWN1cnNp
dmVseSBjaGFuZ2UgbV9zdHVicy4KICAgICBtX3N0dWJzLnNldChnZW5lcmF0b3IsIGNvZGUpOwog
ICAgIHJldHVybiBjb2RlOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpleGlz
dGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBUaHVua3M6OmV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogCkBAIC0xNTks
NyArMTU3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFRodW5rczo6ZXhpc3RpbmdTdAogICAg
IGlmIChpdGVyICE9IG1fc3R1YnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
IAotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAko
cmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9t
V2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBB
YnN0cmFjdExvY2tlciYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdnZXJPTUdUaWVyVXBU
aHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3Io
Y29uc3QgQWJzdHJhY3RMb2NrZXImKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0
cmFjdExvY2tlciYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cmln
Z2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKIAotdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKTsKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiAoKlRodW5rR2VuZXJhdG9yKShjb25zdCBBYnN0cmFjdExvY2tlciYpOwogCiBjbGFzcyBUaHVu
a3MgewogcHVibGljOgpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRo
cm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViKFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25z
dCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYs
IFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvcik7CiAKIHByaXZhdGU6CiAgICAgVGh1bmtz
KCkgPSBkZWZhdWx0OwogCi0gICAgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPiBtX3N0dWJzOworICAgIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IG1fc3R1YnM7CiAgICAgVGhyb3dXYXNtRXhj
ZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2Nr
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlCiAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVl
TW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92
ZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+
KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgKmxp
bmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9u
KTsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2Fz
bUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOwogICAgIH0pOwogCiAgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCAr
IGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+
YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSB9KTsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSB9KTsKICAgICB9KTsKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lv
biAyMzA2NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAg
ICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQo
KTsgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3YXNtVG9FbWJlZGRlclN0dWIo
c2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2lt
cG9ydEZ1bmN0aW9uTnVtXS5jb2RlKCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVt
KSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEZ1bmN0aW9uTnVtXS5jb2RlKCk7
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtOTgsNyArOTgsNyBAQCBw
cml2YXRlOgogICAgIH07CiAKICAgICBQb2lzb25lZFJlZjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
UG9pc29uLCBXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwotICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CisgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwogICAg
IFBvaXNvbmVkVW5pcXVlUHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXI+IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24g
MjMwNjY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1w
b3J0SlNDZWxsKEpJVCYKICAgICBqaXQueG9yNjQocG9pc29uLCByZXN1bHQpOwogfQogCi1zdGF0
aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gaGFuZGxl
QmFkSTY0VXNlKFZNKiB2bSwgSklUJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1
bnNpZ25lZCBpbXBvcnRJbmRleCkKK3N0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IGhhbmRsZUJhZEk2NFVzZShWTSog
dm0sIEpJVCYgaml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQgaW1wb3J0
SW5kZXgpCiB7CiAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOwogCkBAIC05Myw4ICs5Myw3IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYsIEIKICAgICAgICAgLy8gTGV0J3MgYmUgcGFyYW5vaWQgb24gdGhlIGV4Y2VwdGlvbiBw
YXRoIGFuZCB6ZXJvIG91dCB0aGUgcG9pc29uIGluc3RlYWQgb2YgbGVhdmluZyBpdCBpbiBhbiBh
cmd1bWVudCBHUFIuCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogCi0gICAgICAgIFB0clRhZyBjYWxsVGFnID0g
cHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgYXV0byBj
YWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7
CiAKICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UpIC0+IHZvaWQgewpAQCAtMTE2LDE1ICsxMTUsMTQgQEAgc3RhdGljIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQgogICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd0JhZEk2NCwgY2FsbFRhZykpOwotICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkph
dmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHRocm93QmFkSTY0KSk7CisgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IFdhc21FbnRyeVB0clRhZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVz
ZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnlQdHJUYWc+KCk7CiB9CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNh
bGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCkKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+
LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2Fs
bExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9y
dEluZGV4KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVybHkg
YWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIEl0J2QgYmUgc3Vw
ZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTQwMQpAQCAtMzAyLDEyICszMDAsOSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYsIEJpbmRpbmdGCiAgICAgICAgIC8vIExldCdzIGJlIHBhcmFub2lkIGJlZm9yZSB0aGUgY2Fs
bCBhbmQgemVybyBvdXQgdGhlIHBvaXNvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgaW4gYW4gYXJn
dW1lbnQgR1BSLgogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigw
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKIAotICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0
clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIFB0clRhZyBk
b1Vud2luZGluZ1RhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
Ci0KICAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGNhbGxGdW5jKT4oR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoY2FsbFRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKIAogICAgICAg
ICAvLyBFeGNlcHRpb24gaGVyZS4KQEAgLTMxOSw3ICszMTQsNyBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBl
eGVjKTsKICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAg
ICAgIH07Ci0gICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKGRvVW53aW5kaW5n
VGFnKTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAg
ICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwpAQCAtMzQ0LDExICszMzksMTAgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICBpZiAoVU5MSUtFTFkobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjYWxsRnVuYywgY2FsbFRhZykpOwotICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZG9VbndpbmRpbmcsIGRv
VW53aW5kaW5nVGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGNhbGxGdW5jKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhl
eGNlcHRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGRvVW53aW5kaW5nKSk7
CiAKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJl
Lmhhc2goKSk7Ci0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHRhZywg
IldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKICAgICB9CiAKICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIHBl
cmZvcm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCkBAIC01NTAs
MTQgKzU0NCwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAg
ICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKGNvbnZlcnRUb0kzMik+KEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29udmVydFRvSTMyLCB0YWcpKTsKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNv
bnZlcnRUb0kzMikpOwogICAgICAgICB9KTsKIAogICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBA
IC01ODYsMTQgKzU3OSwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRp
bmdGCiAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAgICAgICBkb25lLmFwcGVuZChqaXQu
anVtcCgpKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvRjMyKT4oR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBleGNlcHRp
b25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0VG9GMzIsIHRhZykp
OworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4oY29udmVydFRvRjMyKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKQEAgLTYyMSwxNCArNjEzLDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgQmluZGluZ0YKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9GNjQpPihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKHRhZyk7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvbnZlcnRUb0Y2NCwg
dGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihjb252ZXJ0VG9GNjQpKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwpAQCAtNjQwLDExICs2MzEsMTAgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgIGppdC5yZXQoKTsKIAogICAgIGlmICghZXhjZXB0aW9u
Q2hlY2tzLmVtcHR5KCkpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVy
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZq
aXQpOwogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAg
ICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhl
YykgLT4gdm9pZCB7CkBAIC02NTUsNyArNjQ1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLCBCaW5kaW5nRgogICAgICAgICB9OwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihkb1Vud2luZGluZywgdGFnKSk7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihkb1Vud2luZGlu
ZykpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTY2MywxNSArNjUzLDEzIEBAIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBw
dHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxs
LCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpOworICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCk7CiAgICAgY2FsbExpbmtJbmZv
LT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQ
YXRoT3RoZXIpOwogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2ln
bmF0dXJlLmhhc2goKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRh
ZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKIH0KIAogdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgJKHJldmlzaW9uIDIz
MDY2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgSW5z
dGFuY2U7CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub0pTKFZNKiwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVy
ZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwgQmFn
PENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBp
bXBvcnRJbmRleCk7CiAKIHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdhc206
OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDY2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0
aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBhcml0eSkKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlD
aGVja01vZGUgYXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkgPT0gQXJpdHlDaGVja05v
dFJlcXVpcmVkKQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBvaW50OwpAQCAtODAsNyAr
ODAsNyBAQCBwcml2YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUg
YSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUg
TW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBh
Y3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fanNFbnRyeXBvaW50OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OwogICAgIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gbV9pbXBvcnRhYmxlRnVuY3Rpb247CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjMwNjY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCw3ICs2
MDQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICB2
b2lkIGxvYWRGcm9tRnJhbWVBbmRKdW1wKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewot
ICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24g
KiBzaXplb2Yodm9pZCopKSwgcHRyVGFnKFlhcnJCYWNrdHJhY2tQdHJUYWcsICZtX2NvZGVCbG9j
aykpOworICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9j
YXRpb24gKiBzaXplb2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRhZyk7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyh1bnNpZ25lZCBjYWxsRnJhbWVT
aXplKQpAQCAtOTI3LDExICs5MjcsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2Yg
Y29kZSBnZW5lcmF0aW9uIHRvIGxpbmsgYWxsIHJldHVybiBhZGRyZXNzZXMuCi0gICAgICAgIHZv
aWQgbGlua0RhdGFMYWJlbHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgWWFyckNvZGVCbG9jayYg
Y29kZUJsb2NrKQorICAgICAgICB2b2lkIGxpbmtEYXRhTGFiZWxzKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKG1fYmFja3RyYWNrUmVjb3Jk
c1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmFja3RyYWNrUmVjb3Jk
c1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uLCBwdHJUYWcoWWFyckJhY2t0cmFja1B0clRhZywgJmNv
ZGVCbG9jaykpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKG1fYmFja3RyYWNr
UmVjb3Jkc1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPFlhcnJCYWNrdHJh
Y2tQdHJUYWc+KG1fYmFja3RyYWNrUmVjb3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CiAg
ICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0zNTA4LDI0ICszNTA4LDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxz
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90cnlSZWFkVW5pY29k
ZUNoYXJhY3RlckVudHJ5LCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7
CiAKICAgICAgICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckNhbGxzKQogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckhlbHBlcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmtEYXRhTGFiZWxzKGxpbmtCdWZmZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CiAKICAgICAgICAg
aWYgKGNvbXBpbGVNb2RlID09IE1hdGNoT25seSkgewogICAgICAgICAgICAgaWYgKG1fY2hhclNp
emUgPT0gQ2hhcjgpCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlTWF0Y2hP
bmx5KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRy
VGFnLCAmY29kZUJsb2NrKSwgIk1hdGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIikp
OworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCAiTWF0Y2gtb25seSA4
LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1hdGNoT25seShGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIHB0clRhZyhZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiTWF0
Y2gtb25seSAxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikpOworICAgICAgICAgICAgICAgIGNv
ZGVCbG9jay5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBZ
YXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsICJNYXRjaC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJl
c3Npb24iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9
PSBDaGFyOCkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBwdHJUYWcoWWFycjhCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiOC1i
aXQgcmVndWxhciBleHByZXNzaW9uIikpOworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4
Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFlhcnI4Qml0UHRyVGFnLCAiOC1iaXQg
cmVndWxhciBleHByZXNzaW9uIikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGNvZGVCbG9jay5zZXQxNkJpdENvZGUoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBwdHJUYWco
WWFycjE2Qml0UHRyVGFnLCAmY29kZUJsb2NrKSwgIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZShGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIFlhcnIxNkJpdFB0clRhZywgIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZmFpbHVyZVJlYXNvbikKICAgICAgICAgICAg
IGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKCptX2ZhaWx1cmVSZWFzb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gMjMwNjY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NiwxMyArODYsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXM4Qml0Q29kZSgpIHsg
cmV0dXJuIG1fcmVmOC5zaXplKCk7IH0KICAgICBib29sIGhhczE2Qml0Q29kZSgpIHsgcmV0dXJu
IG1fcmVmMTYuc2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXQ4Qml0Q29kZShNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcmVmKSB7IG1fcmVmOCA9IHJlZjsgfQotICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiByZWYpIHsgbV9yZWYxNiA9IHJlZjsgfQorICAgIHZvaWQgc2V0OEJp
dENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0UHRyVGFnPiByZWYpIHsgbV9yZWY4
ID0gcmVmOyB9CisgICAgdm9pZCBzZXQxNkJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnIxNkJpdFB0clRhZz4gcmVmKSB7IG1fcmVmMTYgPSByZWY7IH0KIAogICAgIGJvb2wgaGFzOEJp
dENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25seTguc2l6ZSgpOyB9CiAgICAgYm9v
bCBoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25seTE2LnNpemUoKTsg
fQotICAgIHZvaWQgc2V0OEJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1h
dGNoT25seSkgeyBtX21hdGNoT25seTggPSBtYXRjaE9ubHk7IH0KLSAgICB2b2lkIHNldDE2Qml0
Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbWF0Y2hPbmx5KSB7IG1fbWF0Y2hP
bmx5MTYgPSBtYXRjaE9ubHk7IH0KKyAgICB2b2lkIHNldDhCaXRDb2RlTWF0Y2hPbmx5KE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4gbWF0Y2hPbmx5KSB7IG1f
bWF0Y2hPbmx5OCA9IG1hdGNoT25seTsgfQorICAgIHZvaWQgc2V0MTZCaXRDb2RlTWF0Y2hPbmx5
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+IG1hdGNoT25s
eSkgeyBtX21hdGNoT25seTE2ID0gbWF0Y2hPbmx5OyB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRf
QUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICBib29sIHVzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZl
cigpIHsgcmV0dXJuIG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyOyB9CkBAIC0xMDEsMjUgKzEw
MSwyNSBAQCBwdWJsaWM6CiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBm
cmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhczhCaXRDb2RlKCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50
YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4PihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIHB0clRhZyhZYXJyOEJpdFB0clRhZywgdGhpcykpKGlucHV0LCBzdGFydCwgbGVuZ3Ro
LCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhC
aXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0
LCBsZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVu
Q29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXMxNkJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZTE2PihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBwdHJUYWcoWWFycjE2Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91
dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2Qml0
UHRyVGFnPihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CiAg
ICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2ln
bmVkIHBhcmVuQ29udGV4dFNpemUpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGVN
YXRjaE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0
cjxZYXJySklUQ29kZU1hdGNoT25seTg+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0
YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0
Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRl
eHQsIHBhcmVuQ29udGV4dFNpemUpKTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRl
KGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9p
ZCogZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2PihtX21h
dGNoT25seTE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBwdHJUYWcoWWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNv
bnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJp
dFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQs
IHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsK
ICAgICB9CiAjZWxzZQogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKQEAgLTE4OCwx
OCArMTg4LDE4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAg
bV9yZWY4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Ci0gICAgICAgIG1fcmVmMTYgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKLSAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCk7Ci0gICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoKTsKKyAgICAgICAgbV9yZWY4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0UHRy
VGFnPigpOworICAgICAgICBtX3JlZjE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJp
dFB0clRhZz4oKTsKKyAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPigpOworICAgICAgICBtX21hdGNoT25seTE2ID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4oKTsKICAgICAgICAg
bV9mYWlsdXJlUmVhc29uID0gc3RkOjpudWxsb3B0OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9yZWY4OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBt
X3JlZjE2OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX21hdGNoT25seTg7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fbWF0Y2hPbmx5MTY7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFlhcnI4Qml0UHRyVGFnPiBtX3JlZjg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnIxNkJpdFB0clRhZz4gbV9yZWYxNjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1h
dGNoT25seThCaXRQdHJUYWc+IG1fbWF0Y2hPbmx5ODsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPiBtX21hdGNoT25seTE2OwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgIGJvb2wgbV91c2VzUGF0dGVybkNv
bnRleHRCdWZmZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDY2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE4LTA0LTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
ZW1wbGF0aXplIENvZGVQdHIvUmVmcy9GdW5jdGlvblB0cnMgd2l0aCBQdHJUYWdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzAyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zNTM5MTY4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgKiBjc3Nq
aXQvQ1NTUHRyVGFnLmg6IEFkZGVkLgorICAgICAgICAqIGNzc2ppdC9Db21waWxlZFNlbGVjdG9y
Lmg6CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6
RnVuY3Rpb25DYWxsOjpGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3Rpb25D
YWxsOjpzZXRGdW5jdGlvbkFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3Rpb25DYWxs
OjpwcmVwYXJlQW5kQ2FsbCk6CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yRnJhZ21lbnQ6OmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUNvbnRleHRGdW5jdGlv
bkNhbGxUZXN0KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9y
Q2hlY2tlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnF1
ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rp
b25XaXRoQ2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRl
eHQpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisKIDIwMTgtMDQtMTYgIFRoaWJh
dWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
IFNldCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyIG1ldGFkYXRhIGluZm9ybWF0aW9uIGV2ZW4g
aWYgbm8gY2xpZW50IGlzIGF2YWxhaWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMwNjY5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00OTQ3LDYgKzQ5NDcsNyBAQAogCQlGREY2QkFGOTEzNEE0Qzk4MDA4MjI5MjAgLyog
SlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovOyB9OwogCQlGREY3RTlDNDEzQUMyMURCMDBBNTFF
QUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1
ZmZlckNhbGxiYWNrLmggKi87IH07CiAJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUw
RDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUyNzFGNjcyMDgyREJFNTAwQTk1MkQ0IC8q
IENTU1B0clRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUyNzFGNjQyMDgyREJCRTAwQTk1MkQ0IC8qIENTU1B0clRhZy5oICovOyB9OwogCQlGRTM2
RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZGRDExMTZDNzgyNjQwMEY4ODdD
MSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oICovOyB9OwogCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZGRDEzMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxU
cmFuc2FjdGlvblN0YXRlTWFjaGluZS5oICovOyB9OwogCQlGRTM2RkQxODE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTQxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0
aW9uU3RhdGUuaCAqLzsgfTsKQEAgLTE0Nzg4LDYgKzE0Nzg5LDcgQEAKIAkJRkRGN0U5QzIxM0FD
MjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI3MUY2NDIwODJEQkJFMDBBOTUyRDQgLyogQ1NT
UHRyVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1B0clRhZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyog
Q2hhbmdlVmVyc2lvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hh
bmdlVmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNkZEMTIx
NkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNkZEMTMxNkM3ODI2NDAwRjg4
N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjE2OSw2ICsxNjE3MSw3IEBACiAJCTI2Qjk5OThEMTgwM0FERkEw
MEQwMTEyMSAvKiBjc3NqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUZFMjcxRjY0MjA4MkRCQkUwMEE5NTJENCAvKiBDU1NQdHJUYWcuaCAqLywKIAkJ
CQlFNDQ1MTA3NzIwMkM3RTAxMDA2NTdEMzMgLyogQ29tcGlsZWRTZWxlY3Rvci5oICovLAogCQkJ
CTI2Qjk5OTkyMTgwM0I5RDkwMEQwMTEyMSAvKiBGdW5jdGlvbkNhbGwuaCAqLywKIAkJCQkyNkI5
OTk4RTE4MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKQEAgLTI3NjMw
LDYgKzI3NjMzLDcgQEAKIAkJCQk2RTBFNTY5QzE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3Vu
ZGVkUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNThDRDM1Q0IxOEVCNEMzOTAwQjlGM0FD
IC8qIEZsb2F0U2l6ZUhhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMjcxRjY3MjA4MkRCRTUw
MEE5NTJENCAvKiBDU1NQdHJUYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShy
ZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNyArMzkyLDcgQEAgaW5saW5lIGJvb2wgRWxl
bWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogICAgIH0KIAogICAgIGlmIChjb21waWxlZFNlbGVj
dG9yQ2hlY2tlciAmJiBjb21waWxlZFNlbGVjdG9yLnN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0
aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgYXV0byBzZWxlY3Rv
ckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JD
aGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLCBjb21waWxlZFNlbGVjdG9y
Q2hlY2tlciwgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMpOworICAgICAgICBhdXRvIHNlbGVjdG9y
Q2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNo
ZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgY29tcGlsZWRTZWxlY3Rvci5z
dGF0dXMpOwogI2lmICFBU1NFUlRfTVNHX0RJU0FCTEVECiAgICAgICAgIHVuc2lnbmVkIGlnbm9y
ZVNwZWNpZmljaXR5OwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzZWxlY3RvckNoZWNr
ZXIoJm1fZWxlbWVudCwgJmlnbm9yZVNwZWNpZmljaXR5KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVz
dC5wc2V1ZG9JZCA9PSBOT1BTRVVETywgIldoZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3
ZSBzaG91bGQgbmV2ZXIgY29tcGlsZSBhIHNlbGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0
IHVubGVzcyBpdCBjYW5ub3QgbWF0Y2ggYW55dGhpbmcuIik7CkBAIC00MjAsNyArNDIwLDcgQEAg
aW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogICAgIGlmIChjb21waWxl
ZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0
dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNr
aW5nQ29udGV4dCk7CiAKLSAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNv
bXBpbGVyOjpydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdD
b250ZXh0KGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIs
IGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsKKyAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIg
PSBTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25X
aXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBjb21waWxlZFNlbGVj
dG9yLnN0YXR1cyk7CiAKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBj
b21waWxlZFNlbGVjdG9yLnVzZUNvdW50Kys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQv
Q1NTUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L0NTU1B0clRh
Zy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9DU1NQdHJUYWcuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQ1NTX1NFTEVD
VE9SX0pJVCkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1B0clRhZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgSlNDOjpQdHJUYWcgQ1NTU2VsZWN0b3JQ
dHJUYWcgPSBzdGF0aWNfY2FzdDxKU0M6OlB0clRhZz4oMHhjNTUxKTsKK3N0YXRpYyBjb25zdGV4
cHIgSlNDOjpQdHJUYWcgQ1NTT3BlcmF0aW9uUHRyVGFnID0gc3RhdGljX2Nhc3Q8SlNDOjpQdHJU
YWc+KDB4YzU1Mik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShDU1NfU0VMRUNUT1JfSklUKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVk
U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRT
ZWxlY3Rvci5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29t
cGlsZWRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCisjaW5jbHVkZSAiQ1NTUHRyVGFnLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU4LDcgQEAgcHJpdmF0ZToKIHN0cnVjdCBDb21waWxlZFNl
bGVjdG9yIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAgICAgU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1cyBzdGF0dXM7Ci0gICAgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZjsKKyAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0
clRhZz4gY29kZVJlZjsKICNpZiBkZWZpbmVkKENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HKSAm
JiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgIHVuc2lnbmVkIHVzZUNvdW50IHsgMCB9
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lv
biAyMzA2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9K
SVQpCiAKKyNpbmNsdWRlICJDU1NQdHJUYWcuaCIKICNpbmNsdWRlICJSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlN0YWNrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvR1BSSW5mby5oPgpAQCAtMzYsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZ1bmN0aW9uQ2FsbCB7CiBwdWJsaWM6Ci0gICAgRnVuY3Rpb25DYWxsKEpTQzo6TWFjcm9B
c3NlbWJsZXImIGFzc2VtYmxlciwgUmVnaXN0ZXJBbGxvY2F0b3ImIHJlZ2lzdGVyQWxsb2NhdG9y
LCBTdGFja0FsbG9jYXRvciYgc3RhY2tBbGxvY2F0b3IsIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMyPiYgY2FsbFJlZ2lzdHJ5
KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lz
dGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxs
b2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6
RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQogICAg
ICAgICA6IG1fYXNzZW1ibGVyKGFzc2VtYmxlcikKICAgICAgICAgLCBtX3JlZ2lzdGVyQWxsb2Nh
dG9yKHJlZ2lzdGVyQWxsb2NhdG9yKQogICAgICAgICAsIG1fc3RhY2tBbGxvY2F0b3Ioc3RhY2tB
bGxvY2F0b3IpCkBAIC00Nyw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRGdW5jdGlvbkFkZHJlc3MoSlNDOjpGdW5jdGlvblB0ciBmdW5jdGlvbkFkZHJlc3Mp
CisgICAgdm9pZCBzZXRGdW5jdGlvbkFkZHJlc3MoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRp
b25QdHJUYWc+IGZ1bmN0aW9uQWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25BZGRy
ZXNzID0gZnVuY3Rpb25BZGRyZXNzOwogICAgIH0KQEAgLTE0Nyw3ICsxNDgsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUobV9maXJzdEFyZ3VtZW50LCBKU0M6
OkdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBtX2Fzc2VtYmxlci5jYWxsKEpTQzo6Q0Z1bmN0aW9uUHRy
VGFnKTsKKyAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gbV9hc3NlbWJs
ZXIuY2FsbChDU1NPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBtX2NhbGxSZWdpc3RyeS5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoY2FsbCwgbV9mdW5jdGlvbkFkZHJlc3MpKTsKICAgICB9CiAKQEAg
LTE3OCwxMiArMTc5LDEyIEBAIHByaXZhdGU6CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9h
c3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAg
ICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tBbGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFp
cjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+JiBtX2Nh
bGxSZWdpc3RyeTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNh
bGwsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYgbV9jYWxsUmVn
aXN0cnk7CiAKICAgICBSZWdpc3RlclZlY3RvciBtX3NhdmVkUmVnaXN0ZXJzOwogICAgIFN0YWNr
QWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZlY3RvciBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVy
ZW5jZXM7CiAgICAgCi0gICAgSlNDOjpGdW5jdGlvblB0ciBtX2Z1bmN0aW9uQWRkcmVzczsKKyAg
ICBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbkFkZHJlc3M7
CiAgICAgdW5zaWduZWQgbV9hcmd1bWVudENvdW50OwogICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbV9maXJzdEFyZ3VtZW50OwogICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgbV9zZWNvbmRBcmd1bWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9T
ZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDggKzIw
MSw4IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICBWZWN0b3I8Y29uc3QgVmVjdG9y
PEF0b21pY1N0cmluZz4qPiBsYW5ndWFnZUFyZ3VtZW50c0xpc3Q7CiAgICAgVmVjdG9yPGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqLCA4PiBjbGFzc05hbWVzOwogICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEpTQzo6RnVuY3Rpb25QdHIsIDQ+IHVub3B0aW1p
emVkUHNldWRvQ2xhc3NlczsKLSAgICBWZWN0b3I8SlNDOjpGdW5jdGlvblB0ciwgND4gdW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRleHQ7CisgICAgVmVjdG9yPEpTQzo6RnVuY3Rpb25Q
dHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzOworICAg
IFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4sIDQ+IHVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlc1dpdGhDb250ZXh0OwogICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGlu
Z0luZm8sIDQ+IGF0dHJpYnV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDI+
IG50aENoaWxkRmlsdGVyczsKICAgICBWZWN0b3I8TnRoQ2hpbGRPZlNlbGVjdG9ySW5mbz4gbnRo
Q2hpbGRPZkZpbHRlcnM7CkBAIC0yNTgsNyArMjU4LDcgQEAgc3RydWN0IEJhY2t0cmFja2luZ0xl
dmVsIHsKIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiBwdWJsaWM6CiAgICAgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgU2VsZWN0b3JDb250ZXh0KTsKLSAg
ICBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmKTsKKyAgICBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGUoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+Jik7CiAKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjsKQEAgLTI5
Miw4ICsyOTIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmco
QXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdUYWdOYW1lRmFpbHVyZUNhc2VzLCBBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7
CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7Ci0gICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgSlNDOjpGdW5jdGlvblB0cik7Ci0gICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlv
bkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlv
blB0cik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+KTsKKyAgICB2b2lkIGdlbmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlv
blB0clRhZz4pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNBY3RpdmUoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzKTsKQEAgLTMwOSw3ICszMDksNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJl
c3MsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkZWNJbmRleFJlZ2lzdGVyLCBjb25zdCBBdHRyaWJ1
dGVNYXRjaGluZ0luZm8mIGF0dHJpYnV0ZUluZm8pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50
QXR0cmlidXRlVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXR0
cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsKICAgICB2b2lkIGdlbmVyYXRlRWxl
bWVudEF0dHJpYnV0ZVZhbHVlRXhhY3RNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywg
Y29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZp
dHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHkpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmli
dXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29u
c3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkg
dmFsdWVDYXNlU2Vuc2l0aXZpdHksIEpTQzo6RnVuY3Rpb25QdHIgY2FzZVNlbnNpdGl2ZVRlc3Qs
IEpTQzo6RnVuY3Rpb25QdHIgY2FzZUluc2Vuc2l0aXZlVGVzdCk7CisgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1
dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNh
c2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgSlNDOjpGdW5jdGlvblB0cjxDU1NP
cGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBKU0M6OkZ1bmN0aW9uUHRyPENTU09w
ZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRIYXNUYWdOYW1lKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
Q1NTU2VsZWN0b3ImIHRhZ01hdGNoaW5nU2VsZWN0b3IpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVt
ZW50SGFzSWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBMb2NhbFJl
Z2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRUb01hdGNo
KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc0NsYXNzZXMoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBMb2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3Ms
IGNvbnN0IFZlY3Rvcjxjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgOD4mIGNsYXNzTmFtZXMpOwpA
QCAtMzU1LDcgKzM1NSw3IEBAIHByaXZhdGU6CiAgICAgQXNzZW1ibGVyIG1fYXNzZW1ibGVyOwog
ICAgIFJlZ2lzdGVyQWxsb2NhdG9yIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxv
Y2F0b3IgbV9zdGFja0FsbG9jYXRvcjsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEFzc2VtYmxlcjo6
Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9u
UHRyVGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CiAKICAgICBTZWxlY3RvckNvbnRleHQgbV9z
ZWxlY3RvckNvbnRleHQ7CiAgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rpb25UeXBlOwpAQCAtMzky
LDcgKzM5Miw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGMKIAog
c3RhdGljIHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21l
bnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgdW5zaWduZWQgbGV2ZWwgPSAwKTsKIAotU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIGxh
c3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCitTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBp
bGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogbGFzdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRl
eHQgc2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3Rv
clB0clRhZz4mIGNvZGVSZWYpCiB7CiAgICAgaWYgKCFKU0M6OlZNOjpjYW5Vc2VKSVQoKSkKICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CkBA
IC00MzYsNyArNDM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZyYWdtZW50TWF0Y2hlc1JpZ2h0
bQogCiBGdW5jdGlvblR5cGUgU2VsZWN0b3JGcmFnbWVudDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc1dpdGhDb250ZXh0KGJvb2wgKCptYXRjaGVyKShjb25zdCBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dCYpKQogewotICAgIHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhD
b250ZXh0LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXIpKTsKKyAgICB1bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVy
YXRpb25QdHJUYWc+KG1hdGNoZXIpKTsKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OwogfQogCkBAIC01MzQsODMgKzUzNCw4MyBAQCBz
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzCiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgLy8gVW5vcHRpbWl6ZWQgcHNldWRvIHNlbGVjdG9yLiBUaGV5IGFyZSBqdXN0IGZ1
bmN0aW9uIGNhbGwgdG8gYSBzaW1wbGUgdGVzdGluZyBmdW5jdGlvbi4KICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0F1dG9maWxsOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNBdXRvZmlsbGVkKSk7Cisg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzQXV0b2ZpbGxlZCkpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0cm9uZ1Bhc3N3b3JkOgotICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNBdXRv
ZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNB
dXRvZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6
U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
Q2hlY2tlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyKGlzQ2hlY2tlZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRy
VGFnPihpc0NoZWNrZWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGVmYXVsdDoK
LSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1
bmN0aW9uUHRyKG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4obWF0Y2hlc0RlZmF1bHRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NEaXNhYmxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNEaXNhYmxlZFBzZXVkb0Ns
YXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNEaXNhYmxlZFBzZXVk
b0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cihtYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJU
YWc+KG1hdGNoZXNFbmFibGVkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzRGVmaW5lZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzRGVmaW5lZEVsZW1lbnQpKTsKKyAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENT
U09wZXJhdGlvblB0clRhZz4oaXNEZWZpbmVkRWxlbWVudCkpOwogICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NGb2N1czoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3Vz
UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oU2VsZWN0b3JDaGVj
a2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NGdWxsUGFnZU1lZGlhOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0Ns
YXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNNZWRpYURvY3VtZW50KSk7CisgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzTWVkaWFEb2N1bWVudCkpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NJblJhbmdlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNJblJhbmdlKSk7CisgICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxD
U1NPcGVyYXRpb25QdHJUYWc+KGlzSW5SYW5nZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NJbmRldGVybWluYXRlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0Ns
YXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9D
bGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzSW5kZXRlcm1pbmF0
ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6Ci0g
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cihpc0ludmFsaWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNJbnZh
bGlkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc09wdGlvbmFsOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIo
aXNPcHRpb25hbEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlz
T3B0aW9uYWxGb3JtQ29udHJvbCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPdXRP
ZlJhbmdlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHIoaXNPdXRPZlJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+KGlzT3V0T2ZSYW5nZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFk
T25seToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChK
U0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNSZWFkT25seVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxD
U1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNSZWFkT25seVBzZXVkb0NsYXNzKSk7CiAgICAgICAg
IHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRXcml0ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNSZWFkV3Jp
dGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzUmVh
ZFdyaXRlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUmVxdWly
ZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihpc1JlcXVpcmVkRm9ybUNvbnRyb2wpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4oaXNSZXF1aXJlZEZvcm1Db250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1ZhbGlkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNWYWxpZCkpOworICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0
aW9uUHRyVGFnPihpc1ZhbGlkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRv
d0luYWN0aXZlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOworICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3Bl
cmF0aW9uUHRyVGFnPihpc1dpbmRvd0luYWN0aXZlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3JlZW46Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkRvY3VtZW50OgotICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3Jl
ZW5Eb2N1bWVudFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1h
dGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NGdWxsU2NyZWVuQW5jZXN0b3I6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVl
bkFuY2VzdG9yUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0
Y2hlc0Z1bGxTY3JlZW5BbmNlc3RvclBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0FuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uOgotICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hl
c0Z1bGxTY3JlZW5BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvblBzZXVkb0NsYXNzKSk7Cisg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVs
bFNjcmVlblRyYW5zaXRpb25Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAjZW5kaWYKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdXR1cmU6Ci0gICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0ciht
YXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRh
Zz4obWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Bhc3Q6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNzKSk7CisgICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlv
blB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpKTsKICAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlm
CiAKQEAgLTEyMTYsNyArMTIxNiw3IEBAIHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJl
cXVpcmVtZW4KICAgICB9CiB9CiAKLWlubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZVJlZikKK2lubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Y29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0
clRhZz4mIGNvZGVSZWYpCiB7CiAgICAgc3dpdGNoIChtX2Z1bmN0aW9uVHlwZSkgewogICAgIGNh
c2UgRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI6CkBAIC0xMjQ0LDExICsxMjQ0
LDEwIEBAIGlubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mdW5jdGlvbkNhbGxzLnNpemUoKTsgaSsrKQogICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsobV9mdW5jdGlvbkNhbGxzW2ldLmZpcnN0LCBtX2Z1bmN0aW9uQ2Fs
bHNbaV0uc2Vjb25kKTsKIAotICAgIEpTQzo6UHRyVGFnIHRhZyA9IHB0clRhZygmY29kZVJlZiwg
bV9zZWxlY3RvckNvbnRleHQpOwogI2lmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCi0gICAg
Y29kZVJlZiA9IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KHRhZywgIkNT
UyBTZWxlY3RvciBKSVQgZm9yIFwiJXNcIiIsIG1fb3JpZ2luYWxTZWxlY3Rvci0+c2VsZWN0b3JU
ZXh0KCkudXRmOCgpLmRhdGEoKSk7CisgICAgY29kZVJlZiA9IGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aERpc2Fzc2VtYmx5KENTU1NlbGVjdG9yUHRyVGFnLCAiQ1NTIFNlbGVjdG9yIEpJVCBm
b3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0
YSgpKTsKICNlbHNlCi0gICAgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFn
LCAiQ1NTIFNlbGVjdG9yIEpJVCIpOworICAgIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIENTU1NlbGVjdG9yUHRyVGFnLCAiQ1NTIFNlbGVjdG9yIEpJVCIpOwogI2VuZGlmCiAK
ICAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXIgfHwgbV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRo
aW5nKQpAQCAtMzAxOSw3ICszMDE4LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJp
YnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRl
Q2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBKU0M6OkZ1bmN0aW9uUHRyIGNh
c2VTZW5zaXRpdmVUZXN0LCBKU0M6OkZ1bmN0aW9uUHRyIGNhc2VJbnNlbnNpdGl2ZVRlc3QpCit2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rp
b25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWlj
U3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNl
U2Vuc2l0aXZpdHksIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vu
c2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNl
bnNpdGl2ZVRlc3QpCiB7CiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGV4cGVjdGVk
VmFsdWVSZWdpc3RlcihtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhw
ZWN0ZWRWYWx1ZS5pbXBsKCkpLCBleHBlY3RlZFZhbHVlUmVnaXN0ZXIpOwpAQCAtMzA3NSw3ICsz
MDc0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIH0K
IH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEZ1bmN0aW9u
Q2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9u
UHRyIHRlc3RGdW5jdGlvbikKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVs
ZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IHRlc3RGdW5jdGlvbikKIHsKICAg
ICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1Jl
Z2lzdGVyOwogICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVn
aXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CkBAIC0z
MDg0LDcgKzMwODMsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9v
bGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQogCi12b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQordm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRlc3Qo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09w
ZXJhdGlvblB0clRhZz4gdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIo
KTsKICAgICBsb2FkQ2hlY2tpbmdDb250ZXh0KGNoZWNraW5nQ29udGV4dCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgJKHJldmlzaW9uIDIzMDY2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDM0ICs1MywzMCBAQCB0eXBlZGVmIHVuc2lnbmVkICgqUXVlcnlTZWxlY3RvclNpbXBs
ZVNlCiB0eXBlZGVmIHVuc2lnbmVkICgqUnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQpKGNvbnN0IEVsZW1lbnQqLCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCosIHVuc2lnbmVkKik7CiB0eXBlZGVmIHVuc2lnbmVkICgqUXVlcnlTZWxlY3RvclNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCopOwogCi1TZWxlY3RvckNvbXBpbGF0aW9u
U3RhdHVzIGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIFNlbGVjdG9yQ29udGV4
dCwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIG91dHB1dENvZGVSZWYpOworU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBTZWxl
Y3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFn
PiYgb3V0cHV0Q29kZVJlZik7CiAKLWlubGluZSBSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JD
aGVja2VyIHJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb25zdCBK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgdm9pZCogZXhlY3V0YWJsZUFkZHJl
c3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCitpbmxpbmUg
UnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBydWxlQ29sbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb24odm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChj
b21waWxhdGlvblN0YXR1cywgY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKLSAgICBKU0M6OlB0clRhZyB0YWcgPSBK
U0M6OnB0clRhZygmY29kZVJlZiwgU2VsZWN0b3JDb250ZXh0OjpSdWxlQ29sbGVjdG9yKTsKLSAg
ICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0
b3JDaGVja2VyPihleGVjdXRhYmxlQWRkcmVzcywgdGFnKTsKKyAgICByZXR1cm4gSlNDOjp1bnRh
Z0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBDU1NTZWxl
Y3RvclB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpOwogfQogCi1pbmxpbmUgUXVlcnlTZWxlY3Rv
clNpbXBsZVNlbGVjdG9yQ2hlY2tlciBxdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2Vy
RnVuY3Rpb24oY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHZvaWQq
IGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9u
U3RhdHVzKQoraW5saW5lIFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgcXVlcnlT
ZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHZvaWQqIGV4ZWN1dGFibGVBZGRy
ZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAg
IEFTU0VSVF9VTlVTRUQoY29tcGlsYXRpb25TdGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09IFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgSlND
OjpQdHJUYWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6UXVl
cnlTZWxlY3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlcj4oZXhlY3V0YWJsZUFkZHJlc3MsIHRhZyk7CisgICAg
cmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9y
Q2hlY2tlciwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzKTsKIH0KIAotaW5s
aW5lIFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHJ1bGVD
b2xsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29uc3Qg
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHZvaWQqIGV4ZWN1dGFibGVBZGRy
ZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQoraW5saW5l
IFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHJ1bGVDb2xs
ZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQodm9pZCogZXhl
Y3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0
dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxhdGlvblN0YXR1cywgY29tcGlsYXRpb25T
dGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dCk7Ci0gICAgSlNDOjpQdHJUYWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVS
ZWYsIFNlbGVjdG9yQ29udGV4dDo6UnVsZUNvbGxlY3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50
YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0Nv
bnRleHQ+KGV4ZWN1dGFibGVBZGRyZXNzLCB0YWcpOworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1
bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
LCBDU1NTZWxlY3RvclB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpOwogfQogCi1pbmxpbmUgUXVl
cnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgcXVlcnlTZWxlY3Rv
clNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCitpbmxpbmUgUXVlcnlT
ZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgcXVlcnlTZWxlY3RvclNl
bGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dCh2b2lkKiBleGVjdXRhYmxl
QWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGF0aW9uU3RhdHVzLCBjb21waWxhdGlvblN0YXR1cyA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdD
b250ZXh0KTsKLSAgICBKU0M6OlB0clRhZyB0YWcgPSBKU0M6OnB0clRhZygmY29kZVJlZiwgU2Vs
ZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKLSAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5j
dGlvblB0cjxRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dD4o
ZXhlY3V0YWJsZUFkZHJlc3MsIHRhZyk7CisgICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25Q
dHI8UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQsIENTU1Nl
bGVjdG9yUHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFNl
bGVjdG9yQ29tcGlsZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJl
dmlzaW9uIDIzMDY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUxLDExICs0NTEsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNl
bGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAg
ICAgICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHNlbGVjdG9yLmNvbXBp
bGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAg
ICAgaWYgKHNlbGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25T
dGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICAgICAgICAgIGF1dG8gc2Vs
ZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVj
dG9yQ2hlY2tlckZ1bmN0aW9uKHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLCBjb21w
aWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMpOworICAgICAg
ICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlT
ZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVj
a2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVudCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsK
LSAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6
OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQo
c2VsZWN0b3IuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
LCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICAgICAgYXV0byBzZWxl
Y3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVj
a2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBz
ZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHNl
bGVjdG9yQ2hlY2tlcigmZWxlbWVudCwgJmNoZWNraW5nQ29udGV4dCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAobWF0Y2hlZCkgewpAQCAtNTQzLDExICs1NDMsMTEgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgICAgICBjb25zdCBTZWxlY3Rv
ckRhdGEmIHNlbGVjdG9yRGF0YSA9IG1fc2VsZWN0b3JzLmZpcnN0KCk7CiAgICAgICAgIHZvaWQq
IGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyID0gc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JD
b2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICBpZiAoc2VsZWN0b3JE
YXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlT
ZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNv
bXBpbGVyOjpxdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oc2VsZWN0
b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwg
c2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKKyAgICAgICAgICAgIFNlbGVjdG9yQ29t
cGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2Vy
ID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1
bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25T
dGF0dXMpOwogICAgICAgICAgICAgZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2Vy
PFNlbGVjdG9yUXVlcnlUcmFpdD4oKnNlYXJjaFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIsIG91
dHB1dCwgc2VsZWN0b3JEYXRhKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VChzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBT
ZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9y
U2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yRGF0YS5j
b21waWxlZFNlbGVjdG9yQ29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9y
RGF0YS5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpR
dWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNo
ZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVu
Y3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rv
ckRhdGEuY29tcGlsYXRpb25TdGF0dXMpOwogICAgICAgICAgICAgZXhlY3V0ZUNvbXBpbGVkU2Vs
ZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dDxTZWxlY3RvclF1ZXJ5VHJhaXQ+KHJvb3RO
b2RlLCAqc2VhcmNoUm9vdE5vZGUsIHNlbGVjdG9yQ2hlY2tlciwgb3V0cHV0LCBzZWxlY3RvckRh
dGEpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NlbGVjdG9yUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5oCShyZXZpc2lvbiAyMzA2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0
ZToKIAogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CiAjaWYgRU5BQkxFKENT
U19TRUxFQ1RPUl9KSVQpCi0gICAgICAgIG11dGFibGUgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29tcGlsZWRTZWxlY3RvckNvZGVSZWY7CisgICAgICAgIG11dGFibGUgSlNDOjpNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+IGNvbXBpbGVkU2VsZWN0b3JDb2RlUmVm
OwogICAgICAgICBtdXRhYmxlIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25T
dGF0dXM7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgflNlbGVjdG9y
RGF0YSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338152</attachid>
            <date>2018-04-17 14:53:39 -0700</date>
            <delta_ts>2018-04-17 16:17:39 -0700</delta_ts>
            <desc>proposed patch rebased.</desc>
            <filename>bug-184702.patch</filename>
            <type>text/plain</type>
            <size>626467</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyMCBA
QAorMjAxOC0wNC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGVtcGxhdGl6ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgMS4gVGVtcGxhdGl6ZWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
L1JlZiwgRnVuY3Rpb25QdHIsIGFuZCBDb2RlTG9jYXRpb24gdmFyaWFudHMKKyAgICAgICAgICAg
dG8gdGFrZSBhIFB0clRhZyB0ZW1wbGF0ZSBhcmd1bWVudC4KKyAgICAgICAgMi4gUmVwbGFjZWQg
c29tZSB1c2VzIG9mIHJhdyBwb2ludGVycyB3aXRoIHRoZSBlcXVpdmFsZW50IENvZGVQdHIgLyBG
dW5jdGlvblB0ci4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmxpbmtK
dW1wKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNz
KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXApOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3QpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlYWRQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhMb2FkKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRp
b24pOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ29tbW9uOjogY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25D
b21tb246OkNvZGVMb2NhdGlvbkNvbW1vbik6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbklu
c3RydWN0aW9uOjpDb2RlTG9jYXRpb25JbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVM
b2NhdGlvbkxhYmVsOjpDb2RlTG9jYXRpb25MYWJlbCk6CisgICAgICAgIChKU0M6OkNvZGVMb2Nh
dGlvbkxhYmVsOjpyZXRhZ2dlZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkxhYmVsOjog
Y29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25KdW1wOjpDb2RlTG9jYXRpb25KdW1w
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uSnVtcDo6cmV0YWdnZWQpOgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25DYWxsOjpDb2RlTG9jYXRpb25DYWxsKToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ2FsbDo6cmV0YWdnZWQpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25O
ZWFyQ2FsbDo6Q29kZUxvY2F0aW9uTmVhckNhbGwpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRp
b25EYXRhTGFiZWwzMjo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIpOgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0OjpDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOjpDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ6
OkNvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz46OmxhYmVsQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25Db21tb248dGFnPjo6anVtcEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OmNhbGxBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpuZWFyQ2FsbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbDMyQXRPZmZzZXQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmNvbnZlcnRpYmxlTG9hZEF0T2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjppbnN0cnVjdGlvbkF0T2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpsYWJlbEF0
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpqdW1w
QXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21tb246OmNh
bGxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6
bmVhckNhbGxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
TG9jYXRpb25Db21tb246OmRhdGFMYWJlbDMyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6Y29udmVydGlibGVMb2FkQXRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1w
bCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJs
eUltcGwpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNv
ZGVXaXRoRGlzYXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpwYXRjaCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmVudHJ5cG9pbnQp
OgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsb2NhdGlvbk9mKToKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1
ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1
ZmZlcjo6dHJhbXBvbGluZUF0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlYWRDYWxsVGFyZ2V0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlcGxhY2VXaXRoSnVtcCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRP
ZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJl
cGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxpbmtDYWxsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OnJlcGxhY2VXaXRoVk1IYWx0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJX
aXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXBh
dGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTXY3OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNdjc6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9C
cmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
T25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJy
YW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVw
YXRjaENhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpsaW5rQ2FsbCk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1
bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6dHJ5VG9EaXNhc3NlbWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZGlzYXNzZW1ibHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmR1bXAgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Q
dHI6OnJldGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OnJldGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpvcGVyYXRvciE9IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6UmV0dXJuQWRkcmVzc1B0cjo6UmV0dXJuQWRkcmVzc1B0cik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJl
dGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjogY29u
c3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBj
b25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkQ29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6cmV0YWdnZWQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1ibGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJN
SVBTOjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b0JyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZWFkQ2Fs
bFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODY6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODY6OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGF0Y2hDb21w
YWN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VXaXRo
Vk1IYWx0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VX
aXRoSnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9m
QnJhbmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RhcnRPZlBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2Vt
Ymxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjppbnZva2UpOgorICAgICAgICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVy
KToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNv
bXBpbGF0aW9uOjpDb21waWxhdGlvbik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5oOgor
ICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6Q29tcGlsYXRpb246OmNvZGVSZWYgY29uc3QpOgorICAgICAgICAqIGIzL0IzQ29tcGls
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
TWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIv
dGVzdGFpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6
Omludm9rZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdEVudHJ5U3dpdGNoU2ltcGxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RF
bnRyeVN3aXRjaE5vRW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEVudHJ5U3dp
dGNoV2l0aENvbW1vblBhdGhzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFdp
dGhDb21tb25QYXRoc0FuZE5vblRyaXZpYWxFbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RFbnRyeVN3aXRjaExvb3ApOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1Bh
dGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6QnlWYWxJbmZvOjpCeVZhbEluZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6Y2FsbFJldHVybkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjpwYXRjaGFibGVKdW1wKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpob3RQYXRo
QmVnaW4pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OnNldENhbGxMb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmhvdFBh
dGhPdGhlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFu
dCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkVmFyaWFudDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIgY29uc3QpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZHVtcEltcGwgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNl
dHRlckFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6
Y3VzdG9tQWNjZXNzb3IgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpIYW5kbGVySW5mbzo6aW5pdGlh
bGl6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6bGlua0NvZGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0
aUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6
CisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6
TExJbnRDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRF
eHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vz
czo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoK
KyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6QWNjZXNzR2VuZXJhdGlvblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OmNvZGUgY29uc3Qp
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjpzbG93UGF0aENhbGxMb2NhdGlvbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjpkb25lTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6c2xvd1BhdGhTdGFydExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OnBhdGNoYWJsZUp1bXBGb3JJbik6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphcHBlbmRDYXRjaEVudHJ5
cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkRpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNv
bXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZUNh
dGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Q2FsbExpbmtSZWNvcmQ6OkNhbGxMaW5rUmVjb3JkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6SlNEaXJlY3RDYWxsUmVjb3JkOjpKU0RpcmVjdENhbGxSZWNvcmQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpK
U0RpcmVjdFRhaWxDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklU
RmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oOgorICAgICAg
ICAoSlNDOjpERkc6Okp1bXBSZXBsYWNlbWVudDo6SnVtcFJlcGxhY2VtZW50KToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJl
Q2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFk
anVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29kZUxv
Y2F0aW9uRm9yUmVwYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRD
b3VudHMpOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAg
ICAgICAoSlNDOjpERkc6Om9zcldyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6YWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Q2FsbFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kQXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRB
bmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6dW5wYWNrQW5kR2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJ
Qyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERp
cmVjdFBuYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6YXBwZW5kQ2FsbFNldFJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRH
ZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6Cisg
ICAgICAgICogZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6ZGlzYXNz
ZW1ibGVBc3luY2hyb25vdXNseSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkaXNhc3Nl
bWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZVdpdGhVRGlzODYpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYpOgorICAgICAg
ICAqIGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjp0cnlU
b0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpsYWJlbCk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyk6CisgICAgICAgICogZnRsL0ZUTEV4Y2Vw
dGlvblRhcmdldC5oOgorICAgICAgICAqIGZ0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpp
bml0aWFsaXplQjNDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjppbml0aWFsaXpl
QWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkZU
TDo6SklUQ29kZTo6YjNDb2RlIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToK
KyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpM
YXp5U2xvd1BhdGg6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0
aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OnBhdGNoYWJsZUp1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpGVEw6OkxhenlTbG93UGF0aDo6ZG9uZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TGF6eVNsb3dQYXRoOjpzdHViIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRo
Q2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVEaXJlY3RDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCBjb25z
dCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
SGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRo
dW5rKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKiBmdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250
ZXh0OjprZXlXaXRoVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGZ0bC9GVExTbG93
UGF0aENhbGxLZXkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6ZHVt
cCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgorICAgICAgICAo
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6U2xvd1BhdGhDYWxsS2V5KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OmNhbGxUYXJnZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbEtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsS2V5OjpjYWxsUHRyVGFnIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwv
RlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAg
ICogZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAoSlNDOjpGVEw6
OmdlbmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6OmtleUZvclRodW5rKToK
KyAgICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmdldFNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpUaHVua3M6OmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmdldE9wY29kZUlEKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eik6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKToKKyAgICAgICAgKiBqaXQvQ0NhbGxI
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVNlcGFy
YXRlZFdYSGVhcHMpOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGpp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NB
d2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpj
cmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAoSlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OmN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6
OkNhbGxSZWNvcmQpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q1Nsb3cpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0
L0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZik6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6
CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZSk6CisgICAgICAgIChKU0M6Ok5hdGl2
ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29k
ZTo6YWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgICog
aml0L0pJVENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmNvZGVMb2NhdGlvbik6CisgICAg
ICAgIChKU0M6OkpJVENvZGVNYXA6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6
OmZpbmQgY29uc3QpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpKSVREaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseSk6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKSVRC
eUlkR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWRDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TmFrZWRUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a0FuZFNsb3dQYXRoUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZSk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjppc1Byb2Zp
bGVFbXB0eSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdl
dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OkpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cik6CisgICAg
ICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0
aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3Rp
bmdDVElTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToK
KyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICogaml0L1BDVG9Db2RlT3JpZ2lu
TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2lu
TWFwKToKKyAgICAgICAgKiBqaXQvUENUb0NvZGVPcmlnaW5NYXAuaDoKKyAgICAgICAgKiBqaXQv
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAq
IGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9SZXBhdGNo
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZFB1dElDQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6
OmZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2V0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW4pOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6Cisg
ICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRGlyZWN0Rm9yKToKKyAg
ICAgICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0Zvcik6CisgICAg
ICAgIChKU0M6OmxpbmtWaXJ0dWFsRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0
UHV0QnlJRCk6CisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBqaXQvU2xvd1Bh
dGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6CisgICAgICAg
ICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpj
YWxsRG91YmxlVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpj
YWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAg
KEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Om5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVh
Y2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpm
cm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNsejMyVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6dHJ1bmNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnJv
dW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpleHBUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YWJzVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjppbXVsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpyYW5kb21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJn
c0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5o
OgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENv
ZGVQdHIpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIpOgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlw
b2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRGdW5jdGlvbkVudHJ5cG9pbnQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpM
TEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0TW9k
dWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OnZtRW50cnlUb1dhc20pOgorICAgICAg
ICAoSlNDOjpMTEludDo6Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8pOgorICAgICAgICAoSlNDOjpM
TEludDo6ZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkxMSW50OjpmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmV2YWxFbnRyeVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6Om1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OkNvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJDb21waWxhdGlvbi5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNp
dGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdFNpdGU6OnRvSlMgY29uc3Qp
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjpPU1JFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPU1JFeGl0U2l0ZTo6Y29kZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6T1NSRXhpdFNpdGU6OiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlQmFzZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVh
ckNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmVudHJ5cG9pbnRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmg6CisgICAgICAg
IChKU0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpUYWdnZWROYXRpdmVGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpvcGVyYXRvciBOYXRpdmVGdW5jdGlvbik6
CisgICAgICAgICogcnVudGltZS9QdHJUYWcuaDoKKyAgICAgICAgKEpTQzo6dGFnQ29kZVB0cik6
CisgICAgICAgIChKU0M6OnVudGFnQ29kZVB0cik6CisgICAgICAgIChKU0M6OnJldGFnQ29kZVB0
cik6CisgICAgICAgIChKU0M6OnRhZ0NGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6OnVudGFn
Q0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6bmV4dFB0clRhZ0lEKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xv
dDo6c2V0Q3VzdG9tVmFsdWUpOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1
c3RvbUFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpjdXN0b21TZXR0
ZXIgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKToKKyAgICAgICAgKiBydW50
aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldEhvc3RGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcik6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJU3R1Yik6CisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0RXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNv
bXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9X
YXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAg
ICAqIHdhc20vV2FzbUJpbmRpbmcuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjplbnRyeXBvaW50IGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5n
Q29udmVudGlvbjo6c2V0dXBGcmFtZUluUHJvbG9ndWUgY29uc3QpOgorICAgICAgICAqIHdhc20v
V2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxl
cik6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6Oldh
c206OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuaDoK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6aGFuZGxlQmFkSTY0VXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgor
ICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaDoKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpsb2FkRnJvbUZyYW1lQW5kSnVtcCk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjpsaW5rRGF0YUxhYmVs
cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAg
ICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpz
ZXQ4Qml0Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2Qml0
Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlTWF0
Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2Rl
TWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmNsZWFyKToKKwogMjAxOC0wNC0x
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PD46OnZpc2l0Q2hpbGRyZW4gaGFzIGEgcmFjZSBjb25kaXRpb24gcmVhZGlu
ZyBtX21vZGUgYW5kIG1fdmVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjMw
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDggQEAgcHVibGljOgogICAgIHR5
cGVkZWYgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyVHlwZTsKICAgICB0eXBlZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9U
OwogCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRh
Zz47CiAKICAgICBjbGFzcyBKdW1wOwogCkBAIC0zOTQsNyArMzk0LDcgQEAgcHVibGljOgogICAg
ICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPjsK
ICAgICAgICAgZnJpZW5kIHN0cnVjdCBERkc6Ok9TUkV4aXQ7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKdW1wOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOworICAg
ICAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgICAgICBmcmllbmQgY2xhc3Mg
V2F0Y2hwb2ludDsKIApAQCAtODQzLDkgKzg0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBBc3NlbWJsZXJUeXBlOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhmcm9tLm1fbGFiZWws
IHRvLm1fbGFiZWwpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYSwgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHRlbXBsYXRlPFB0clRhZyBhVGFnLCBQdHJUYWcgYlRh
Zz4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8YVRhZz4mIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxiVGFnPiYgYikKICAgICB7Ci0gICAgICAgIHJldHVybiBiLmV4ZWN1dGFibGVBZGRyZXNzPHB0
cmRpZmZfdD4oKSAtIGEuZXhlY3V0YWJsZUFkZHJlc3M8cHRyZGlmZl90PigpOworICAgICAgICBy
ZXR1cm4gYi50ZW1wbGF0ZSBkYXRhTG9jYXRpb248cHRyZGlmZl90PigpIC0gYS50ZW1wbGF0ZSBk
YXRhTG9jYXRpb248cHRyZGlmZl90PigpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGRlYnVnT2Zm
c2V0KCkgeyByZXR1cm4gbV9hc3NlbWJsZXIuZGVidWdPZmZzZXQoKTsgfQpAQCAtODU3LDcgKzg1
OCw4IEBAIHB1YmxpYzoKIAogICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CiAgICAgCi0g
ICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCB0YXJnZXQpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9p
ZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
dGFyZ2V0KQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua0p1bXAoY29kZSwganVt
cC5tX2xhYmVsLCB0YXJnZXQuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KQEAgLTg2NywxMiArODY5
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwg
bGFiZWwsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lk
KiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHZhbHVl
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIo
dm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IHZhbHVlKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29k
ZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkKiBnZXRMaW5rZXJBZGRyZXNzKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVs
LCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBz
dGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBs
YWJlbCkKICAgICB7CiAgICAgICAgIHJldHVybiB0YWdDb2RlUHRyKEFzc2VtYmxlclR5cGU6Omdl
dFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbGFiZWwpLCB0YWcpOwogICAgIH0KQEAgLTg4Miw1NiAr
ODg2LDY0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldENhbGxS
ZXR1cm5PZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBh
dGNoSnVtcChDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoSnVtcChDb2RlTG9jYXRpb25KdW1wPGp1bXBUYWc+IGp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQXNz
ZW1ibGVyVHlwZTo6cmVsaW5rSnVtcChqdW1wLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5k
YXRhTG9jYXRpb24oKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1w
VG9Ob3AoQ29kZUxvY2F0aW9uSnVtcCBqdW1wKQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wVG9Ob3AoQ29kZUxvY2F0aW9uSnVtcDxqdW1w
VGFnPiBqdW1wKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rSnVtcFRvTm9w
KGp1bXAuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hO
ZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hOZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbDxj
YWxsVGFnPiBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24p
CiAgICAgewotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZGVzdGluYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgTmVhckNvZGVQdHJUYWcpOwogICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CiAgICAgICAgICAg
ICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtKdW1wKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0
aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVs
aW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxs
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3Qo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZh
bHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENv
bXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+IGRhdGFMYWJlbENvbXBhY3Qs
IGludDMyX3QgdmFsdWUpCiAgICAgewotICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoQ29t
cGFjdChkYXRhTGFiZWxDb21wYWN0LmRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7CisgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QudGVtcGxhdGUgZGF0
YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVwYXRj
aEludDMyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyLCBpbnQzMl90IHZhbHVl
KQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50
MzIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBkYXRhTGFiZWwzMiwgaW50MzJfdCB2YWx1
ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hJbnQzMihkYXRhTGFiZWwz
Mi5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hQb2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIsIHZvaWQqIHZh
bHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBv
aW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gZGF0YUxhYmVsUHRyLCB2b2lkKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFM
YWJlbFB0ci5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
dm9pZCogcmVhZFBvaW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0cikK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGRhdGFMYWJlbFB0cikKICAgICB7CiAgICAg
ICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpyZWFkUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxv
Y2F0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aExvYWQo
Q29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVMb2NhdGlvbkNvbnZlcnRp
YmxlTG9hZDx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwbGFj
ZVdpdGhMb2FkKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29udmVydGli
bGVMb2FkIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbihDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VXaXRo
QWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHJldmlz
aW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogZW51bSBOZWFyQ2FsbE1vZGUgeyBSZWd1bGFyLCBUYWlsIH07CiAKLWNsYXNzIENvZGVMb2Nh
dGlvbkluc3RydWN0aW9uOwotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWw7Ci1jbGFzcyBDb2RlTG9j
YXRpb25KdW1wOwotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbDsKLWNsYXNzIENvZGVMb2NhdGlvbk5l
YXJDYWxsOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDsKLWNsYXNzIENvZGVM
b2NhdGlvbkRhdGFMYWJlbDMyOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwotY2xh
c3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBD
b2RlTG9jYXRpb25JbnN0cnVjdGlvbjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0
aW9uTGFiZWw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkp1bXA7Cit0ZW1w
bGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNhbGw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9j
YXRpb25EYXRhTGFiZWxDb21wYWN0OwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25EYXRhTGFiZWwzMjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwgcHJldHR5IG11Y2ggZG8t
bm90aGluZyB3cmFwcGVycyBhcm91bmQKIC8vIENvZGVQdHIgKG9yIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCkBAIC01NCwxNjkgKzU0LDIx
MiBAQCBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ7CiAvLyBvZmZzZXRzIGFwYXJ0
LiAgVG8gcmVkdWNlIG1lbW9yeSBvdmVyaGVhZCB3ZSB3aWxsIG9ubHkgcmV0YWluIGEgcG9pbnRl
ciB0bwogLy8gb25lIG9mIHRoZSBpbnN0cnVjdGlvbnMsIGFuZCB3ZSB3aWxsIHVzZSB0aGUgKkF0
T2Zmc2V0IG1ldGhvZHMgcHJvdmlkZWQgYnkKIC8vIENvZGVMb2NhdGlvbkNvbW1vbiB0byBmaW5k
IHRoZSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGUgdG8gbW9kaWZ5LgotY2xhc3MgQ29kZUxvY2F0
aW9uQ29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB7Ci1wdWJsaWM6Ci0gICAg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KTsK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlv
bkNhbGwgY2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
IG5lYXJDYWxsQXRPZmZzZXQoaW50IG9mZnNldCwgTmVhckNhbGxNb2RlKTsKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KTsK
LSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgY29udmVydGli
bGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCk7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3Mg
Q29kZUxvY2F0aW9uQ29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHsK
KyAgICB1c2luZyBCYXNlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CitwdWJsaWM6Cisg
ICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rp
b248cmVzdWx0VGFnPiBpbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBs
YXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4g
bGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
ID0gdGFnPiBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4ganVtcEF0T2Zmc2V0KGludCBvZmZz
ZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkNh
bGw8cmVzdWx0VGFnPiBjYWxsQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uTmVhckNhbGw8cmVzdWx0VGFnPiBuZWFy
Q2FsbEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4g
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8cmVzdWx0VGFnPiBkYXRhTGFi
ZWwzMkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8cmVzdWx0VGFnPiBkYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZyA9IHRhZz4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkPHJlc3VsdFRhZz4gY29udmVydGli
bGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
dm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBCYXNlOjp0ZW1wbGF0
ZSBkYXRhTG9jYXRpb248VD4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQ29kZUxvY2F0aW9uQ29t
bW9uKCkKICAgICB7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9j
YXRpb24pCisgICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IGxvY2F0aW9uKQorICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9u
KQogICAgIHsKICAgICB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENv
ZGVMb2NhdGlvbkluc3RydWN0aW9uIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsK
IHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbigpIHt9Ci0gICAgZXhwbGljaXQg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQot
ICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRp
b25JbnN0cnVjdGlvbigpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkluc3RydWN0aW9u
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25J
bnN0cnVjdGlvbih2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRp
b25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQog
fTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9u
IHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25MYWJlbCA6IHB1Ymxp
YyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwoKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25M
YWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0
aW9uTGFiZWwodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKwor
ICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8bmV3VGFn
PiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPG5ld1RhZz4oQ29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIHsg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6cmV0YWdnZWQo
b2xkVGFnLCBuZXdUYWcpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAg
ICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBDb2RlTG9jYXRp
b25Db21tb248dGFnPjo6dGVtcGxhdGUgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxUPigpOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUgZGF0YUxv
Y2F0aW9uPFQ+KCk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkp1bXAgOiBwdWJsaWMgQ29k
ZUxvY2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRp
b25KdW1wIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBD
b2RlTG9jYXRpb25KdW1wKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24o
bG9jYXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uSnVtcCgpIHsgfQorICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAg
ICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbkp1bXAodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29k
ZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24p
KSB7IH0KIAotICAgIENvZGVMb2NhdGlvbkp1bXAgcmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRy
VGFnIG5ld1RhZykgeyByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KKyAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3
VGFnPgorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6dGVtcGxh
dGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNz
IENvZGVMb2NhdGlvbkNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVi
bGljOgotICAgIENvZGVMb2NhdGlvbkNhbGwoKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9CisgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2Nh
dGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAg
ICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBD
b2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
Pihsb2NhdGlvbikpIHsgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2Rl
TG9jYXRpb25DYWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxs
PG5ld1RhZz4oQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1Rh
Zz4oKSk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9u
TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgotICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25OZWFy
Q2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24sIE5lYXJDYWxsTW9kZSBjYWxsTW9k
ZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pLCBtX2NhbGxNb2RlKGNh
bGxNb2RlKSB7IH0KKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCgpIHsgfQorICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9u
LCBOZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRh
Zz4obG9jYXRpb24pLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KICAgICBleHBsaWNpdCBDb2Rl
TG9jYXRpb25OZWFyQ2FsbCh2b2lkKiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQot
ICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRp
b24pKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwgbV9jYWxsTW9k
ZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyByZXR1cm4gbV9j
YWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9kZSA9IE5lYXJD
YWxsTW9kZTo6UmVndWxhcjsKIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3Mg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4g
ewogcHVibGljOgotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KLSAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24p
Ci0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyKCkgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
MzIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkRhdGFMYWJlbDMyKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9
CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsQ29tcGFjdCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJs
aWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCgpIHsgfQotICAgIGV4cGxpY2l0
IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0
aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikgeyB9CisgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlv
bikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBs
b2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxh
dGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBD
b2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihs
b2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoKSB7IH0KKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4g
bG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsg
fQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlvbikK
LSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0
aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJs
ZUxvYWQoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bihsb2NhdGlvbikgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2Fk
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25D
b252ZXJ0aWJsZUxvYWQodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkg
eyB9CiB9OwogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gQ29kZUxvY2F0aW9uQ29t
bW9uOjppbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25JbnN0cnVj
dGlvbjxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zm
c2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7
Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uKGRhdGFMb2NhdGlvbjxjaGFyKj4o
KSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uPHJlc3VsdFRh
Zz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkp
OwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgQ29kZUxvY2F0aW9uQ29tbW9uOjpsYWJl
bEF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25MYWJlbDxyZXN1bHRUYWc+IENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+OjpsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkxh
YmVsKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxj
aGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSnVtcCBDb2RlTG9j
YXRpb25Db21tb246Omp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRh
Zz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uSnVtcDxy
ZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpqdW1wQXRPZmZzZXQoaW50IG9mZnNl
dCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uSnVtcChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
Q2FsbCBDb2RlTG9jYXRpb25Db21tb246OmNhbGxBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxh
dGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxv
Y2F0aW9uQ2FsbDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpjYWxsQXRPZmZz
ZXQoaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsK
LSAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZz
ZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxy
ZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUg
Q29kZUxvY2F0aW9uTmVhckNhbGwgQ29kZUxvY2F0aW9uQ29tbW9uOjpuZWFyQ2FsbEF0T2Zmc2V0
KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkKK3RlbXBsYXRlPFB0clRhZyB0YWc+
Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbk5lYXJDYWxs
PHJlc3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46Om5lYXJDYWxsQXRPZmZzZXQoaW50
IG9mZnNldCwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RF
X09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChkYXRhTG9j
YXRpb248Y2hhcio+KCkgKyBvZmZzZXQsIGNhbGxNb2RlKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTmVhckNhbGw8cmVzdWx0VGFnPih0YWdDb2RlUHRyPHJlc3VsdFRhZz4oZGF0YUxvY2F0aW9u
PGNoYXIqPigpICsgb2Zmc2V0KSwgY2FsbE1vZGUpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIENvZGVMb2NhdGlvbkNvbW1vbjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50
IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
PgoraW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxyZXN1bHRUYWc+IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxQdHJBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFT
U0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+
KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsMzIgQ29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGlu
dCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
Zz4KK2lubGluZSBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjxyZXN1bHRUYWc+IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+OjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsQ29tcGFjdCBDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDxyZXN1bHRUYWc+
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoaW50IG9m
ZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1
cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBv
ZmZzZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHJlc3VsdFRh
Zz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkp
OwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIENvZGVMb2NhdGlvbkNv
bW1vbjo6Y29udmVydGlibGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRh
ZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkNv
bnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0
aWJsZUxvYWRBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09G
RlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoZGF0
YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlv
bjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNp
b24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjAgKzQ0LDIwIEBAIGJvb2wgc2hvdWxkRHVtcERp
c2Fzc2VtYmx5Rm9yKENvZGVCbG9jayoKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCk7CiB9CiAKLUxpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2Rl
V2l0aG91dERpc2Fzc2VtYmx5KFB0clRhZyB0YWcpCitMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtC
dWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUlt
cGwoKQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKICAgICAKICAgICBBU1NFUlQobV9k
aWRBbGxvY2F0ZSk7CiAgICAgaWYgKG1fZXhlY3V0YWJsZU1lbW9yeSkKLSAgICAgICAgcmV0dXJu
IENvZGVSZWYoKm1fZXhlY3V0YWJsZU1lbW9yeSwgdGFnKTsKKyAgICAgICAgcmV0dXJuIENvZGVS
ZWY8TGlua0J1ZmZlclB0clRhZz4oKm1fZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgCi0gICAgcmV0
dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIodGFnQ29kZVB0cihtX2NvZGUsIHRhZykpKTsKKyAgICByZXR1cm4gQ29kZVJlZjxMaW5rQnVm
ZmVyUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fY29kZSkp
KTsKIH0KIAotTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRo
RGlzYXNzZW1ibHkoUHRyVGFnIHRhZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCitMaW5rQnVm
ZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdp
dGhEaXNhc3NlbWJseUltcGwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7Ci0gICAgQ29kZVJl
ZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkodGFnKTsKKyAgICBDb2Rl
UmVmPExpbmtCdWZmZXJQdHJUYWc+IHJlc3VsdCA9IGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseUltcGwoKTsKIAogICAgIGlmIChtX2FscmVhZHlEaXNhc3NlbWJsZWQpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC03MCwxOCArNzAsMTkgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5r
QnVmZmVyOjpmaW5hbGl6ZQogICAgIHZhX2VuZChhcmdMaXN0KTsKICAgICBvdXQucHJpbnRmKCI6
XG4iKTsKIAotICAgIHVpbnQ4X3QqIGV4ZWN1dGFibGVBZGRyZXNzID0gcmVtb3ZlQ29kZVB0clRh
Zzx1aW50OF90Kj4ocmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50
OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzczx1aW50OF90Kj4oKTsKICAgICBvdXQucHJpbnRmKCIgICAgQ29kZSBhdCBbJXAsICVw
KTpcbiIsIGV4ZWN1dGFibGVBZGRyZXNzLCBleGVjdXRhYmxlQWRkcmVzcyArIHJlc3VsdC5zaXpl
KCkpOwogICAgIAogICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwogICAgIAog
ICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGlzYXNzZW1i
bGVBc3luY2hyb25vdXNseShoZWFkZXIsIHJlc3VsdCwgbV9zaXplLCAiICAgICIpOworICAgICAg
ICBDb2RlUmVmPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUmVmRm9yRGlzYXNzZW1ibHkgPSByZXN1
bHQucmV0YWdnZWQ8RGlzYXNzZW1ibHlQdHJUYWc+KCk7CisgICAgICAgIGRpc2Fzc2VtYmxlQXN5
bmNocm9ub3VzbHkoaGVhZGVyLCBXVEZNb3ZlKGNvZGVSZWZGb3JEaXNhc3NlbWJseSksIG1fc2l6
ZSwgIiAgICAiKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgZGF0
YUxvZyhoZWFkZXIpOwotICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5jb2RlKCksIG1fc2l6ZSwgIiAg
ICAiLCBXVEY6OmRhdGFGaWxlKCkpOworICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5yZXRhZ2dlZENv
ZGU8RGlzYXNzZW1ibHlQdHJUYWc+KCksIG1fc2l6ZSwgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCkp
OwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDggKzYxLDggQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgTGlua0J1ZmZlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+OwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIExhYmVsOwogICAgIHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgSnVtcDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIFBhdGNoYWJsZUp1bXA7CkBAIC0xMjEsMzIgKzEyMSwzNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNl
dCB2YWx1ZXMgYXQgY29kZSBnZW5lcmF0aW9uIHRpbWUuCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgotICAgIHZvaWQg
bGluayhDYWxsIGNhbGwsIEZ1bmMgZnVuY05hbWUsIFB0clRhZyB0YWcpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZywgdHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jPjo6dHlwZT46
OnZhbHVlPj4KKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jIGZ1bmNOYW1lKQogICAgIHsK
LSAgICAgICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24oZnVuY05hbWUsIHRhZyk7CisgICAgICAgIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24oZnVuY05hbWUpOwogICAgICAgICBsaW5rKGNhbGwsIGZ1
bmN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBm
dW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoY2Fs
bC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKICAgICAgICAgY2FsbC5tX2xhYmVsID0gYXBw
bHlPZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGxpbmsoQ2Fs
bCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwp
CiAgICAgewotICAgICAgICBsaW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxhYmVsKSk7CisgICAgICAg
IGxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8dGFnPihsYWJlbCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBqdW1wLm1fbGFiZWwgPSBhcHBseU9mZnNldChq
dW1wLm1fbGFiZWwpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSgpLCBq
dW1wLCBsYWJlbCk7CiAgICAgfQogCi0gICAgdm9pZCBsaW5rKGNvbnN0IEp1bXBMaXN0JiBsaXN0
LCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IHZvaWQgbGluayhjb25zdCBKdW1wTGlzdCYgbGlzdCwgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBs
YWJlbCkKICAgICB7CiAgICAgICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGxpc3QuanVtcHMo
KSkKICAgICAgICAgICAgIGxpbmsoanVtcCwgbGFiZWwpOwpAQCAtMTU4LDcgKzE2Miw4IEBAIHB1
YmxpYzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgdGFyZ2V0
LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENv
ZGVMb2NhdGlvbkxhYmVsIHZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgdm9p
ZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gdmFsdWUp
CiAgICAgewogICAgICAgICBBc3NlbWJsZXJMYWJlbCB0YXJnZXQgPSBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwg
dGFyZ2V0LCB2YWx1ZSk7CkBAIC0xNjYsNTQgKzE3MSw2MyBAQCBwdWJsaWM6CiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIG9idGFpbiBoYW5kbGVzIHRvIGFsbG93IHRoZSBjb2Rl
IHRvIGJlIHJlbGlua2VkIC8gcmVwYXRjaGVkIGxhdGVyLgogICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5cG9pbnQoKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPiBlbnRyeXBvaW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2Rl
TG9jYXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8
dGFnPih0YWdDb2RlUHRyPHRhZz4oY29kZSgpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
Q2FsbCBsb2NhdGlvbk9mKENhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IENvZGVMb2NhdGlvbkNhbGw8dGFnPiBsb2NhdGlvbk9mKENhbGwgY2FsbCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NF
UlQoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9m
ZnNldChjYWxsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHRh
Zz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zm
c2V0KGNhbGwubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBs
b2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8dGFnPiBsb2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxs
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7
CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVz
cyhjb2RlKCksIGFwcGx5T2Zmc2V0KGNhbGwubV9sYWJlbCkpLAorICAgICAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTmVhckNhbGw8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0
YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSksCiAgICAgICAgICAgICBjYWxs
LmlzRmxhZ1NldChDYWxsOjpUYWlsKSA/IE5lYXJDYWxsTW9kZTo6VGFpbCA6IE5lYXJDYWxsTW9k
ZTo6UmVndWxhcik7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQ
YXRjaGFibGVKdW1wIGp1bXAsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25PZihQYXRjaGFi
bGVKdW1wIGp1bXApCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFj
cm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChqdW1wLm1f
anVtcC5tX2xhYmVsKSwgdGFnKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0
YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9m
ZnNldChqdW1wLm1fanVtcC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0
ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25P
ZihMYWJlbCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVs
Lm1fbGFiZWwpLCB0YWcpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4o
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0
KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IGxvY2F0aW9uT2YoRGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbG9jYXRpb25PZihEYXRhTGFiZWxQ
dHIgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFi
ZWwubV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0
YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9m
ZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIGxvY2F0aW9uT2YoRGF0YUxhYmVsMzIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxvY2F0aW9uT2YoRGF0YUxhYmVs
MzIgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIo
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFn
PihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZz
ZXQobGFiZWwubV9sYWJlbCkpKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdCBsb2NhdGlvbk9mKERhdGFMYWJlbENvbXBhY3QgbGFiZWwpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHRhZz4gbG9j
YXRpb25PZihEYXRhTGFiZWxDb21wYWN0IGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJl
c3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5r
ZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAg
IH0KIAotICAgIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsb2NhdGlvbk9mKENvbnZlcnRp
YmxlTG9hZExhYmVsIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxv
Y2F0aW9uQ29udmVydGlibGVMb2FkPHRhZz4gbG9jYXRpb25PZihDb252ZXJ0aWJsZUxvYWRMYWJl
bCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChs
YWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVM
b2FkPHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFw
cGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2Qg
b2J0YWlucyB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGNhbGwsIGdpdmVuIGFzIGFuIG9mZnNl
dCBmcm9tCkBAIC0yMzgsMTMgKzI1MiwzMSBAQCBwdWJsaWM6CiAgICAgLy8gY29tcGxldGUgZ2Vu
ZXJhdGlvbiBvZiB0aGUgY29kZS4gQWx0ZXJuYXRpdmVseSwgY2FsbAogICAgIC8vIGZpbmFsaXpl
Q29kZVdpdGhvdXREaXNhc3NlbWJseSgpIGRpcmVjdGx5IGlmIHlvdSBoYXZlIHlvdXIgb3duIHdh
eSBvZgogICAgIC8vIGRpc3BsYXlpbmcgZGlzYXNzZW1ibHkuCi0gICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29kZVJlZiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoUHRyVGFnKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmIGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJs
eShQdHJUYWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigz
LCA0KTsKIAotICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQorICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgQ29kZVJlZjx0YWc+IGZpbmFsaXplQ29kZVdpdGhvdXREaXNh
c3NlbWJseSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5SW1wbCgpLnRlbXBsYXRlIHJldGFnZ2VkPHRhZz4oKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIENvZGVSZWY8dGFnPiBmaW5h
bGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgeworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFs
IgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LXNlY3VyaXR5Igor
I2VuZGlmCisgICAgICAgIHJldHVybiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGZv
cm1hdCwgYXJncy4uLikudGVtcGxhdGUgcmV0YWdnZWQ8dGFnPigpOworI2lmIENPTVBJTEVSKENM
QU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgfQorCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlUHRyPHRhZz4gdHJhbXBvbGluZUF0KExhYmVs
IGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVQdHIoTWFjcm9Bc3NlbWJsZXI6OkFz
c2VtYmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxh
YmVsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHRhZz4oTWFjcm9Bc3NlbWJs
ZXI6OkFzc2VtYmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zm
c2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgdm9pZCogZGVidWdBZGRyZXNzKCkK
QEAgLTI1OCw2ICsyOTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1i
bGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdp
dGhvdXREaXNhc3NlbWJseUltcGwoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExp
bmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUltcGwoY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpOworCiAjaWYgRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2Nh
dGlvbikKICAgICB7CkBAIC0zMTYsOCArMzUxLDggQEAgcHJpdmF0ZToKIAogI2RlZmluZSBGSU5B
TElaRV9DT0RFX0lGKGNvbmRpdGlvbiwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFn
LCAuLi4pICBcCiAgICAgKFVOTElLRUxZKChjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgID8gKGxpbmtCdWZmZXJSZWZlcmVu
Y2UpLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShyZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19f
KSBcCi0gICAgICAgIDogKGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXRE
aXNhc3NlbWJseShyZXN1bHRQdHJUYWcpKQorICAgICAgICA/IChsaW5rQnVmZmVyUmVmZXJlbmNl
KS5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPihfX1ZBX0FSR1NfXykg
XAorICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzcyLDE3ICszNzcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25D
YWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9u
VGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4g
RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKEFzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJl
c3VsdFRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHJlc3VsdFRhZz4oQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQp
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZN
SGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQpCiAgICAgewotICAg
ICAgICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRoVk1IYWx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhWTUhhbHQoaW5z
dHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
cmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBzdGFydFRhZywg
UHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2Nh
dGlvbkxhYmVsPHN0YXJ0VGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFM
b2NhdGlvbigpKTsKICAgICB9CkBAIC0zODA2LDQ1ICszODA5LDUzIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBzdGF0aWMg
Q29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBh
dGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7
CiAgICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIpCisKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRp
b25MYWJlbDx0YWc+KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJl
bCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2Rl
TG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRk
cmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBp
bml0aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lk
IHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxh
YmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVl
KQogICAgIHsKICAgICAgICAgcmVlbWl0SW5pdGlhbE1vdmVXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25T
dGFydC5kYXRhTG9jYXRpb24oKSwgaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lk
KikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3Ms
IGludDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxs
VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0
VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRh
Zz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICBBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQ
QVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtNDQzOCwxNyArNDQ0OSwxNSBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lk
IGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBj
b2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAg
ICBpZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQogICAgICAgICAgICAgQXNzZW1ibGVy
OjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09G
RlNFVF9DQUxMX1RPX1BPSU5URVIpLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpIHsKLSAgICAgICAgICAg
IGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAg
ICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBB
c3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6VGFpbCkpCisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwu
bV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0
clRhZz4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwo
Y29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIgbV9k
YXRhTWVtb3J5VGVtcFJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gMjMwNzI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTA1LDEyICsxNTA1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIuZG1iSVNIU1QoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENh
bGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1
bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0
VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPHRhZz4gY2FsbCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJN
QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJU
YWcpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9j
YXN0PHZvaWQoKikoKT4oQVJNQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2Nh
dGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2Rl
TG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5h
dGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4g
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24p
CiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlv
blN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAg
fQpAQCAtMTUyOCw0NCArMTUzMCw1MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2go
KSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25M
YWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pCiAgICAg
ewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
KCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQ
dHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZz
ZXQoMCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9C
cmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVn
aXN0ZXJJRCByZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCBy
ZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmV2
ZXJ0QnJhbmNoUHRyV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIHJl
ZywgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSkgJiAweGZmZmYpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4s
IEFkZHJlc3MsIGludDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgdm9p
ZCopCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJl
bDx0YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8
ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlbGlu
a0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2Fs
bFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2Nh
dGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0xNjE5
LDcgKzE2MjksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wKEFSTVJl
Z2lzdGVyczo6UzEsIG1fYXNzZW1ibGVyLmdldEltbShyaWdodC5tX3ZhbHVlLCBBUk1SZWdpc3Rl
cnM6OlMwKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwg
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxhZ1NldChD
YWxsOjpUYWlsKSkKICAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2Fs
bC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
CShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw3ICsxMzgyLDggQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5kbWJJU0hTVCgpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
c3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVt
cChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC0xOTkzLDIyICsxOTk0LDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgfQogCi0g
ICAgCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNh
bGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25U
YWc+CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29k
ZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBG
dW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJl
YWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZVB0clRhZyk7CisgICAgICAg
IHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgp
PihBUk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBib29sIGNhbkp1
bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBh
dGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFn
PiBsYWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHR3b1dvcmRPcFNpemUgPSA0
OwogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdHdvV29yZE9wU2l6ZSAqIDIp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdp
c3RlcklEIHJkLCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmQs
IHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAjaWYgT1MoTElOVVgpCiAgICAgICAgIEFSTXY3
QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92VDNtb3Z0Y21wVDIoaW5zdHJ1Y3Rpb25TdGFydC5k
YXRhTG9jYXRpb24oKSwgcmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihpbml0aWFsVmFsdWUpKTsKQEAgLTIwMTcsMzUgKzIwMjAsNDEgQEAgcHVibGljOgog
ICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdlQzKGluc3RydWN0aW9uU3Rh
cnQuZGF0YUxvY2F0aW9uKCksIGRhdGFUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjpt
YWtlVUludDE2KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUpICYgMHhm
ZmZmKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25B
ZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJl
bCgpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVs
MzI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAg
ICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4oKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFi
ZWwsIEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0
aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0
aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGludDMyX3QpCiAgICAgewog
ICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
IGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRh
Zz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+
IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlv
bikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5j
dGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFSTXY3QXNzZW1i
bGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwogICAgIH0KQEAgLTIxNDQsNyArMjE1Myw4IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBs
aW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgQVJNdjdBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYyICsyOCw0MSBAQAogCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2lu
Y2x1ZGUgIlB0clRhZy5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRD
b2RlUHRyKE9wY29kZUlEIG9wY29kZUlEKQordm9pZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNl
OjpkdW1wV2l0aE5hbWUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlv
biwgY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBBU1NFUlQob3Bj
b2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihvcGNvZGVJRCkpOwotfQotCi12b2lk
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgaWYgKCFl
eGVjdXRhYmxlQWRkcmVzcykgewogICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRh
dGFMb2NhdGlvbigpKSB7Ci0gICAgICAgIG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MoKSksICIpIik7CisgICAgaWYgKGV4ZWN1dGFibGVBZGRyZXNzID09
IGRhdGFMb2NhdGlvbikgeworICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVy
KGV4ZWN1dGFibGVBZGRyZXNzKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBv
dXQucHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRk
cmVzcygpKSwgIiwgZGF0YUxvY2F0aW9uID0gIiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24oKSks
ICIpIik7Ci19Ci0KLXZvaWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsKKyAgICBv
dXQucHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRk
cmVzcyksICIsIGRhdGFMb2NhdGlvbiA9ICIsIFJhd1BvaW50ZXIoZGF0YUxvY2F0aW9uKSwgIiki
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlTExJbnRDb2RlUmVmKE9wY29kZUlEIG9wY29kZUlEKQorYm9vbCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWZCYXNlOjp0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3Nl
bWJseVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJp
bnRTdHJlYW0mIG91dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKG9wY29kZUlEKSk7CisgICAg
cmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCk7
CiB9CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2VtYmxlKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKK2Jvb2wgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlz
YXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShtX2NvZGVQdHIsIHNpemUoKSwg
cHJlZml4LCBvdXQpOworICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUs
IHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKIH0KIAotYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OnRyeVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4KSBjb25zdAotewotICAgIHJl
dHVybiB0cnlUb0Rpc2Fzc2VtYmxlKFdURjo6ZGF0YUZpbGUoKSwgcHJlZml4KTsKLX0KLQotQ1N0
cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5KCkgY29uc3QKK0NTdHJpbmcg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7Ci0gICAgaWYgKCF0cnlUb0Rpc2Fzc2VtYmxlKG91dCwgIiIpKQor
ICAgIGlmICghdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCAiIiwgb3V0KSkKICAgICAg
ICAgcmV0dXJuIENTdHJpbmcoKTsKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCi12
b2lkIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIG1fY29kZVB0ci5kdW1wV2l0aE5hbWUoIkNvZGVSZWYiLCBvdXQpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAyMzA3MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTQgQEAKIC8vIGludG8gdGhlIHByb2Nlc3Nv
ciBhcmUgZGVjb3JhdGVkIHdpdGggdGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRpb25h
bCBBUk0gaGFzCiAvLyB0aGUgbG93ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdo
YXQga2luZCBvZiBwb2ludGVyLCB3ZSBjaGVjayBmb3IgYm90aAogLy8gZGVjb3JhdGVkIGFuZCB1
bmRlY29yYXRlZCBudWxsLgorI2RlZmluZSBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5U
RVIocHRyKSBcCisgICAgQVNTRVJUKCFwdHIgfHwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cHRyKSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAogICAg
IEFTU0VSVChyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCiAjZGVmaW5lIEFT
U0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpIFwKICAgICBBU1NFUlQoIShvZmZzZXQgJiAx
KSkgLy8gTXVzdCBiZSBtdWx0aXBsZSBvZiAyLgogI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX05VTExf
T1JfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgLy8gQW55dGhpbmcgZ29lcyEKICNkZWZpbmUgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKICAgICBBU1NFUlQocHRyKQogI2RlZmluZSBB
U1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KSAvLyBBbnl0aGluZyBnb2VzIQpAQCAtNTIs
NyArNTUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIApAQCAtNjAsMTcgKzYzLDE5IEBAIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKIC8vCiAvLyBGdW5jdGlvblB0ciBzaG91bGQgYmUgdXNlZCB0byB3cmFw
IHBvaW50ZXJzIHRvIEMvQysrIGZ1bmN0aW9ucyBpbiBKU0MKIC8vIChwYXJ0aWN1bGFybHksIHRo
ZSBzdHViIGZ1bmN0aW9ucykuCit0ZW1wbGF0ZTxQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFn
PgogY2xhc3MgRnVuY3Rpb25QdHIgewogcHVibGljOgogICAgIEZ1bmN0aW9uUHRyKCkgeyB9Cisg
ICAgRnVuY3Rpb25QdHIobnVsbHB0cl90KSB7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBGdW5jdGlvblB0cihSZXR1cm5U
eXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykK
LSAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4odmFsdWUsIHRhZykpCisg
ICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgqdmFsdWUpKEFyZ3VtZW50cy4uLikpCisgICAgICAg
IDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIHRhZz4odmFsdWUpKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOworICAgICAgICBhc3NlcnRJc051bGxP
ckNGdW5jdGlvblB0cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNO
b3RQb2lzb25lZChtX3ZhbHVlKTsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiht
X3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFs
dWUpOwogICAgIH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdp
dGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKQEAgLTc4LDEyICs4MywxMiBAQCBw
dWJsaWM6CiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1Mp
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4u
LiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcpCi0gICAgICAgIDogbV92YWx1ZSh0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5
cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1
bmN0aW9uUHRyPHZvaWQqLCB0YWc+KHZhbHVlKSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1
bmN0aW9uUHRyKHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIodmFs
dWUpOwogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1
ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgICAg
IEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKICNl
bmRpZiAvLyBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykKQEAg
LTkxLDU0ICs5Niw3NCBAQCBwdWJsaWM6CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRkFTVENBTExf
Q0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoRkFTVENB
TEwgKnZhbHVlKShBcmd1bWVudHMuLi4pLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnKQot
ICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAg
ICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSkK
KyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFnPih2YWx1ZSkpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CisgICAgICAgIGFzc2Vy
dElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjph
c3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5U
RVIobV92YWx1ZSk7CiAgICAgfQogCiAjZW5kaWYgLy8gQ09NUElMRVJfU1VQUE9SVFMoRkFTVENB
TExfQ0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFs
dWUgJiYgIXN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQdHJU
eXBlPjo6dHlwZT46OnZhbHVlPj4KLSAgICBleHBsaWNpdCBGdW5jdGlvblB0cihQdHJUeXBlIHZh
bHVlLCBQdHJUYWcgdGFnKQorICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKFB0clR5cGUgdmFsdWUp
CiAgICAgICAgIC8vIFVzaW5nIGEgQy1jdHlsZSBjYXN0IGhlcmUgdG8gYXZvaWQgY29tcGlsZXIg
ZXJyb3Igb24gUlZUQzoKICAgICAgICAgLy8gRXJyb3I6ICAjNjk0OiByZWludGVycHJldF9jYXN0
IGNhbm5vdCBjYXN0IGF3YXkgY29uc3Qgb3Igb3RoZXIgdHlwZSBxdWFsaWZpZXJzCiAgICAgICAg
IC8vIChJIGd1ZXNzIG9uIFJWVEMgZnVuY3Rpb24gcG9pbnRlcnMgaGF2ZSBhIGRpZmZlcmVudCBj
b25zdG5lc3MgdG8gR0NDL01TVkM/KQotICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2
b2lkKiwgdGFnPih2YWx1ZSkpCiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2
YWx1ZSk7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAg
ICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAg
ICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVM
TF9PUl9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
RnVuY3Rpb25QdHIoRnVuY3Rpb25QdHIgb3RoZXIsIFB0clRhZyB0YWcpCi0gICAgICAgIDogbV92
YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG90aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRh
ZykpCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4p
OworCisgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgorICAgIEZ1bmN0aW9uUHRyPG90aGVy
VGFnPiByZXRhZ2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0
cihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgUG9pc29uZWRNYXNtUHRyOjph
c3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHI8b3RoZXJUYWc+KCk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxv
dGhlclRhZz4oKnRoaXMpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cik7Ci0KICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0
CiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92
YWx1ZSk7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPFB0
clRhZyBuZXdUYWc+CisgICAgdm9pZCogcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0
CisgICAgeworICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92
YWx1ZSk7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dGFnLCBuZXdUYWc+KG1fdmFsdWUp
OworICAgIH0KKwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVl
OyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90
aGVyLm1fdmFsdWU7IH0KKwogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+
CisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoY29uc3QgRnVuY3Rpb25QdHI8b3RoZXJUYWc+JiBv
dGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKHJldGFnQ29kZVB0cjxvdGhlclRhZywgdGFnPihvdGhl
ci5leGVjdXRhYmxlQWRkcmVzcygpKSkKKyAgICB7CisgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6
YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFM
SURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgIH0KKwogICAgIHZvaWQqIG1fdmFsdWUgeyBu
dWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBGdW5jdGlvblB0
cjsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEZ1bmN0aW9uUHRyKSA9PSBzaXplb2Yodm9p
ZCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQlVJTFRJ
Tl9JU19UUklWSUFMTFlfQ09QWUFCTEUpCi1zdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5X2Nv
cHlhYmxlKEZ1bmN0aW9uUHRyKSwgIiIpOworc3RhdGljX2Fzc2VydChfX2lzX3RyaXZpYWxseV9j
b3B5YWJsZShGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KSwgIiIpOwogI2VuZGlmCiAKIC8v
IFJldHVybkFkZHJlc3NQdHI6CkBAIC0xNTgsOCArMTgzLDkgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIGV4cGxpY2l0
IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCi0gICAgICAgIDogbV92YWx1
ZShmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9u
KQorICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpCiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90
UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92
YWx1ZSk7CkBAIC0xODMsOSArMjA5LDE2IEBAIHByaXZhdGU6CiAvLyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6CiAvLwogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNob3VsZCBiZSB1c2VkIHRvIHdy
YXAgcG9pbnRlcnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgeworcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyB2b2lkIGR1bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9p
ZCogZGF0YUxvY2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KTsKK307
CisKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogcHVibGljOgotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpID0gZGVmYXVs
dDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIobnVsbHB0cl90KSA6IG1fdmFsdWUobnVsbHB0
cikgeyB9CiAKICAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIodm9pZCogdmFsdWUp
CiAjaWYgQ1BVKEFSTV9USFVNQjIpCkBAIC0xOTUsNiArMjI4LDcgQEAgcHVibGljOgogICAgICAg
ICA6IG1fdmFsdWUodmFsdWUpCiAjZW5kaWYKICAgICB7CisgICAgICAgIGFzc2VydElzVGFnZ2Vk
V2l0aCh2YWx1ZSwgdGFnKTsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAg
ICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAjaWYgQ1BVKEFSTV9USFVNQjIpCkBAIC0yMDcsMTcgKzI0
MSwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKHZhbHVlLCB0YWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0Owog
ICAgICAgICByZXN1bHQubV92YWx1ZSA9IFBvaXNvbmVkTWFzbVB0cih2YWx1ZSk7CiAgICAgICAg
IHJlc3VsdC5tX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNyZWF0ZUxMSW50
Q29kZVB0cihPcGNvZGVJRCBjb2RlSWQpOwotCiAgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKFJldHVybkFkZHJlc3NQdHIgcmEpCi0gICAgICAgIDogbV92YWx1ZShyYS52YWx1ZSgp
KQorICAgICAgICA6IG1fdmFsdWUodGFnQ29kZVB0cjx0YWc+KHJhLnZhbHVlKCkpKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQocmEudmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVChy
YS52YWx1ZSgpKTsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAgICAgICAg
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZS51bnBvaXNvbmVkKCkpOwpAQCAtMjI1
LDkgKzI1OSwxMiBAQCBwdWJsaWM6CiAKICAgICBQb2lzb25lZE1hc21QdHIgcG9pc29uZWRQdHIo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZykgY29uc3QKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgbmV3VGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFn
Z2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJl
c3MoKSwgb2xkVGFnLCBuZXdUYWcpKTsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+KCk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8bmV3VGFnPigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CkBAIC0yMzYsNiArMjczLDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAgICAgICAgIHJldHVybiBtX3Zh
bHVlLnVucG9pc29uZWQ8VD4oKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
dm9pZCo+CisgICAgVCB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgpOworICAgICAgICByZXR1cm4gdW50YWdD
b2RlUHRyPFQsIHRhZz4obV92YWx1ZS51bnBvaXNvbmVkKCkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBUIHJldGFnZ2VkRXhl
Y3V0YWJsZUFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1Bv
aXNvbmVkKCk7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1f
dmFsdWUudW5wb2lzb25lZCgpKTsKKyAgICB9CisKICNpZiBDUFUoQVJNX1RIVU1CMikKICAgICAv
LyBUbyB1c2UgdGhpcyBwb2ludGVyIGFzIGEgZGF0YSBhZGRyZXNzIHJlbW92ZSB0aGUgZGVjb3Jh
dGlvbi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CkBAIC0yNTEsNyArMzAzLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAg
ICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSA/IHJlbW92ZUNvZGVQdHJUYWcobV92YWx1ZS51bnBv
aXNvbmVkKCkpIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFn
PihtX3ZhbHVlLnVucG9pc29uZWQoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI4MSwxMCArMzMz
LDEzIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWU+PgogICAgIG9wZXJhdG9y
IFQoKSA9IGRlbGV0ZTsKIAotICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKLSAgICAKKyAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBu
YW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2Nh
dGlvbigpLCBuYW1lLCBvdXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdCB7IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KKwogICAgIGVudW0g
RW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKICAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7
IERlbGV0ZWRWYWx1ZSB9OwogICAgIApAQCAtMzEwLDkgKzM2NSwxMCBAQCBwcml2YXRlOgogICAg
IFBvaXNvbmVkTWFzbVB0ciBtX3ZhbHVlOwogfTsKIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KIHN0
cnVjdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsg
fQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYSwg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPiYgYSwgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4mIGIpCiAgICAgewogICAg
ICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KQEAgLTMyNCwyMyArMzgwLDI5IEBAIHN0cnVjdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKIC8vIEEgcmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBv
ZiBKSVQgZ2VuZXJhdGVkIGNvZGUuICBBIENvZGVSZWYgY29uc2lzdHMgb2YgYQogLy8gcG9pbnRl
ciB0byB0aGUgY29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3aXRoaW4g
d2hpY2ggaXQKIC8vIHdhcyBhbGxvY2F0ZWQuCi1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
eworY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZSB7Citwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1i
bHlQdHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7
CisgICAgc3RhdGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90KTsKK307CisKK3RlbXBsYXRlPFB0clRh
ZyB0YWc+CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZkJhc2UgewogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVz
ZSBpdCdzIGRhbmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKICAgICAvLyB0
byBiZSBlYXN5IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cu
Ci0gICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyKQorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPiBjb2RlUHRyKQogICAgICAgICA6IG1fY29kZVB0cihjb2RlUHRyKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkKLSAgICB7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZigpID0gZGVmYXVsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihSZWY8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4mJiBleGVjdXRhYmxlTWVtb3J5LCBQdHJUYWcgdGFnKQotICAg
ICAgICA6IG1fY29kZVB0cih0YWdDb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCksIHRh
ZykpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFJlZjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiYmIGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIDogbV9jb2RlUHRyKHRhZ0NvZGVQdHI8dGFn
PihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKSkKICAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1v
cnkoV1RGTW92ZShleGVjdXRhYmxlTWVtb3J5KSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2V4
ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsKQEAgLTM1MSwyNyArNDEzLDMxIEBAIHB1Ymxp
YzoKICAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciBy
ZWZlcnMgdG8gY29kZSB0aGF0IGlzCiAgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRo
cm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKICAgICAvLyB0aGF0
IGNvZGVQdHIgaXMgaW1tb3J0YWwuCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZVB0cikKICAgICB7CiAgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29kZVB0cik7CiAgICAgfQogICAgIAotICAgIC8vIEhl
bHBlciBmb3IgY3JlYXRpbmcgc2VsZi1tYW5hZ2VkIGNvZGUgcmVmcyBmcm9tIExMSW50LgotICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlTExJbnRDb2RlUmVmKE9wY29kZUlE
IGNvZGVJZCk7Ci0KICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7
CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBjb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVQdHI7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
dGFnZ2VkQ29kZShQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSBjb25zdAorICAgIHRlbXBs
YXRlPFB0clRhZyBuZXdUYWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4gcmV0
YWdnZWRDb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHIudGVtcGxh
dGUgcmV0YWdnZWQ8bmV3VGFnPigpOworICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdU
YWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG5ld1RhZz4gcmV0YWdnZWQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZVB0ci5yZXRhZ2dlZChvbGRUYWcsIG5ld1RhZyk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8bmV3VGFnPigqdGhpcyk7CiAg
ICAgfQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdApAQCAtMzgxLDIyICs0NDcsNDMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAotICAgIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CisgICAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGUocmV0YWdnZWRDb2RlPERpc2Fzc2VtYmx5UHRy
VGFnPigpLCBzaXplKCksIHByZWZpeCwgb3V0KTsKKyAgICB9CiAgICAgCi0gICAgYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlKGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKKyAgICBib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShyZXRhZ2dlZENvZGU8RGlzYXNzZW1ibHlQdHJU
YWc+KCksIHNpemUoKSwgcHJlZml4KTsKKyAgICB9CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0OworICAgIENTdHJpbmcgZGlzYXNzZW1ibHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6
OmRpc2Fzc2VtYmx5KHJldGFnZ2VkQ29kZTxEaXNhc3NlbWJseVB0clRhZz4oKSwgc2l6ZSgpKTsK
KyAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jb2RlUHRyOyB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV9jb2RlUHRyLmR1bXBXaXRoTmFtZSgiQ29kZVJlZiIsIG91dCk7CisgICAgfQogCiBwcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7CisgICAgdGVtcGxhdGU8
UHRyVGFnIG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8b3RoZXJUYWc+JiBvdGhlckNvZGVSZWYpCisgICAgICAgIDogbV9jb2Rl
UHRyKG90aGVyQ29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czx0YWc+KCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KG90aGVyQ29kZVJlZi5tX2V4
ZWN1dGFibGVNZW1vcnkpCisgICAgeyB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBtX2NvZGVQdHI7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0
YWJsZU1lbW9yeTsKKworICAgIHRlbXBsYXRlPFB0clRhZz4gZnJpZW5kIGNsYXNzIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjsKIH07CiAKLWlubGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25QdHIoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitpbmxpbmUgRnVu
Y3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gcHRy
KQogICAgIDogbV92YWx1ZShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkKIHsKICAgICBQb2lzb25l
ZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CkBAIC00MDcsMTEgKzQ5NCwx
MSBAQCBpbmxpbmUgRnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKE1hY3JvQXNzCiBuYW1lc3BhY2Ug
V1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IHsKLSAg
ICB0eXBlZGVmIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaCBIYXNoOwordGVtcGxhdGU8
SlNDOjpQdHJUYWcgdGFnPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPj4geworICAgIHR5cGVkZWYgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNo
PHRhZz4gSGFzaDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0
cj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cj4g
eyB9OwordGVtcGxhdGU8SlNDOjpQdHJUYWcgdGFnPiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4+IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOTUsMTIg
KzMzOTUsMTQgQEAgcHVibGljOgogICAgICAgICBhYm9ydFdpdGhSZWFzb24ocmVhc29uKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlv
blRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChD
b2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihNSVBTQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJUYWcpOworICAgICAg
ICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKiko
KT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9u
U3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC0zNDE5
LDQ0ICszNDIxLDUyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGlj
IGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyPHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBD
b2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlv
bkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0ciBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoMCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0
YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBNSVBT
QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9Nb3ZlKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9u
KCksIGltbVRlbXBSZWdpc3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnQ+KGluaXRpYWxWYWx1ZSkg
JiAweGZmZmYpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25M
YWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgaW50MzJfdCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgaW50MzJfdCkK
ICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCB2b2lkKikKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIHZv
aWQqKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywg
UHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RU
YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFn
PiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAg
IE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtMzQ2OCw3ICszNDc4LDggQEAgcHJp
dmF0ZToKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCi0gICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IGlmIChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKICAgICAgICAgICAgIE1JUFNBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
OCwxNyArMjk4LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5n
UG9pbnRUcnVuY2F0ZSgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQogICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSB7IHJldHVybiBpc1NTRTJQcmVzZW50KCk7
IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSB7IHJldHVybiBp
c1NTRTJQcmVzZW50KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3Vs
dFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRU
YWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAg
ICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludDMyX3Qq
PihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5k
YXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uUHRyPHJlc3VsdFRhZz4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGNhbGwuZGF0YUxvY2F0aW9uKCkpICsgb2Zmc2V0KSk7CiAgICAgfQog
CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICBzdGF0
aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAg
ICB7CiAgICAgICAgIGNvbnN0IGludCBvcGNvZGVCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0IGlu
dCBtb2RSTUJ5dGVzID0gMTsKQEAgLTMxNyw4ICszMTksOSBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CiAgICAgICAgIHJl
dHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3RhbEJ5dGVzKTsKICAgICB9Ci0gICAgCi0gICAg
c3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVzID0g
MTsKICAgICAgICAgY29uc3QgaW50IG1vZFJNQnl0ZXMgPSAxOwpAQCAtMzI4LDggKzMzMSw5IEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50
U2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMp
OwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxh
YmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IGlu
dCBvcGNvZGVCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0IGludCBtb2RSTUJ5dGVzID0gMTsKQEAg
LTMzOSwzMCArMzQzLDM1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0g
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRP
ZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0
cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIHJlZywgdm9pZCogaW5pdGlhbFZhbHVlKQorCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9u
U3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAg
ICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19jbXBsX2lyX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25T
dGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0
aWFsVmFsdWUpLCByZWcpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGlu
c3RydWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghYWRkcmVzcy5vZmZzZXQpOwogICAgICAgICBYODZBc3NlbWJs
ZXI6OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRh
YmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCAw
LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5z
dHJ1Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCBpbnQzMl90IGluaXRpYWxWYWx1ZSkKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNl
bWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFhZGRyZXNzLm9mZnNldCk7CiAgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmV2ZXJ0SnVtcFRvX2NtcGxfaW1fZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIGluaXRpYWxWYWx1ZSwgMCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQ
dHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4g
Y2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBY
ODZBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtMzcwLDcgKzM3OSw4IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAg
ICAgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAzLDggKzEyMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXJfZGlzcDgoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7
CiAgICAgICAgIHJldHVybiBEYXRhTGFiZWxDb21wYWN0KHRoaXMpOwogICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0
IGRhdGFMYWJlbENvbXBhY3QsIGludDMyX3QgdmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJl
bENvbXBhY3Q8dGFnPiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KHZhbHVlKSk7CiAg
ICAgICAgIEFzc2VtYmxlclR5cGVfVDo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVsQ29tcGFjdC5k
YXRhTG9jYXRpb24oKSwgdmFsdWUpOwpAQCAtMzg3OSwxMiArMzg4MCwxNCBAQCBwdWJsaWM6CiAg
ICAgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9j
YXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBp
bnN0cnVjdGlvblN0YXJ0KQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0
aEhsdChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxv
Y2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3Nl
bWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNz
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
XzY0LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4NCw5ICsxODg0
LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2lu
dEFicygpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVh
ZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVhZFBv
aW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEp
LmRhdGFMb2NhdGlvbigpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0
cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CiAgICAg
fQogCiAgICAgYm9vbCBoYXZlU2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBt
X2FsbG93U2NyYXRjaFJlZ2lzdGVyOyB9CkBAIC0xODk0LDggKzE4OTUsOSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAotICAgIHN0YXRp
YyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgY29uc3QgaW50IHJleEJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG9w
Y29kZUJ5dGVzID0gMTsKQEAgLTE5MDQsOCArMTkwNiw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAgICAgICAgcmV0
dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaDMyV2l0aFBhdGNoT25SZWdpc3Rl
cihDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaDMyV2l0
aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgY29uc3QgaW50IHJleEJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG9w
Y29kZUJ5dGVzID0gMTsKQEAgLTE5MTQsMzggKzE5MTcsNDUgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAgICBy
ZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAotICAg
IHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRP
ZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihsYWJlbCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2Nh
dGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMiBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZCcmFuY2gzMldpdGhQYXRjaE9uUmVnaXN0ZXIobGFi
ZWwpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBBZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgQWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgWDg2QXNzZW1i
bGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3Jh
dGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNl
bWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1
Y3Rpb25TdGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25T
dGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBYODZB
c3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZsX2kzMnIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRh
YmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBp
bml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkK
ICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdnFfaTY0cihpbnN0
cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluaXRpYWxWYWx1ZSksIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVz
dFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxU
YWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsK
ICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisg
ICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25Q
dHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NB
TExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CiAgICAgfQpAQCAtMTk2Niw3ICsxOTc2LDggQEAgcHJpdmF0ZToKIAogICAgIGZyaWVuZCBjbGFz
cyBMaW5rQnVmZmVyOwogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25Q
dHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6TmVhcikpCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNh
bGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSksIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
MTggKzE0NCwxOCBAQCBib29sIGlzU3BlY2lhbEdQUihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b21waWxlKEdlbmVyYXRvciYmIGdlbmVyYXRlKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGNvbXBpbGUoR2VuZXJhdG9yJiYgZ2VuZXJhdGUpCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICBnZW5lcmF0ZShqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIG51bGxwdHIpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENv
ZGVQdHJUYWcsICJ0ZXN0bWFzbSBjb21waWxhdGlvbiIpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJ0ZXN0bWFzbSBjb21waWxhdGlvbiIpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci1UIGludm9r
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1Qg
aW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdD
RnVuY3Rpb25QdHIoY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRh
Zyk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKU0Vu
dHJ5UHRyVGFnPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBUICgqZnVu
Y3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihl
eGVjdXRhYmxlQWRkcmVzcyk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9
CkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVy
KCkKICAgICB1bnNpZ25lZCBwcm9iZUNhbGxDb3VudCA9IDA7CiAgICAgYm9vbCBjb250aW51YXRp
b25XYXNSZWFjaGVkID0gZmFsc2U7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29udGlu
dWF0aW9uID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvbnRpbnVhdGlvbiA9IGNvbXBpbGUoWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHdlIHJlYWNoZWQg
dGhlIGNvbnRpbnVhdGlvbi4KICAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQm
KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsrOwpAQCAtNjEwLDcgKzYxMCw3IEBAIHZv
aWQgdGVzdFByb2JlTW9kaWZpZXNQcm9ncmFtQ291bnRlcigpCiAgICAgICAgIC8vIFdyaXRlIGV4
cGVjdGVkIHZhbHVlcyBpbnRvIHRoZSByZWdpc3RlcnMuCiAgICAgICAgIGppdC5wcm9iZShbJl0g
KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsr
OwotICAgICAgICAgICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29kZVB0cihjb250aW51YXRp
b24uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgICAgICAg
ICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29kZVB0cihjb250aW51YXRpb24uY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9KTsKIAogICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyMzA3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCi1Db21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNv
ZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQorQ29t
cGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gYnlwcm9k
dWN0cykKICAgICA6IG1fY29kZVJlZihjb2RlUmVmKQogICAgICwgbV9ieXByb2R1Y3RzKFdURk1v
dmUoYnlwcm9kdWN0cykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCwxNyArNDgsMTcgQEAgY2xhc3Mg
Q29tcGlsYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBz
dGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IENvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiwg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBDb21waWxhdGlvbihDb21waWxhdGlvbiYmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29t
cGlsYXRpb24oKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYu
Y29kZSgpOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+
IGNvZGVSZWYoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWY7IH0KICAgICAKICAgICBDU3RyaW5n
IGRpc2Fzc2VtYmx5KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmRpc2Fzc2VtYmx5KCk7IH0K
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlUmVmOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBtX2NvZGVSZWY7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBDb21waWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYgcHJvYykK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IG51bGxwdHIpOwogCi0gICAgcmV0dXJuIENvbXBpbGF0aW9uKEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgSklUQ29kZVB0clRhZywgIkIzOjpDb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXBy
b2R1Y3RzKCkpOworICAgIHJldHVybiBDb21waWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJCMzo6Q29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5OSwyMCArNDk5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGp1bXBUYWJsZSA9IHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cio+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKE1hY3JvQXNzZW1ibGVyQ29kZVB0cikgKiB0
YWJsZVNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAg
ICAgICAgICB1c2luZyBKdW1wVGFibGVDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
U3dpdGNoUHRyVGFnPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBUYWJsZUNvZGVQdHIq
IGp1bXBUYWJsZSA9IHN0YXRpY19jYXN0PEp1bXBUYWJsZUNvZGVQdHIqPigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihKdW1w
VGFibGVDb2RlUHRyKSAqIHRhYmxlU2l6ZSkpOworCiAgICAgICAgICAgICAgICAgICAgICAgICBH
UFJSZWcgaW5kZXggPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgcG9pc29uU2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBQdHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29u
U2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoanVtcFRhYmxlKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIGluZGV4LCBD
Q2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIHN3aXRjaFRhZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZXNlIGxhYmVscyBhcmUgZ3VhcmFudGVlZCB0byBiZSBwb3B1bGF0ZWQg
YmVmb3JlIGVpdGhlciBsYXRlIHBhdGhzIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
aW5rIHRhc2tzIHJ1bi4KQEAgLTUyMSwxNCArNTIxLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNVbmhhbmRsZWRJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxUaHJvdWdoID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHMubGFzdCgpLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFRhYmxlQ29kZVB0ciBmYWxsVGhyb3VnaCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4oKmxhYmVscy5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGVT
aXplOyBpLS07KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBU
YWJsZVtpXSA9IGZhbGxUaHJvdWdoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsYWJlbEluZGV4ID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0YWJsZUluZGV4IDogaGFuZGxlZEluZGljZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbdGFibGVJbmRleF0g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVsc1tsYWJlbEluZGV4KytdLCBzd2l0Y2hUYWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW3RhYmxlSW5k
ZXhdID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPigqbGFiZWxzW2xhYmVs
SW5kZXgrK10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw5ICsxMjUsOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQcm9jCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBwdHIsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCitUIGludm9rZShNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIocHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgIHZvaWQqIGV4ZWN1dGFi
bGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHI8QjNDb21waWxhdGlvblB0clRhZz4ocHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJp
dHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKICAgICBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KQEAgLTEzMDMzLDggKzEzMDMzLDggQEAg
dm9pZCB0ZXN0SW50ZXJwcmV0ZXIoKQogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgVmVjdG9yPEJveDxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPj4gbGFiZWxzID0gcGFyYW1zLnN1Y2Nlc3NvckxhYmVscygpOwogCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2Fz
dDxNYWNyb0Fzc2VtYmxlckNvZGVQdHIqPigKLSAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygp
LmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIpICogbGFiZWxzLnNp
emUoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIzQ29tcGlsYXRpb25Q
dHJUYWc+KiBqdW1wVGFibGUgPSBiaXR3aXNlX2Nhc3Q8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIz
Q29tcGlsYXRpb25QdHJUYWc+Kj4oCisgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGRE
YXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEIzQ29tcGlsYXRpb25QdHJU
YWc+KSAqIGxhYmVscy5zaXplKCkpKTsKIAogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBw
YXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgR1BSUmVnIHBvaXNvblNjcmF0Y2ggPSBw
YXJhbXMuZ3BTY3JhdGNoKDEpOwpAQCAtMTMwNDMsMTMgKzEzMDQzLDEyIEBAIHZvaWQgdGVzdElu
dGVycHJldGVyKCkKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRjaCk7CiAgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIHBhcmFtc1swXS5ncHIo
KSwgQ0NhbGxIZWxwZXJzOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBqaXQu
eG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBQdHJUYWcgc3dpdGNo
VGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICBqaXQuanVtcChzY3JhdGNoLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgaml0Lmp1bXAo
c2NyYXRjaCwgQjNDb21waWxhdGlvblB0clRhZyk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICBbJiwganVtcFRhYmxlLCBsYWJlbHNdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxh
YmVscy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbaV0g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVsc1tpXSwgc3dpdGNoVGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0Nv
bXBpbGF0aW9uUHRyVGFnPigqbGFiZWxzW2ldKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfSk7CiAgICAgCkBAIC0xMzI5OCwxMSArMTMyOTcsMTEgQEAgdm9pZCB0ZXN0RW50cnlTd2l0
Y2hTaW1wbGUoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENv
ZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVs
KDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFR3
byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5
cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRh
Zz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFn
Pihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3Ri
MyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9u
UHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDSyhpbnZva2U8aW50Pihs
YWJlbE9uZSwgMSwgMikgPT0gMyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4obGFiZWxUd28sIDEs
IDIpID09IC0xKTsKQEAgLTEzMzMxLDExICsxMzMzMCwxMSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRj
aE5vRW50cnlTd2l0Y2goKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJv
Yywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSks
IEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2lu
dExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBs
YWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9j
LmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlv
blB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywg
InRlc3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBp
bGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBp
bGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDS19FUShpbnZv
a2U8aW50PihsYWJlbE9uZSwgMSwgMiksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxh
YmVsVHdvLCAxLCAyKSwgMyk7CkBAIC0xMzQxOCwxMSArMTM0MTcsMTEgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHMoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2Vu
ZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50
TGFiZWwoMSksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhy
ZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENv
ZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxh
YmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2Mu
ZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRy
VGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjND
b21waWxhdGlvblB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0Nv
bXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CiAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29k
ZVB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVD
S19FUShpbnZva2U8aW50PihsYWJlbE9uZSwgMSwgMiwgMTApLCAzKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50PihsYWJlbFR3bywgMSwgMiwgMTApLCAtMSk7CkBAIC0xMzUzNSwxMSArMTM1MzQs
MTEgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmRObwogICAgIENDYWxs
SGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSwgSklUQ29kZVB0
clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRy
eXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIz
Q29tcGlsYXRpb25QdHJUYWc+IGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29t
cGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxUaHJlZSA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJl
bCgyKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmID0gRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBp
bGF0aW9uIik7CiAKICAgICBDSEVDS19FUShpbnZva2U8aW50PihsYWJlbE9uZSwgMSwgMiwgMTAs
IGZhbHNlKSwgMyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxUd28sIDEsIDIsIDEw
LCBmYWxzZSksIC0xKTsKQEAgLTEzNjEzLDEwICsxMzYxMiwxMCBAQCB2b2lkIHRlc3RFbnRyeVN3
aXRjaExvb3AoKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgwKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENv
ZGVQdHJUYWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxh
YmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2Mu
ZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRy
VGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRl
c3RiMyBjb21waWxhdGlvbiIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0
aW9uUHRyVGFnPiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0
aW9uUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CiAKICAgICBDSEVDSyhpbnZva2U8aW50
PihsYWJlbE9uZSwgMCkgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4obGFiZWxPbmUsIDQy
KSA9PSA0Myk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTAgKzc0LDEw
IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKENvZGUmIGNvZGUsIFByaW4KICAgICBhdXRvIGR1
bXBBc21SYW5nZSA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydExhYmVsLCBDQ2FsbEhl
bHBlcnM6OkxhYmVsIGVuZExhYmVsKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0TGFi
ZWwuaXNTZXQoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZExhYmVsLmlzU2V0KCkpOwot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihz
dGFydExhYmVsKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGVuZExhYmVsKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgZGlzYXNzZW1ibGUo
c3RhcnQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKSAt
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBhc21Q
cmVmaXgsIG91dCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFn
PiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4oc3RhcnRM
YWJlbCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFnPiBlbmQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KGVuZExhYmVsKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW5kLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkgPj0gc3Rh
cnQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSk7CisgICAgICAgIGRpc2Fzc2VtYmxlKHN0YXJ0
LCBlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSAtIHN0YXJ0LmRhdGFMb2NhdGlvbjx1aW50
cHRyX3Q+KCksIGFzbVByZWZpeCwgb3V0KTsKICAgICB9OwogCiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fYmxvY2tzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwxMyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlCiAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQ
dHJUYWcsICJ0ZXN0YWlyIGNvbXBpbGF0aW9uIiksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7
CisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywg
InRlc3RhaXIgY29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBpbnZva2UoY29u
c3QgQjM6OkNvbXBpbGF0aW9uJiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAg
IHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIoY29kZS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRhZyk7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBCM0NvbXBpbGF0aW9uUHRyVGFnKTsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4u
LikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRkcmVzcyk7
CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxOCwxNCArODE4LDEzIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9LCAmdm1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0Q2FsbExvY2F0aW9ucygKLSAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykp
LAotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0
UGF0aENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xv
d1BhdGhDYWxsKSksCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihhZGRyZXNzT2ZM
aW5rRnVuY3Rpb25DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0UGF0aENhbGwpKTsKIAotICAgICAgICAg
ICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCAmdm0pOwogICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29k
ZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwpAQCAtODU1LDEwICs4NTQsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogCi0gICAg
ICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhHZXR0ZXJTZXR0ZXJQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5j
dGlvblB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNz
b3Iub3BhcXVlLCBjYWxsVGFnKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21B
Y2Nlc3Nvcik7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBD
dXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpCkBAIC0x
MDAwLDEyICs5OTgsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgICAgIGlmICghcmVhbGxvY2F0aW5nKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSk+KGJhc2VHUFIpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHIo
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHksIGNhbGxUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hh
dmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQg
c3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMTAxMywxMiArMTAxMCwxMSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKT4oCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRh
ZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRp
b25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCBjYWxsVGFnKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHM8RnVuY3Rpb25UeXBlPihzdGQ6OmdldDxBcmd1bWVudHNJbmRleD4obV9hcmd1bWVu
dHMpLi4uKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKHRhZyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRp
b25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgYXV0byBmdW5jdGlv
biA9IG1fZnVuY3Rpb247CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxs
LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihmdW5jdGlvbikp
OwogICAgICAgICB9KTsKIAogICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKG1fcmVzdWx0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9u
IDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0
QXJyYXlNb2RlRm9yU3RydWMKIHN0cnVjdCBCeVZhbEluZm8gewogICAgIEJ5VmFsSW5mbygpIHsg
fQogCi0gICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1
bXAgbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCBi
YWRUeXBlSnVtcFRvTmV4dEhvdFBhdGgsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8
SlNFbnRyeVB0clRhZz4gbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJU
YWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PiBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSwgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCBiYWRUeXBl
SnVtcFRvTmV4dEhvdFBhdGgsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCiAgICAg
ICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG5vdEluZGV4SnVt
cChub3RJbmRleEp1bXApCiAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCkBAIC0y
NDQsOSArMjQ0LDkgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKLSAgICBDb2RlTG9jYXRpb25KdW1wIG5vdEluZGV4SnVtcDsKLSAgICBD
b2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2Vw
dGlvbkhhbmRsZXI7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBub3RJbmRl
eEp1bXA7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBiYWRUeXBlSnVtcDsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25I
YW5kbGVyOwogICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7IC8vIFRoZSBhcnJheSBtb2RlIHRo
YXQgd2FzIGJha2VkIGludG8gdGhlIGlubGluZSBKSVQgY29kZS4KICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZTsKICAgICBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsMjUgKzk3LDI1IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgp
KTsKIH0KIAotQ29kZUxvY2F0aW9uTmVhckNhbGwgQ2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9j
YXRpb24oKQorQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gQ2FsbExpbmtJbmZv
OjpjYWxsUmV0dXJuTG9jYXRpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgp
KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsUmV0dXJuTG9jYXRpb25P
clBhdGNoYWJsZUp1bXAsIFJlZ3VsYXIpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2Fs
bDxKU0VudHJ5UHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwgUmVn
dWxhcik7CiB9CiAKLUNvZGVMb2NhdGlvbkp1bXAgQ2FsbExpbmtJbmZvOjpwYXRjaGFibGVKdW1w
KCkKK0NvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gQ2FsbExpbmtJbmZvOjpwYXRjaGFi
bGVKdW1wKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSgpID09IERpcmVjdFRhaWxD
YWxsKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChtX2NhbGxSZXR1cm5Mb2NhdGlvbk9y
UGF0Y2hhYmxlSnVtcCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRh
Zz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXApOwogfQogCi1Db2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgQ2FsbExpbmtJbmZvOjpob3RQYXRoQmVnaW4oKQorQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPEpTRW50cnlQdHJUYWc+IENhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0VudHJ5UHRyVGFnPihtX2hvdFBhdGhCZWdp
bk9yU2xvd1BhdGhTdGFydCk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIENhbGxMaW5rSW5mbzo6
c2xvd1BhdGhTdGFydCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkp
OwogICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIz
MDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NSw5ICsxNjUsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdm9pZCBzZXRDYWxsTG9jYXRpb25zKAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBj
YWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCi0gICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGwgaG90UGF0aE90aGVyKQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPiBjYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gaG90UGF0aE90aGVyKQog
ICAgIHsKICAgICAgICAgbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAgPSBjYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7CiAgICAgICAgIG1faG90UGF0aEJlZ2luT3JT
bG93UGF0aFN0YXJ0ID0gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwpAQCAtMTgxLDEyICsx
ODEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAK
LSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBDb2Rl
TG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAoKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgaG90UGF0aEJlZ2luKCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydCgp
OworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxSZXR1cm5Mb2Nh
dGlvbigpOworICAgIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gcGF0Y2hhYmxlSnVt
cCgpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0VudHJ5UHRyVGFnPiBob3RQYXRo
QmVnaW4oKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aFN0
YXJ0KCk7CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIoKQorICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhPdGhlcigpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9ob3RQYXRoT3RoZXI7CiAgICAgfQpAQCAtMzI3LDkgKzMyNyw5IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9jYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9o
b3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9o
b3RQYXRoT3RoZXI7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9jYWxs
UmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7CisgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gbV9ob3RQYXRoT3RoZXI7CiAgICAgV3JpdGVCYXJy
aWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxs
PiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZT4gbV9zdHViOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyAr
NDY3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVu
bGlua2VkQ29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsK
ICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsK
KyAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6Z2V0Q29kZVB0cjxC
eXRlY29kZVB0clRhZz4ob3BfY2F0Y2gpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2Vk
SGFuZGxlcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU2LDcgKzI1Niw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7
CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24gPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vz
c29yR2V0dGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgICAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwogCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CkBAIC0yNzgsNyArMjc4LDcgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nl
c3NvckdldHRlciA9IGJpdHdpc2VfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYWNjZXNzLmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsKICAgICAgICAgICAgICAgICAgICAg
ZG9tQXR0cmlidXRlID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuZG9tQXR0
cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tQXR0cmlidXRlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcs
NyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzLAogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1
bmN0aW9uLAotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0
dGVyLAorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0
ZXIsCiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1
dGUpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCiAgICAgLCBtX2NvbmRpdGlv
blNldChjb25kaXRpb25TZXQpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFu
dDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIGlmIChtX2ludHJpbnNpY0Z1bmN0aW9uKQogICAg
ICAgICBvdXQucHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1faW50cmluc2ljRnVuY3Rpb24pOwog
ICAgIGlmIChtX2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICBvdXQucHJpbnQoIiwgY3Vz
dG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDxjb25zdCB2b2lk
Kj4obV9jdXN0b21BY2Nlc3NvckdldHRlcikpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGN1c3Rv
bWFjY2Vzc29yZ2V0dGVyID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yR2V0dGVyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBpZiAobV9kb21BdHRyaWJ1dGUpIHsKICAgICAgICAg
b3V0LnByaW50KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRlcihtX2RvbUF0dHJpYnV0ZS0+Y2xh
c3NJbmZvKSk7CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0ZS0+ZG9tSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlz
aW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVs
bHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRyLAotICAgICAgICBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxscHRyLAogICAgICAgICBzdGQ6Om9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+ID0gc3RkOjpudWxsb3B0KTsKIAogICAgIH5H
ZXRCeUlkVmFyaWFudCgpOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtT
dGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5n
ZXQoKTsgfQogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pbnRyaW5zaWNGdW5jdGlvbjsgfQogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25z
dCB7IHJldHVybiBtX2ludHJpbnNpY0Z1bmN0aW9uID8gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50
cmluc2ljKCkgOiBOb0ludHJpbnNpYzsgfQotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
IGN1c3RvbUFjY2Vzc29yR2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21BY2Nlc3Nvckdl
dHRlcjsgfQorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JH
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CiAgICAgc3Rk
OjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBtX2RvbUF0dHJpYnV0ZTsgfQogCiAgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBj
b25zdCB7IHJldHVybiBvZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0OyB9CkBAIC04Niw3ICs4Niw3
IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogICAgIEpTRnVuY3Rpb24q
IG1faW50cmluc2ljRnVuY3Rpb247Ci0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgbV9j
dXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1f
Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2UKIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKLSAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSwKKyAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlLAogICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjUsMTcgKzY1LDE3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCB2aWFQcm94eSwgYWRkaXRpb25hbFNldCwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKSk7CiAgICAgcmVzdWx0LT5tX2RvbUF0dHJpYnV0ZSA9IGRvbUF0
dHJpYnV0ZTsKLSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0
dGVyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1c3RvbUdldHRlciA/IEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY3VzdG9tR2V0dGVyKSA6IG51bGxwdHI7CiAgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
LSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIsCiAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNl
KQogewogICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0
dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nh
c2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxz
ZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KSk7Ci0gICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsK
KyAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6R2V0dGVyU2V0dGVyQWNjZQogICAgIDogQmFzZShvdGhlcikKICAgICAsIG1fY3VzdG9t
U2xvdEJhc2Uob3RoZXIubV9jdXN0b21TbG90QmFzZSkKIHsKLSAgICBtX2N1c3RvbUFjY2Vzc29y
Lm9wYXF1ZSA9IG90aGVyLm1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOworICAgIG1fY3VzdG9tQWNj
ZXNzb3IgPSBvdGhlci5tX2N1c3RvbUFjY2Vzc29yOwogICAgIG1fZG9tQXR0cmlidXRlID0gb3Ro
ZXIubV9kb21BdHRyaWJ1dGU7CiB9CiAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByCiAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9t
U2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKGN1c3RvbVNsb3RCYXNlKCkpKTsKICAgICBpZiAoY2Fs
bExpbmtJbmZvKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5mbyA9ICIs
IFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKCkpKTsKLSAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0
b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAg
ICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0
b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQ
UikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJveHlhYmxlQWNjZXNzQ2FzZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQ4LDE5ICs0OSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0LCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywKKyAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBv
aW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3Rv
bUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6Om9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRl
KFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKLSAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmMgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRy
KTsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBu
dWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQg
ZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBvdmVycmlkZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIH5HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCk7CiAKLSAgICB2b2lkKiBjdXN0b21BY2Nlc3Nv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOyB9CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
KFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2lu
dFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1
ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKQEAgLTY5LDExICs3MCw3IEBAIHByaXZhdGU6
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3VzdG9tU2xvdEJhc2U7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci0gICAgdW5pb24gewot
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7Ci0gICAgICAgIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKLSAgICAgICAgdm9pZCogb3BhcXVlOwot
ICAgIH0gbV9jdXN0b21BY2Nlc3NvcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IG1fY3VzdG9tQWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0
aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDE0ICsxMDksMTMgQEAgc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQgog
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlu
a2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwpCiAgICAg
ewogICAgICAgICBpbml0aWFsaXplKHVubGlua2VkSW5mbyk7CiAgICAgICAgIG5hdGl2ZUNvZGUg
PSBsYWJlbDsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5hdGl2ZUNvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgfQogCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbmF0aXZlQ29kZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBuYXRpdmVDb2RlOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjMw
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBi
b29sIGxpbmtDb2RlSW5saW5lCiAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0
dWJJbmZvLnBhdGNoLnN0YXJ0LmRhdGFMb2NhdGlvbigpLCBzdHViSW5mby5wYXRjaC5pbmxpbmVT
aXplLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwog
ICAgICAgICBBU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihs
aW5rQnVmZmVyKTsKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRy
VGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUpOworICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENv
ZGVJbmxpbmU7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQordm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5p
c1ZhbGlkKCkpOwogICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCB0YXJnZXQpOwogCi0gICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIklubGluZUFjY2VzczogbGlu
a2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0
clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwogICAgIHN0YXRpYyBi
b29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7
CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYs
IEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0
dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJB
c0p1bXAoU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4pOwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGV0ZXJtaW5pbmcgdGhl
IHNpemUgb2YgYW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBsYXRmb3Jtcy4gV2hlbiBhZGRpbmcg
YSBuZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSnVtcFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0p1bXBUYWJsZS5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CiAgICAgICAgIGlu
dDMyX3QgYnJhbmNoT2Zmc2V0OwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGN0aU9mZnNldDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJU
YWc+IGN0aU9mZnNldDsKICNlbmRpZgogICAgIH07CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIE9m
ZnNldExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKICAgICAgICAgU3RyaW5nT2Zmc2V0VGFi
bGUgb2Zmc2V0VGFibGU7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY3RpRGVmYXVsdDsgLy8gRklYTUU6IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHN0
b3JlIHRoaXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlE
ZWZhdWx0OyAvLyBGSVhNRTogaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gc3RvcmUgdGhp
cy4KICNlbmRpZgogCiAgICAgICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmlu
Z0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCkBAIC02MCw3ICs2MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBpbmxp
bmUgQ29kZUxvY2F0aW9uTGFiZWwgY3RpRm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUpCisgICAg
ICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4gY3RpRm9yVmFsdWUo
U3RyaW5nSW1wbCogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgICAg
IFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5k
KHZhbHVlKTsKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwogICAgICAgICBpbnQzMl90IG1pbjsKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw+IGN0aU9mZnNldHM7Ci0g
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGN0aURlZmF1bHQ7CisgICAgICAgIFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4+IGN0aU9mZnNldHM7CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZhdWx0OwogI2VuZGlmCiAKICAgICAg
ICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRP
ZmZzZXQpOwpAQCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGN0
aU9mZnNldHMuZ3JvdyhicmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBjdGlGb3JWYWx1ZShpbnQzMl90IHZh
bHVlKQorICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0
aUZvclZhbHVlKGludDMyX3QgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICh2YWx1
ZSA+PSBtaW4gJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlIC0gbWluKSA8IGN0aU9mZnNl
dHMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjdGlPZmZzZXRzW3ZhbHVlIC0gbWlu
XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTQgKzUw
LDE0IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1IKICAgICB2b2lk
IHVubGluaygpCiAgICAgewogICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgbWFjaGlu
ZUNvZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbWFjaGluZUNv
ZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKICAgICAg
ICAgaWYgKGlzT25MaXN0KCkpCiAgICAgICAgICAgICByZW1vdmUoKTsKICAgICB9CiAgICAgCiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PiBsYXN0U2VlbkNhbGxlZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFjaGluZUNv
ZGVUYXJnZXQ7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1hY2hp
bmVDb2RlVGFyZ2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMSArMTk5LDEwIEBAIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhj
ZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKHRhZyk7CisgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC0+Y2Fs
bChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cihsb29rdXBF
eGNlcHRpb25IYW5kbGVyLCB0YWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+
anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAgICB9CkBAIC01MzksNyArNTM4LDcgQEAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxl
ci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1Jl
Z2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5u
YXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0
ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPihtYWtlc2hpZnRDYXRjaEhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGhhbmRsZXJUb1Jl
Z2lzdGVyLnN0YXJ0ID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5iaXRzKCk7CiAgICAg
ICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIuZW5kID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZS5iaXRzKCkgKyAxOwogICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+YXBwZW5kRXhj
ZXB0aW9uSGFuZGxlcihoYW5kbGVyVG9SZWdpc3Rlcik7CkBAIC01NTksOCArNTU4LDggQEAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICByZXR1cm4gQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigpOwotICAgICAgICAKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzdWNjZXNzTGFiZWwgPSBzdHViSW5m
by5kb25lTG9jYXRpb24oKTsKKwogICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBz
dWNjZXNzTGFiZWwpOwogCiAgICAgbGlua0J1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKQEAgLTU2OCw4ICs1NjcsOCBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgaWYgKFBvbHltb3JwaGljQWNjZXNzSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2Nr
LCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjogR2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mg
c3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlu
a0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVC
bG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICIlcyIsIHRv
Q1N0cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29k
ZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3RE
dW1wKGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAhPSBHZW5lcmF0ZWRGaW5hbENvZGUp
OwogICAgIH0KICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdChLaW5k
IGtpbmQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSkK
ICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICAgICAgLCBtX2NvZGUoY29kZSkKICAgICB7CkBA
IC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNv
ZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
OyB9CiAgICAgCiAgICAgYm9vbCBtYWRlTm9DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IE1hZGVOb0NoYW5nZXM7IH0KICAgICBib29sIGdhdmVVcCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZCA9PSBHYXZlVXA7IH0KQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2
YXRlOgogICAgIEtpbmQgbV9raW5kOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGU7
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURl
dGFpbD4+IG1fd2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjMw
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAgICAgCiAgICAgc3RydWN0IHsKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0
aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMsIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFi
bGUganVtcCBmb3IgJ2luJyBjYWNoZXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRo
ZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJs
ZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4KICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
czsKICAgICAgICAgdWludDMyX3QgaW5saW5lU2l6ZTsKICAgICAgICAgaW50MzJfdCBkZWx0YUZy
b21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb247CkBAIC0xODUsMTMgKzE4NSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9IHBhdGNoOwogCi0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0
aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldChwYXRjaC5k
ZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChw
YXRjaC5pbmxpbmVTaXplKTsgfQotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFi
bGVKdW1wRm9ySW4oKQorICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5zdGFydC5jYWxsQXRPZmZzZXQ8SlNJ
bnRlcm5hbFB0clRhZz4ocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9u
KTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigp
IHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQ8SlNFbnRyeVB0clRhZz4ocGF0Y2gu
aW5saW5lU2l6ZSk7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9m
ZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7IH0KKyAgICBDb2RlTG9j
YXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXBGb3JJbigpCiAgICAgeyAK
ICAgICAgICAgQVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6SW4pOwotICAgICAgICBy
ZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOworICAgICAgICByZXR1cm4gcGF0Y2gu
c3RhcnQuanVtcEF0T2Zmc2V0PEpTSW50ZXJuYWxQdHJUYWc+KDApOwogICAgIH0KIAogICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhKiBp
dGVtKSB7IHJldHVybiBpdGVtLT5ieXRlY29kZUluZGV4OyB9KTsKICAgICB9CiAKLSAgICB2b2lk
IGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBtYWNo
aW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB2b2lk
IGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxG
bHVzaEZvcm1hdD4mJiBhcmd1bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBjYXRjaEVudHJ5
cG9pbnRzLmFwcGVuZChDYXRjaEVudHJ5cG9pbnREYXRhIHsgbWFjaGluZUNvZGUsICBXVEZNb3Zl
KGFyZ3VtZW50Rm9ybWF0cyksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMw
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTY1LDExICsxNjUsMTEgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1
bXBEaXNhc3NlbWJseShQcmludAogICAgICAgICBwcmVmaXhCdWZmZXJbaSArIHByZWZpeExlbmd0
aF0gPSAnICc7CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExlbmd0aCArIGFtb3VudE9mTm9kZVdo
aXRlU3BhY2VdID0gMDsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihwcmV2aW91c0xhYmVsKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBl
bmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY3VycmVudExhYmVsKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
RGlzYXNzZW1ibHlQdHJUYWc+KHByZXZpb3VzTGFiZWwpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PERpc2Fzc2VtYmx5UHRyVGFnPiBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1i
bHlQdHJUYWc+KGN1cnJlbnRMYWJlbCk7CiAgICAgcHJldmlvdXNMYWJlbCA9IGN1cnJlbnRMYWJl
bDsKLSAgICBBU1NFUlQoZW5kLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSA+PSBzdGFy
dC5leGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwotICAgIGRpc2Fzc2VtYmxlKHN0YXJ0
LCBlbmQuZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpIC0gc3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3M8dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0YSgpLCBvdXQpOworICAgIEFTU0VS
VChlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5kYXRhTG9jYXRpb248dWlu
dHB0cl90PigpKTsKKyAgICBkaXNhc3NlbWJsZShzdGFydCwgZW5kLmRhdGFMb2NhdGlvbjx1aW50
cHRyX3Q+KCkgLSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIu
ZGF0YSgpLCBvdXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsNyArMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSklUQ29kZTsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIFZNOwogCiBu
YW1lc3BhY2UgREZHIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHVi
KG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgUHRyVGFnIG9zckV4aXRUaHVua1RhZyA9IHB0
clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBvc3JF
eGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5yZXRhZ2dlZENv
ZGUob3NyRXhpdFRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRp
b25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1
cmVKdW1wczsKQEAgLTE2Miw4ICsxNjEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhj
ZXB0aW9uSGFuZGxlCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAg
ICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKGNhbGxUYWcpLCBGdW5j
dGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBjYWxsVGFnKSkp
OworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0
clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxl
ckZyb21DYWxsZXJGcmFtZSkpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSgpKTsKICAgICB9CkBAIC0xODIsOCArMTgwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBQ
dHJUYWcgY2FsbFRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgp
KTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChjYWxsVGFnKSwg
RnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwgY2FsbFRhZykpKTsKKyAgICAgICAg
bV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAKICAg
ICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQpAQCAtMjE3LDE1ICsy
MTQsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAg
ICAKICAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBw
dHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNldHMuZ3Jvdyh0
YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRh
YmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0
c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEu
Y2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBk
YXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUu
c3dpdGNoTG9va3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxlLm1pbl0gPQotICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9j
ay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2stPmlu
ZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNDgsOSArMjQ0LDggQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQ
dHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogCi0g
ICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hl
YWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAg
dGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4o
bV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxl
Lm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJs
ZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjU5LDcgKzI1NCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENh
c2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zm
c2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9m
ZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5i
bG9jay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgaXRlci0+dmFsdWUuY3RpT2Zm
c2V0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNb
bXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc3
LDUyICsyNzIsNTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucy5zaXplKCk7ICsraSkgewogICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX2luc1tpXS5tX3N0dWJJbmZvOwogCi0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fanVtcCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4o
bV9pbnNbaV0ubV9qdW1wKTsKICAgICAgICAgaW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAg
ICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9pbnNbaV0ubV9kb25lKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fZG9uZSkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbmxpbmVTaXplID49IDApOwogICAgICAgICBpbmZvLnBhdGNoLmlubGluZVNpemUg
PSBpbmxpbmVTaXplOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9z
bG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0
b3ItPmNhbGwoKSkpOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAg
ICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRo
R2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxh
YmVsKCkpKTsKICAgICB9CiAgICAgCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0Nh
bGxQdHJUYWcsIHZtKCkpOwotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyKHZt
KCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtU
YWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25Q
dHI8Tm9QdHJUYWc+KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxs
cykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAg
IGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwogICAgICAg
ICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQudGFyZ2V0
VG9DaGVjaykpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVj
b3JkLmZhc3RDYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihyZWNvcmQu
c2xvd0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVj
aykpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0
clRhZz4ocmVjb3JkLmZhc3RDYWxsKSk7CiAgICAgfQogICAgIAogICAgIGZvciAoSlNEaXJlY3RD
YWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3Jk
LmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRy
VGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpKTsKICAgICAgICAgaW5mby5zZXRD
YWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFn
KSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5jYWxs
KSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPigpLAorICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHJlY29yZC5zbG93
UGF0aCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5
UHRyVGFnPihyZWNvcmQuY2FsbCkpOwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0VGFp
bENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWlsQ2FsbHMpIHsKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBpbmZvLnNldENhbGxMb2Nh
dGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJs
ZUp1bXApLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0
aCwgTmVhckNvZGVQdHJUYWcpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwocmVjb3JkLmNhbGwpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHJlY29yZC5j
YWxsKSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1
bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwot
ICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0o
KSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3Ny
RXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFnKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsg
PSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAg
IGF1dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRU
aHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9z
ckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5m
byA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VQ
cm9iZU9TUkV4aXQoKSkgewpAQCAtMzMyLDggKzMyNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgfQogICAgICAgICBpZiAoaW5mby5tX3JlcGxh
Y2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLmp1
bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLCBOZWFyQ29kZVB0
clRhZyksCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBs
YWNlbWVudERlc3RpbmF0aW9uLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50
U291cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8T1NSRXhpdFB0
clRhZz4oaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24pKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0zNDEsOSArMzM0LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9q
aXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2V4aXRTaXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWZWN0b3I8TGFi
ZWw+JiBsYWJlbHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwotICAgICAgICAgICAgVmVjdG9yPGNv
bnN0IHZvaWQqPiBhZGRyZXNzZXM7CisgICAgICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQotICAgICAgICAgICAgICAgIGFk
ZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsc1tqXSwgREZHT1NSRXhp
dFB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgYWRkcmVzc2Vz
LmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obGFiZWxzW2pd
KSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFkZE9TUkV4aXRTaXRlKGFk
ZHJlc3Nlcyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTM2MCw3ICszNTMsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAgICAvLyBpLmUs
IHdlIGV4cGxpY2l0bHkgZW1pdHRlZCBhbiBleGNlcHRpb25DaGVjayB0aGF0IHdlIGtub3cgd2ls
bCBiZSBjYXVnaHQgaW4gdGhpcyBtYWNoaW5lIGZyYW1lLgogICAgICAgICAgICAgLy8gSWYgdGhp
cyAqaXMgc2V0KiwgaXQgbWVhbnMgd2Ugd2lsbCBiZSBsYW5kaW5nIGF0IHRoaXMgY29kZSBsb2Nh
dGlvbiBmcm9tIGdlbmVyaWNVbndpbmQgZnJvbSBhbgogICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IHRocm93biBpbiBhIGNoaWxkIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBjYXRjaExhYmVsID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVu
dERlc3RpbmF0aW9uLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNhdGNoTGFiZWwgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50
RGVzdGluYXRpb24pOwogICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3RXhjZXB0aW9uSGFuZGxl
ciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uYmFzZWxpbmVFeGNlcHRp
b25IYW5kbGVyOwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1fZXhjZXB0
aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNpdGVJbmRleDsKICAgICAgICAgICAg
IG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZS5iaXRzKCk7CkBAIC01MzksMTEg
KzUzMiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIG1faml0
Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJs
b2NrOjpMYXRlU2hyaW5rKTsKIAotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgpKSwgTmVhckNvZGVQdHJUYWcpKSk7
CisgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1
bmtQdHJUYWc+KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7
CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVj
aywgQ29kZVB0clRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2FyaXR5Q2hlY2spOwogCiAgICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtl
X3VuaXF1ZTxKSVRGaW5hbGl6ZXI+KAogICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2Rl
LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsK
QEAgLTU4Myw3ICs1NzYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VDYXRjaEVudHJ5cG9p
bnQoCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pc0NhdGNoRW50cnlwb2ludCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0
ZWQpOyAvLyBBbiBlbnRyeXBvaW50IGlzIHJlYWNoYWJsZSBieSBkZWZpbml0aW9uLgotICAgIG1f
aml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2ludChiYXNpY0Jsb2NrLmJ5dGVjb2Rl
QmVnaW4sIGxpbmtCdWZmZXIubG9jYXRpb25PZihibG9ja0hlYWQsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7Cisg
ICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0
ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiB9CiAKIHZvaWQgSklUQ29t
cGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVy
OjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAyMzA3MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhpdDsKIC8vIEV2ZXJ5IENhbGxMaW5r
UmVjb3JkIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsIGluc3RydWN0aW9uICYgdGhl
IGZ1bmN0aW9uCiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCB0by4KIHN0cnVjdCBDYWxs
TGlua1JlY29yZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAg
ICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAg
IHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7Ci0gICAgRnVuY3Rp
b25QdHIgbV9mdW5jdGlvbjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVu
Y3Rpb247CiB9OwogCiBzdHJ1Y3QgSW5SZWNvcmQgewpAQCAtMTU2LDEwICsxNTYsMTAgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhv
dXQgYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBDYWxsIGFw
cGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAg
ICB7Ci0gICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0YWcpOwotICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmN0
aW9uLCB0YWcpKSk7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRpb25Q
dHJUYWcpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNh
bGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICByZXR1
cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMCw2ICszMTAsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAg
ICAsIGluZm8oaW5mbykKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGZhc3RDYWxsLmlz
RmxhZ1NldChDYWxsOjpOZWFyKSk7CisgICAgICAgICAgICBBU1NFUlQoc2xvd0NhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ2FsbCBmYXN0
Q2FsbDsKQEAgLTMyNCw2ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBzbG93UGF0
aChzbG93UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBDYWxsIGNhbGw7CkBAIC0zMzgsNiArMzQxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykK
ICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIp
ICYmIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+JiYg
aml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVy
KFBsYW4mIHBsYW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUsIHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2spCiAgICAgOiBGaW5hbGl6ZXIocGxhbikKICAgICAsIG1faml0Q29kZShX
VEZNb3ZlKGppdENvZGUpKQogICAgICwgbV9saW5rQnVmZmVyKFdURk1vdmUobGlua0J1ZmZlcikp
CkBAIC01Niw3ICs1Niw3IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAogYm9v
bCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIENvZGVQdHJUYWcsICJE
RkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxh
bi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9s
aW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
KS5kYXRhKCkpOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoY29kZVJlZiwgY29k
ZVJlZi5jb2RlKCkpOwogICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLmNvcHlSZWYoKSk7CkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVj
ay5pc0VtcHR5VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKLSAg
ICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgQ29kZVB0clRhZywgIkRGRyBK
SVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNv
ZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoKm1fbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSkuZGF0YSgpKSwKICAgICAgICAgbV93aXRoQXJpdHlDaGVjayk7CiAgICAgbV9w
bGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkocmV2aXNp
b24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogY2xhc3MgSklURmluYWxpemVyIDogcHVibGljIEZpbmFsaXplciB7CiBwdWJsaWM6
Ci0gICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpFbXB0eVZhbHVlKSk7Cisg
ICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExp
bmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CiAgICAgdmlydHVhbCB+SklU
RmluYWxpemVyKCk7CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgb3ZlcnJpZGU7CkBAIC00
Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVmPEpJVENvZGU+IG1faml0Q29kZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbV9saW5rQnVmZmVyOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVw
bGFjZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1
bXBSZXBsYWNlbWVudC5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEp1bXBSZXBsYWNl
bWVudCB7CiBwdWJsaWM6Ci0gICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxhYmVsIHNv
dXJjZSwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgSnVtcFJlcGxhY2VtZW50
KENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNvdXJjZSwgQ29kZUxvY2F0aW9u
TGFiZWw8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24pCiAgICAgICAgIDogbV9zb3VyY2Uoc291
cmNlKQogICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgewpAQCAtNDQs
OCArNDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UuZGF0YUxvY2F0aW9uKCk7IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBtX3NvdXJjZTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rlc3RpbmF0aW9uOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc291cmNlOworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJUYWc+IG1fZGVzdGluYXRpb247CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RydWN0IFN0YWNrQWNjZXNz
RGF0YSB7CiB9OwogCiBzdHJ1Y3QgQ2FsbERPTUdldHRlckRhdGEgewotICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyIHsgbnVsbHB0ciB9OworICAgIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgY29u
c3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51bGxwdHIgfTsKICAgICBET01KSVQ6
OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBA
QCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgdXNpbmcgdGFyZ2V0
IFBDICVwLlxuIiwgdGFyZ2V0UEMpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKLSAg
ICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdl
dFBDLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgKmJpdHdp
c2VfY2FzdDx2b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHJldGFnQ29kZVB0cih0YXJnZXRQQywgSlNF
bnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogCiAgICAgUmVnaXN0ZXIq
IHBpdm90ID0gc2NyYXRjaCArIDIgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsK
ICAgICAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLXZvaWQqIHByZXBhcmVDYXRjaE9T
UkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsgCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpGVExKSVQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0Lmgi
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMu
aCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKQEAgLTczLDcgKzc0LDcgQEAgaW5saW5l
IHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSQogc3RydWN0IENhdGNoRW50cnlwb2lu
dERhdGEgewogICAgIC8vIFdlIHVzZSB0aGlzIHdoZW4gZG9pbmcgT1NSIGVudHJ5IGF0IGNhdGNo
LiBXZSBwcm92ZSB0aGUgYXJndW1lbnRzCiAgICAgLy8gYXJlIG9mIHRoZSBleHBlY3RlZCB0eXBl
IGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgotICAgIHZvaWQqIG1hY2hpbmVDb2Rl
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNo
aW5lQ29kZTsKICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKQEAgLTgzLDkgKzg0LDkgQEAgc3RydWN0IENhdGNo
RW50cnlwb2ludERhdGEgewogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVC
bG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVk
LCB3ZSBjYW4ndCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1
bXAgdG8uCi12b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9
CitpbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHBy
ZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwNzI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzkwLDExICszOTAsMTAgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250
ZXh0JiBjbwogCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4s
IGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9
IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9j
YXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgICAgIFB0clRhZyBsb2NhdGlvblRh
ZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tGb3JFeGl0LCBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlv
bi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpOwogCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgICAg
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwpAQCAtNzkxLDcgKzc5MCw3IEBAIHN0
YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGUKIAogI2lmIFVTRShQT0lOVEVS
X1BST0ZJTElORykKICAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhf
dCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCop
OwotICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lz
ZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOworICAgICAgICAgICAganVtcFRhcmdldCA9IHJl
dGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFn
PihuZXdFbnRyeVNQKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5s
aW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKICAgICAgICAgfQpA
QCAtODY2LDcgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250
ZXgKICAgICB9CiAKICAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+
KCk7Ci0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyKGp1bXBUYXJnZXQsIENvZGVQdHJU
YWcpOworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1w
VGFyZ2V0KTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQs
IHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKQEAgLTkzMSw5ICs5
MzAsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0OjpnZXRQYXRjaGFiCiAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wKEFzc2VtYmxlckxhYmVsKG1fcGF0Y2hhYmxlQ29kZU9m
ZnNldCkpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJl
cGF0Y2goQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2spIGNvbnN0CitDb2RlTG9jYXRpb25KdW1wPEpT
SW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2Nr
KiBkZmdDb2RlQmxvY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGZn
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmRhdGFBZGRyZXNzQXRPZmZzZXQobV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4o
dGFnQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPihkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGF0
YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKSk7CiB9CiAKIHZvaWQgT1NS
RXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk5NSwxOSArOTk0
LDE4IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0
QXJndW1lbnRzRHVyaW5nRXhpdCksIGRlY2x0eXBlKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3Vt
ZW50c0R1cmluZ0V4aXQpPjo6dmFsdWUsICJXZSBhc3N1bWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUg
dGhlIHNhbWUgc2lnbmF0dXJlIGJlbG93LiIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk+KAogICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSks
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgaml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRp
b25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0LCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVk
QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CiAKICAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQp
OwpAQCAtMTA0Niw3ICsxMDQ0LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBp
bGVPU1JFeAogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkKICAgICAg
ICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zcGVjdWxhdGlvblJl
Y292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKIAotICAgIFB0clRhZyBleGl0VGFnID0gcHRy
VGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICB7CiAgICAgICAgIENDYWxsSGVscGVycyBq
aXQoY29kZUJsb2NrKTsKIApAQCAtMTA3NywxNCArMTA3NCwxNCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYo
CiAgICAgICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
T1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSwKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLCBleGl0VGFnLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcs
CiAgICAgICAgICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9w
ZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQu
bV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhl
eGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCiAgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRh
KCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2Nv
ZGUucmV0YWdnZWRDb2RlKGV4aXRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2Nr
KSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7
CiAKICAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDkgKzE0NSw5IEBAIHN0cnVjdCBP
U1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBzdGF0aWMgdm9pZCBKSVRfT1BFUkFU
SU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKICAgICBzdGF0aWMg
dm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwogCisgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS8zOTQ5ODI0ND4uCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zm
c2V0IHsgMCB9OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIAogICAgIFJlZlB0
cjxPU1JFeGl0U3RhdGU+IGV4aXRTdGF0ZTsKICAgICAKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICB2b2lkIHNldFBhdGNoYWJs
ZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKLSAgICBD
b2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7
CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBjb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwogICAgIHZvaWQgY29ycmVjdEp1bXAoTGlua0J1ZmZl
ciYpOwogCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw4IEBAIHZvaWQg
aGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBqaXQubW92ZShHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogI2Vu
ZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyKHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdGFnKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdykpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gaml0Lmp1bXAo
KTsKICAgICAKICAgICB0b29GZXdGYWlscy5saW5rKCZqaXQpOwpAQCAtMTg4LDcgKzE4Nyw3IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigp
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogCi0gICAgICAgICAgICAg
ICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9u
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0yNzYsOSArMjc1LDggQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVC
YXJyaWVyKENDYWxsSGVscGVycwogI2VuZGlmCiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4ob3duZXIpOwotICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlv
bk9TUldyaXRlQmFycmllciwgdGFnKSksIHNjcmF0Y2gpOwotICAgIGppdC5jYWxsKHNjcmF0Y2gs
IHRhZyk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNj
cmF0Y2gpOworICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CiAKICNpZiBD
UFUoWDg2KQogICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2Yodm9pZCopICogNCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBA
IC0zMTksMTIgKzMxNywxMCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIEND
YWxsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9
PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1h
cCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+
aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAg
QVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKLSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWco
Q29kZVB0clRhZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdn
ZWQobG9jYXRpb25UYWcsIGV4aXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCog
anVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVl
ZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCkBAIC0zMzIsNyArMzI4LDcgQEAgdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIH0KICAgICAKICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJl
Z1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwgZXhpdFRhZyk7CisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDQsNyArMzA0NCw3IEBAIHN0YXRp
YyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkg
YmxvY2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAo
dm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9jaywgZW50
cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CiAgICAgICAgICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJj
IyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdD
b2RlUHRyPGNoYXIqPihhZGRyZXNzLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihl
eGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVz
cywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE2Niw3ICszMTY2LDcgQEAgc3RhdGljIGNoYXIq
IHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGpp
dENvZGUtPm9zckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgp
OwogICAgIGlmICghYWRkcmVzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0clRhZywgYml0d2lzZV9jYXN0PFB0
clRhZz4oZXhlYykpOworICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpT
RW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93
UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsMTIgKzE2MiwxMSBAQCBjbGFzcyBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5l
CiAgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKICAgICBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCisgICAgICAgIEp1bXBU
eXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAg
ICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJl
bWVudCByZXF1aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGU+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxN
b2RlLCByZXF1aXJlbWVudCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJndW1lbnRzKHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCi0gICAgICAgICwgbV9jYWxsVGFnKGNhbGxU
YWcpCiAgICAgewogICAgIH0KIApAQCAtMTc2LDcgKzE3NSw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHVucGFja0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQsIHN0ZDo6aW5kZXhfc2Vx
dWVuY2U8QXJndW1lbnRzSW5kZXguLi4+KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0VXAoaml0
KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9m
dW5jdGlvbiwgbV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpn
ZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOworICAgICAgICB0aGlzLT5yZWNv
cmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCBleHRyYWN0UmVzdWx0
KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4u
LikpOwogICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwogICAgIH0KIApAQCAtMTg2LDM2ICsx
ODUsMTYgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4u
PiBtX2FyZ3VtZW50czsKLSAgICBQdHJUYWcgbV9jYWxsVGFnOwogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAotICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCi0gICAgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1
aXJlbWVudCwKLSAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1l
bnRzLi4uPj4oCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIHNwaWxsTW9k
ZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAogICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAgICBTcGlsbFJlZ2lzdGVyc01vZGUg
c3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LAogICAgIFJl
c3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewogICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjxK
dW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudHMuLi4+PigKLSAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBzcGlsbE1vZGUsIHJlcXVp
cmVtZW50LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEp1
bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0
b3I+IHNsb3dQYXRoQ2FsbCgKLSAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIFB0clRhZyBjYWxsVGFnLAotICAgIFJlc3VsdFR5cGUg
cmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotewotICAgIHJldHVybiBzbG93UGF0aENh
bGwoCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIE5lZWRUb1NwaWxsLCBF
eGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0LCBhcmd1bWVudHMu
Li4pOworICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50
LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KQEAgLTIyNCw3ICsyMDMsNyBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNs
b3dQYXRoR2VuZXJhdG9yCiAgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCiB7CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1
aXJlbWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgZnJv
bSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6
OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5
cGUsIHVuc2lnbmVkIG51bWJlck9mQXNzaWdubWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMDcy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1w
KCkpOwogCiAgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksIEdl
dFByb3BlcnR5UHRyVGFnLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAgICAgc3BpbGxNb2RlLCBFeGNlcHRp
b25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAg
ICAgCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZFdpdGhUaAogICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAK
ICAgICBhdXRvIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRhZywK
KyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwKICAgICAgICAgRG9udFNwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05l
ZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQ
UiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgCkBAIC0yNTA2LDcgKzI1
MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpA
QCAtMjU2Miw3ICsyNTYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFnLAor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2Jq
ZWN0SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKQEAgLTI2MTQsNyArMjYxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJU
YWcsCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjc3Myw3ICsyNzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Qg
PyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0IDogb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCksCi0gICAgICAgICAgICAg
ICAgICAgIFB1dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHZhbHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbm9SZXN1
bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTI4NTcsNyArMjg1Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5v
cCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QpLAotICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVB0clRhZywgTm9SZXN1bHQs
IGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MzIsOCArMzkzMiw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRF
bWl0UHJvZmlsaW5nKTsKLSAgICBQdHJUYWcgbWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRh
ZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKLQogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsK
ICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0
eSgpKTsKIApAQCAtMzk2Miw5ICszOTYwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1hdGhJQyhOb2RlKgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAgICBhZGRJ
Q0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoaW5nRnVuY3Rpb24pLCBtYXRoSUNUYWcs
IHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+
KHJlcGF0Y2hpbmdGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBpbm5lckxl
ZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9u
U3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9u
LCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CiAKICAgICAgICAg
ICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CkBAIC0zOTkzLDcgKzM5OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TWF0aElDKE5vZGUqCiAgICAgICAgIH0KIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0KIApAQCAtNDYzOCw4ICs0NjM2LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogCiAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBt
YXRoSUMtPmdlbmVyYXRlSW5saW5lKG1faml0LCAqaWNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVt
aXRQcm9maWxpbmcpOwotICAgIFB0clRhZyBtYXRoSUNUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFn
LCBtYXRoSUMtPmluc3RydWN0aW9uKCkpOwotCiAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewog
ICAgICAgICBBU1NFUlQoIWljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkp
OwogCkBAIC00NjU4LDkgKzQ2NTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0
aElDKE5vZGUqCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwogCiAgICAgICAg
ICAgICBpZiAoaWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAg
ICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiks
IG1hdGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1
bmN0aW9uKSwgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFn
LCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwg
cmVzdWx0UmVncywgY2hpbGRSZWdzKTsKIAogICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxh
bnMpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTQ2ODEsNyArNDY3
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywgcmVzdWx0UmVncywg
Y2hpbGRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIGNoaWxkUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAgICAgfQogCkBAIC05MDAwLDYgKzg5OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2FsbERPTShOb2RlCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzaWduYXR1cmUtPnVuc2FmZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9u
UHRyVGFnKTsKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykgewogICAgIGNhc2UgMToKQEAgLTkwMjQsNyArOTAyMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUKIHsKICAgICBET01KSVQ6OkNhbGxET01HZXR0
ZXJTbmlwcGV0KiBzbmlwcGV0ID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+c25pcHBldDsK
ICAgICBpZiAoIXNuaXBwZXQpIHsKLSAgICAgICAgYXV0byogZ2V0dGVyID0gbm9kZS0+Y2FsbERP
TUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3Vz
dG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKQEAgLTkwMzUsNyArOTAzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NR2V0dGUKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRp
b25fRUpJPihDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChu
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIG1f
aml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9qaXQudm0oKS0+dG9w
Q2FsbEZyYW1lKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKGdldHRlcik7
CisgICAgICAgIG1faml0LmFwcGVuZENhbGwoZ2V0dGVyLnJldGFnZ2VkPENGdW5jdGlvblB0clRh
Zz4oKSk7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKIAogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtMTAyMjIsOCArMTAyMTksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IG1faml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gpOwogI2VuZGlmCi0gICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLSAgICBtX2ppdC5qdW1w
KHNjcmF0Y2gsIHRhZyk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7
CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKIH0KIApAQCAtMTAyNDksOCArMTAy
NDUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAKICAgICAg
ICAgdmFsdWUudXNlKCk7CiAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1faml0
LmNvZGVCbG9jaygpLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0g
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CiAg
ICAgICAgIGF1dG8gbm90SW50MzIgPSBtX2ppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7
CiAgICAgICAgIGVtaXRTd2l0Y2hJbnRKdW1wKGRhdGEsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAgICAgbm90SW50MzIubGluaygmbV9qaXQpOwpAQCAt
MTAyNTksNyArMTAyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5v
ZGUqCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0gICAgICAgIG1faml0Lmp1bXAoc2Ny
YXRjaCwgdGFnKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNTE2LDE2ICsxMDUxMCwxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAgICAgIH0KICAgICAgICAgdG90YWxM
ZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byogY29kZUJs
b2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisKICAgICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8
IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVu
Z3RoKCkpIHsKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgb3BlcmF0
aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNo
VGFibGVJbmRleCksIHN0cmluZyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0g
ICAgICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOworICAgICAgICBtX2ppdC5qdW1wKHN0cmlu
ZywgSlNTd2l0Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTA1
NTgsMTUgKzEwNTQ5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdP
blMKICAgICBlbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSgKICAgICAgICAgZGF0YSwgY2Fz
ZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgc3RyaW5nLCBsZW5ndGhHUFIsIHRlbXBHUFIsIDAsIGZh
bHNlKTsKICAgICAKLSAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLQogICAgIHNsb3dDYXNlcy5s
aW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RyaW5nKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIG1faml0Lmp1
bXAoc3RyaW5nLCB0YWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm9kZSogbm9kZSwg
U3dpdGNoRGF0YSogZGF0YSkKQEAgLTEyNzEzLDcgKzEyNzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcgogICAgIH0KICAgICB9CiAKLSAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlCeUludCwgSGFzUHJvcGVydHlQdHJUYWcsIHJlc3VsdEdQUiwgYmFzZUdQUiwg
aW5kZXhHUFIsIHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgp
KSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIs
IGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUo
KSkpKTsKIAogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0K
QEAgLTEyNzgxLDcgKzEyNzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERp
cmVjdFBuYQogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwg
R2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKHByb3BlcnR5R1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBi
YXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUikpKTsKIAogICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAjZW5kaWYKQEAgLTEyODg5LDcgKzEyODc3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKIAogICAgIGF1dG8gc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgUHV0UHJvcGVydHlQdHJUYWcsIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVS
ZWdzLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIE5v
UmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAogICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAK
ICAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjMw
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MzEsMzAgKzkzMSwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KLSAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwg
dGFnLCByZXN1bHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIFJlc3VsdFJlZ1R5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RkOjpl
bmFibGVfaWZfdDwKLSAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwKLSAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJU
YWcsIHJlc3VsdCwgYXJncy4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0Ci0gICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZhbHVlLAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKLSAgICB7Ci0gICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZywgYXJncy4uLik7Ci0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBBcmcsIHR5cGVuYW1lLi4uIEFy
Z3M+CkBAIC05NjQsMTcgKzk0NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4K
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmcgYXJnLCBBcmdz
Li4uIGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IENGdW5jdGlvblB0clRhZywgYXJnLCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0
LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIE5vUmVzdWx0VGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAg
ewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
LSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0YWcpOworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmcsIGFyZ3MuLi4pOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05ODMsMTcgKzk1NCw4IEBA
IHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJncy4uLiBhcmdzKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIE5v
UmVzdWx0LCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNh
bGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcpCi0gICAgewot
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGU+CkBAIC0xMDAyLDcgKzk2NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4K
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcpOworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogI3VuZGVmIEZJUlNUX0FSR1VNRU5U
X1RZUEUKQEAgLTEwMzksNjIgKzEwMDIsNTYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJl
c3VsdHMsIGFuZCBvcHRpb25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBl
eGNlcHRpb24uCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAg
ICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7Cisg
ICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
ZnVuY3Rpb24pOwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKSAmJiAocmVz
dWx0ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0KQorCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHQpOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0MSwgR1BSUmVnIHJlc3Vs
dDIpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJS
ZWcgcmVzdWx0MikKICAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsKGZ1bmN0aW9uLCB0YWcpOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHQx
LCByZXN1bHQyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQ
UlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdDEsIHJlc3Vs
dDIpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHJlc3VsdFJlZ3MuZ3ByKCkpOwogI2Vs
c2UKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHRhZywgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHRSZWdzKTsKLSAgICB9CisKICNp
ZiBDUFUoWDg2KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS5mc3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlc3VsdCk7CkBAIC0xMTAyLDI2ICsxMDU5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQogI2VsaWYgQ1BVKEFSTSkgJiYgIUNQVShBUk1fSEFSREZQKQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihyZXN1
bHQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZWxzZSAvLyBDUFUoWDg2XzY0KSB8fCAoQ1BV
KEFSTSkgJiYgQ1BVKEFSTV9IQVJERlApKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2Vu
ZGlmCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdCk7Ci0g
ICAgfQogCiAgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlv
biBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShy
ZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JF
eGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAg
ICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsIHZtKTsKLSAgICBQdHJUYWcgb3Ny
RXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgb3NyRXhpdFRodW5rVGFnLCAiREZHIE9TUiBleGl0IHRodW5r
Iik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiREZHIE9TUiBleGl0IHRodW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogCkBAIC04Myw4ICs4Miw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCi0gICAg
UHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTEw
MSwxNyArOTksMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAog
I2VuZGlmCiAgICAgfQogCi0gICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRk
cmVzcygmdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBwdHJUYWcoREZHT1NSRXhpdFB0clRh
Zywgdm0pKTsKKyAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2
bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQdHJUYWcpOwogCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKE9TUkV4aXQ6OmNvbXBpbGVPU1JF
eGl0LCBjYWxsVGFnKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpKTsKIAotICAg
IFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pOwot
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JFeGl0VGh1bmtUYWcsICJE
RkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRo
dW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlU
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRy
KTsKIApAQCAtMTQ5LDkgKzE0Niw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRo
dW5rR2VuZXIKIAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKLSAgICBQdHJUYWcgb3NyRW50cnlUaHVua1RhZyA9IHB0clRhZyhERkdP
U1JFbnRyeVB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JF
bnRyeVRodW5rVGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZW50cnkgdGh1bmsi
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQCBj
bGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50
cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5j
cHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBBNjRET3Bjb2Rl
IGFybTY0T3Bjb2RlOwogCi0gICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IHJlbW92ZUNvZGVQdHJU
YWc8dWludDMyX3QqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHVpbnQzMl90
KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDMyX3Qq
PigpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgd2hpbGUgKGJ5dGVDb3Vu
dCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fz
c2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rp
c2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNp
emUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNh
c3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBj
b2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KQogewogICAgIEFSTXY3RE9wY29kZSBhcm1PcGNvZGU7CiAKLSAgICB1aW50MTZfdCogY3VycmVu
dFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpJn4xKTsKKyAgICB1aW50MTZfdCogY3Vy
cmVudFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkmfjEpOwogICAgIHVp
bnQxNl90KiBlbmRQQyA9IGN1cnJlbnRQQyArIChzaXplIC8gc2l6ZW9mKHVpbnQxNl90KSk7CiAK
ICAgICB3aGlsZSAoY3VycmVudFBDIDwgZW5kUEMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIz
MDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEyICszNywxMiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQ
dHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCit2
b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpCiB7CiAgICAgaWYgKHRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgcHJl
Zml4LCBvdXQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgb3V0LnByaW50ZigiJXNkaXNh
c3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSArIHNpemUpOworICAgIG91dC5wcmludGYoIiVzZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBm
b3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4LCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSwgY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6
ZSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgY2hhciogaGVhZGVyIHsgbnVsbHB0ciB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjb2RlUmVmOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxEaXNhc3NlbWJseVB0clRh
Zz4gY29kZVJlZjsKICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICBjb25zdCBjaGFyKiBwcmVm
aXggeyBudWxscHRyIH07CiB9OwpAQCAtMTI4LDcgKzEyOCw3IEBAIEFzeW5jaHJvbm91c0Rpc2Fz
c2VtYmxlciYgYXN5bmNocm9ub3VzRGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiB2b2lk
IGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiBwcmVmaXgpCisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUmVmLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4KQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+
IHRhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERpc2Fzc2VtYmx5VGFzaz4oKTsKICAgICB0YXNrLT5o
ZWFkZXIgPSBzdHJkdXAoaGVhZGVyLmRhdGEoKSk7IC8vIFl1Y2shIFdlIG5lZWQgdGhpcyBiZWNh
dXNlIENTdHJpbmcgZG9lcyByYWN5IHJlZmNvdW50aW5nLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE5ICsyNiwyMCBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgIlB0clRhZy5oIgogI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOwotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwordGVtcGxhdGU8
UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi1i
b29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90
LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7Citib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVf
dCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYpOwogI2Vsc2UKLWlubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBj
b25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBj
b25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2
LDEyICs0NywxMiBAQCBpbmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvCiAK
IC8vIFByaW50cyBlaXRoZXIgdGhlIGRpc2Fzc2VtYmx5LCBvciBhIGxpbmUgb2YgdGV4dCBpbmRp
Y2F0aW5nIHRoYXQgZGlzYXNzZW1ibHkgZmFpbGVkIGFuZAogLy8gdGhlIHJhbmdlIG9mIG1hY2hp
bmUgY29kZSBhZGRyZXNzZXMuCi12b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsK
K3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsK
IAogLy8gQXN5bmNocm9ub3VzIGRpc2Fzc2VtYmx5LiBUaGlzIGhhcHBlbnMgb24gYW5vdGhlciB0
aHJlYWQsIGFuZCBjYWxscyB0aGUgcHJvdmlkZWQKIC8vIGNhbGxiYWNrIHdoZW4gdGhlIGRpc2Fz
c2VtYmx5IGlzIGRvbmUuCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29u
c3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBzaXplX3Qs
IGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBj
aGFyKiBwcmVmaXgpOwogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25v
dXNEaXNhc3NlbWJseSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2Vt
Ymxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxNyArMzMsMTcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qg
c2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIHVkX3Qg
ZGlzYXNzZW1ibGVyOwogICAgIHVkX2luaXQoJmRpc2Fzc2VtYmxlcik7Ci0gICAgdWRfc2V0X2lu
cHV0X2J1ZmZlcigmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVuc2ln
bmVkIGNoYXIqPigpLCBzaXplKTsKKyAgICB1ZF9zZXRfaW5wdXRfYnVmZmVyKCZkaXNhc3NlbWJs
ZXIsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1bnNpZ25lZCBjaGFyKj4oKSwg
c2l6ZSk7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICB1ZF9zZXRfbW9kZSgmZGlzYXNzZW1ibGVyLCA2
NCk7CiAjZWxzZQogICAgIHVkX3NldF9tb2RlKCZkaXNhc3NlbWJsZXIsIDMyKTsKICNlbmRpZgot
ICAgIHVkX3NldF9wYygmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVp
bnRwdHJfdD4oKSk7CisgICAgdWRfc2V0X3BjKCZkaXNhc3NlbWJsZXIsIGNvZGVQdHIudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwogICAgIHVkX3NldF9zeW50YXgoJmRp
c2Fzc2VtYmxlciwgVURfU1lOX0FUVCk7CiAgICAgCiAgICAgdWludDY0X3QgY3VycmVudFBDID0g
ZGlzYXNzZW1ibGVyLnBjOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9VRGlzODZEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA3MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDExICszMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVT
RShVRElTODYpCiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4
LCBQcmludFN0cmVhbSYgb3V0KTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKIAogI2Vsc2UgLy8gVVNFKFVESVM4
NikKIAotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29u
c3QgY2hhciosIFByaW50U3RyZWFtJikgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8vIFVT
RShVRElTODYpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRh
Zz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFt
JiBvdXQpCiB7CiAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvZGVQdHIs
IHNpemUsIHByZWZpeCwgb3V0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEyICsxMzQsMTEgQEAg
dm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsK
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZU
TE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7CiAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMTUzLDkgKzE1Miw4IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBD
VG9Db2RlT3JpZ2luTWFwcGluZygpKQogICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlcikpOwogCi0gICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFnKEZUTENvZGVQ
dHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwgPSBzdGF0ZS5m
aW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlw
b2ludExhYmVsKDApLCBlbnRyeVRhZyk7Ci0gICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBs
YWJlbC5leGVjdXRhYmxlQWRkcmVzczxHZW5lcmF0ZWRGdW5jdGlvbj4oKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2Rl
TGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBv
aW50TGFiZWwoMCkpOworICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gbGFiZWw7CiAgICAg
c3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKIAogICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGgubV9lbnRy
eXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsKQEAgLTE2Myw3ICsxNjEsNyBAQCB2
b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OwogICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+
IGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9p
bnRJbmRleF07CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hcHBlbmRDYXRjaEVudHJ5
cG9pbnQoCi0gICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVs
KGVudHJ5cG9pbnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVj
b2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKGVudHJ5
cG9pbnRJbmRleCkpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOwogICAgIH0KICAgICBzdGF0
ZS5qaXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHAJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBAIEV4Y2VwdGlvblRh
cmdldDo6fkV4Y2VwdGlvblRhcmdldCgpCiB7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2Vw
dGlvblRhcmdldDo6bGFiZWwoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgUHRyVGFnIGhhbmRsZXJU
YWcpCitDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBFeGNlcHRpb25U
YXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgaWYgKG1faXNEZWZh
dWx0SGFuZGxlcikKLSAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigqbV9kZWZh
dWx0SGFuZGxlciwgaGFuZGxlclRhZyk7Ci0gICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2hhbmRsZS0+bGFiZWwsIGhhbmRsZXJUYWcpOworICAgICAgICByZXR1cm4gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCptX2RlZmF1bHRIYW5kbGVyKTsK
KyAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KG1faGFuZGxlLT5sYWJlbCk7CiB9CiAKIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNl
cHRpb25UYXJnZXQ6Omp1bXBzKENDYWxsSGVscGVycyYgaml0KQpAQCAtNTAsMTMgKzUwLDEzIEBA
IEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRpb25UYXIKICAgICAgICAgQm94PEND
YWxsSGVscGVyczo6TGFiZWw+IGRlZmF1bHRIYW5kbGVyID0gbV9kZWZhdWx0SGFuZGxlcjsKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtC
dWZmZXIubG9jYXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
KTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCpkZWZhdWx0SGFuZGxlcikpOwogICAg
ICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+
IGhhbmRsZSA9IG1faGFuZGxlOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwsIERG
R09TUkV4aXRQdHJUYWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3Vs
dCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE9TUkV4aXRQdHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsK
ICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oCShyZXZpc2lvbiAy
MzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+RXhjZXB0aW9u
VGFyZ2V0KCk7CiAKICAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2luZywg
YnV0IG5vdCBhbnkgc29vbmVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtCdWZm
ZXImLCBQdHJUYWcgaGFuZGxlclRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4gbGFiZWwoTGlua0J1ZmZlciYpOwogCiAgICAgLy8gT3IsIHlvdSBjYW4g
Z2V0IGEgSnVtcExpc3QgYXQgYW55IHRpbWUuIEFueXRoaW5nIHlvdSBhZGQgdG8gdGhpcyBKdW1w
TGlzdCB3aWxsIGJlIGxpbmtlZCB0bwogICAgIC8vIHRoZSB0YXJnZXQncyBsYWJlbC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlvbikoRXhlY1N0YXRlKik7CisvLyBQ
b2ludHMgdG8gYSBmdW5jdGlvbiBvZiBwcm90b3R5cGU6IEVuY29kZWRKU1ZhbHVlICgqKShFeGVj
U3RhdGUqKS4KK3VzaW5nIEdlbmVyYXRlZEZ1bmN0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz47CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICB9CiB9CiAKLXZvaWQgSklU
Q29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29kZSkKK3ZvaWQgSklUQ29kZTo6aW5p
dGlhbGl6ZUIzQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZSkKIHsKICAgICBtX2Iz
Q29kZSA9IGIzQ29kZTsKIH0KQEAgLTYxLDE3ICs2MSwxNyBAQCB2b2lkIEpJVENvZGU6OmluaXRp
YWxpemVCM0J5cHJvZHVjdHMoc3RkCiAgICAgbV9iM0J5cHJvZHVjdHMgPSBXVEZNb3ZlKGJ5cHJv
ZHVjdHMpOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyIGFkZHJlc3MpCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGFkZHJlc3MpCiB7CiAgICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFk
ZHJlc3M7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tF
bnRyeXBvaW50KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludCkKIHsKICAgICBtX2Fy
aXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBK
SVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQorSklUQ29k
ZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNo
ZWNrTW9kZSBhcml0eUNoZWNrKQogewogICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgewogICAgIGNh
c2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtODAsMTggKzgwLDE2IEBAIEpJVENvZGU6OkNv
ZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwKICAgICAgICAgcmV0dXJuIG1fYXJpdHlDaGVj
a0VudHJ5cG9pbnQuY29kZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRyeVB0
clRhZz4oKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChz
aXplX3Qgb2Zmc2V0KQogewotICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVB
ZGRyZXNzPGNoYXIqPigpICsgb2Zmc2V0OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2FkZHJl
c3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwogICAgIGlmICghb2Zm
c2V0KQogICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygp
OwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1f
YWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgcmV0
dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVQdHJUYWcpOwor
ICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9yQ2FsbC51bnRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVybiB0YWdDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0KIAogdm9pZCogSklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMTcgKzQ0LDE3IEBAIHB1
YmxpYzoKICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKIAotICAgIENvZGVQdHIgYWRk
cmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOworICAgIENvZGVQdHI8SlNFbnRy
eVB0clRhZz4gYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwogICAgIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlkZTsKICAg
ICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIG92ZXJyaWRlOwogICAg
IHNpemVfdCBzaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKikgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZik7CisgICAgdm9pZCBpbml0
aWFsaXplQjNDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgaW5pdGlhbGl6
ZUIzQnlwcm9kdWN0cyhzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+KTsKLSAg
ICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyKTsKLSAgICB2b2lkIGluaXRp
YWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbChDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIGluaXRpYWxp
emVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmPEpTRW50cnlQdHJUYWc+KTsKICAgICAKICAg
ICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIG92ZXJy
aWRlOwogCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKIAotICAgIENv
ZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KKyAgICBDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IGIzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYjNDb2RlOyB9CiAgICAgCiAg
ICAgSklUQ29kZSogZnRsKCkgb3ZlcnJpZGU7CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24oKSBvdmVycmlkZTsKQEAgLTc0LDEwICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0
ZToKLSAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7Ci0gICAgQ29kZVJlZiBtX2IzQ29kZTsK
KyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fYWRkcmVzc0ZvckNhbGw7CisgICAgQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBtX2IzQ29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1
ZUJ5cHJvZHVjdHM+IG1fYjNCeXByb2R1Y3RzOwotICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50
cnlwb2ludDsKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fYXJpdHlDaGVja0VudHJ5cG9p
bnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21t
b24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBiM0NvZGVSZWYgPQotICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNh
c3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgICAgIEZJTkFMSVpFX0NP
REVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywK
ICAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRM
aW5rQnVmZmVyCi0gICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpl
bnRyeXBvaW50TGlua0J1ZmZlciwgQ29kZVB0clRhZywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZl
cgorICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2lu
dExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQg
dGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0
YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKyAgICAgICAgOiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0Nv
ZGVSZWYuY29kZSgpKTsKIAogICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVm
KTsKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVj
a0NvZGVSZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNs
b3dQYXRoLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIExh
enlTbG93UGF0aDo6fkxhenlTbG93UGF0aCgpCiB9CiAKIHZvaWQgTGF6eVNsb3dQYXRoOjppbml0
aWFsaXplKAotICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAg
Q29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBkb25lLAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwKICAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8
R2VuZXJhdG9yPiBnZW5lcmF0b3IKICAgICApCiB7CkBAIC02MywxNCArNjMsMTMgQEAgdm9pZCBM
YXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogCiAgICAgbV9nZW5lcmF0b3ItPnJ1
bihqaXQsIHBhcmFtcyk7CiAKLSAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6
eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPih0aGlzKSk7CiAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
KTsKLSAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9kb25lLnJldGFnZ2Vk
KHNsb3dQYXRoVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIGxpbmtCdWZmZXIubGluayhwYXJh
bXMuZG9uZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKLSAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldC5yZXRh
Z2dlZChzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKTsKLSAgICBtX3N0dWIgPSBGSU5BTEla
RV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIHNsb3dQYXRoVGFnLCAiTGF6eSBzbG93
IHBhdGggY2FsbCBzdHViIik7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1w
cywgbV9leGNlcHRpb25UYXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNv
ZGVCbG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsICJMYXp5IHNsb3cgcGF0
aCBjYWxsIHN0dWIiKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChtX3BhdGNo
YWJsZUp1bXAucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJDb2RlUHRyVGFnKSwgQ29kZUxvY2F0
aW9uTGFiZWwobV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi5jb2RlKCkpKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwy
NyArNjksMjcgQEAgcHVibGljOgogICAgIH5MYXp5U2xvd1BhdGgoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZSgKLSAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbCBkb25lLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJn
ZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBDb2RlTG9jYXRp
b25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGRvbmUsCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgIENhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+CiAgICAg
ICAgICk7CiAKLSAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lKCkgY29u
c3QgeyByZXR1cm4gbV9kb25lOyB9CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPiBwYXRjaGFibGVKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9wYXRjaGFibGVKdW1wOyB9Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZG9uZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9uZTsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4OyB9CiAKICAgICB2b2lkIGdlbmVy
YXRlKENvZGVCbG9jayopOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoKSBjb25z
dCB7IHJldHVybiBtX3N0dWI7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KIAogcHJpdmF0ZToK
LSAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBtX2RvbmU7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7Cisg
ICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXA7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9kb25lOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fZXhjZXB0aW9uVGFyZ2V0OwogICAg
IFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICBDYWxsU2l0ZUluZGV4IG1fY2FsbFNp
dGVJbmRleDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9zdHViOwogICAgIFJlZlB0cjxH
ZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4K
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
Ci0gICAgVk0mIHZtLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFy
Z3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFZNJiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4g
YXJndW1lbnRzKQogewogICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigK
ICAgICAgICAgWz0sICZ2bV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExp
bmsuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTUgKzE0MCwxMyBAQCB2b2lkIGxpbmso
U3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7Ci0gICAgICAgICAgICBQdHJUYWcgY2FsbFRh
ZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKGNhbGxUYWcp
OworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAg
ICAgICAgICBQdHJUYWcgbG9va3VwVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwobG9va3VwVGFnKTsKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZy
b21DYWxsZXJGcmFtZSA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICBq
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAgICAgICAgICAgICBub0V4Y2VwdGlvbi5s
aW5rKCZqaXQpOwogCkBAIC0xNzIsMTQgKzE3MCwxMyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyKGNvZGVCbG9jay0+bV9pc0NvbnN0cnVj
dG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNo
ZWNrLCBjYWxsVGFnKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBsb29rdXBUYWcpKTsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoYXJp
dHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCAm
dm0pLCBOZWFyQ29kZVB0clRhZykpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFp
blBhdGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5n
ZW5lcmF0ZWRGdW5jdGlvbikpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFy
aXR5Q2hlY2ssIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY29kZUJsb2NrLT5tX2lzQ29u
c3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2spKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOworICAgICAgICAgICAgbGlu
a0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+
KHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFn
KEZUTENvZGVQdHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRp
YWxpemVBZGRyZXNzRm9yQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0YWdDb2RlUHRyPHZv
aWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiwgZW50cnlUYWcsIENvZGVQdHJUYWcpKSk7CisK
KyAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE5
OCw5ICsxOTUsOSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgc3RhdGUu
YWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CisgICAgICAg
IGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7
CiAKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKGxpbmtC
dWZmZXItPmxvY2F0aW9uT2Yoc3RhcnQsIENvZGVQdHJUYWcpKTsKKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKGxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4oc3RhcnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE5ICsyODYsMTcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRocm93VGFnID0gcHRyVGFnKEZU
TE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0LmNhbGwodGhyb3dUYWcpOworICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxvb2t1cFRhZyA9IHB0
clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0
LmNhbGwobG9va3VwVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAog
ICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
ICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGhyb3dDYWxsLCBGdW5jdGlvblB0cihvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgdGhyb3dUYWcpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0
aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0aHJvd0NhbGws
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
RXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9v
a3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9v
a3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMzY1LDcgKzM2
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9
IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmV4
Y2VwdGlvbkhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4oKmV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsK
QEAgLTcxNzAsMTUgKzcxNjgsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhM
aW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVh
ckNvZGVQdHJUYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNs
b3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+KGxpbmtDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRp
b25PZih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRh
Zz4oZmFzdENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
IApAQCAtNzMxOCw5ICs3MzE0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwYXRjaGFibGVKdW1wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChjYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
LCBTbG93UGF0aFB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHBhdGNoYWJsZUp1bXApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGNh
bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRy
eVB0clRhZz4oc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcExvY2F0aW9uLApAQCAt
NzM2NywxMyArNzM2MywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHNsb3dQYXRoLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGNhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGNh
bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBz
bG93UGF0aExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC03NDkyLDE1
ICs3NDg4LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJU
YWcsIHZtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBs
aW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVu
Y3Rpb25QdHIobGlua0NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2Fs
bCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0
VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNFbnRyeVB0clRhZz4oc2xvd0NhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RDYWxs
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NzYzNyw5ICs3NjMxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25Q
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihjYWxsZWUsIHRhZykpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIHRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjYWxsZWUpKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVj
aygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVs
cGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIApAQCAtNzc5MywxNSAr
Nzc4NiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNvZGVQdHJUYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+KGxpbmtDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihz
bG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJn
ZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oZmFzdENhbGwpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtNzk3OCw5ICs3OTY5LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1
c2VkUmVnaXN0ZXJzKCkpOwogCiAgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NG
dW5jdGlvblB0cihjYWxsZWUsIHRhZykpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjApOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25Bcmd1bWVudEdQUjAsIHRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihjYWxsZWUpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAg
ICAgICAgICAgfTsKIApAQCAtODA3OCwxNSArODA2OCwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2Fs
bCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25P
Zih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4o
ZmFzdENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApA
QCAtODE2OCw5ICs4MTU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXF1aXJlZEJ5
dGVzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgcmVx
dWlyZWRCeXRlcyk7CiAgICAgICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkNhbGxFdmFsKT4oR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
blB0cihvcGVyYXRpb25DYWxsRXZhbCwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwLCB0YWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAp
OworICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3Vt
ZW50R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhzdGF0ZS0+dm0oKSwgQXNzZW1ibHlIZWxwZXJz
OjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CkBAIC04ODUyLDggKzg4MzksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wUmVwbGFjZW1lbnQg
anVtcFJlcGxhY2VtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihsYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obGFiZWwpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxPU1JFeGl0UHRyVGFn
PihoYW5kbGUtPmxhYmVsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21t
b24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoanVtcFJlcGxhY2VtZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTk2OTcsMTggKzk2ODQsMTggQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGp1bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oZG9uZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPj0gMCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmlubGlu
ZVNpemUgPSBpbmxpbmVTaXplOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlv
biA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc2xv
d1BhdGhDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
QmVnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzbG93UGF0aEJlZ2luKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTE5MTgsNyArMTE5MDUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbHVyZUNhc2VzID0gZG9tSklU
LT5nZW5lcmF0b3IoKS0+cnVuKGppdCwgZG9tSklUUGFyYW1zKTsKIAogICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlcywgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihoYW5kbGUt
PmxhYmVsKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6OmZvckNoZWNrKCk7CkBAIC0xMTk1Nyw2ICsx
MTk0NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQgKyAxOwogICAgICAgICBMVmFsdWUg
cmVzdWx0OworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc2lnbmF0dXJlLT51bnNhZmVGdW5jdGlvbiksIENGdW5jdGlvblB0clRhZyk7CiAgICAgICAg
IHN3aXRjaCAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgY2FzZSAxOgog
ICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUD4oc2lnbmF0dXJlLT51bnNhZmVGdW5jdGlvbikp
LCBtX2NhbGxGcmFtZSwgb3BlcmFuZHNbMF0pOwpAQCAtMTE5ODMsNyArMTE5NzEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gU2luY2UgdGhlIGdldHRlciBkb2VzIG5vdCBoYXZlIGNvZGUg
c2V0dGluZyB0b3BDYWxsRnJhbWUsIEFzIGlzIHRoZSBzYW1lIHRvIElDLCB3ZSBzaG91bGQgc2V0
IHRvcENhbGxGcmFtZSBpbiBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5v
cGVyYXRpb24obV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3NvckdldHRl
ciksCisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24obV9ub2Rl
LT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3NvckdldHRlci5yZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPENGdW5jdGlvblB0clRhZz4oKSksCiAgICAgICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0ciht
X2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlm
aWVyTnVtYmVyXSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTM5ODks
MjYgKzEzOTc3LDIxIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRo
dW5rVGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgdm0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFn
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2Vu
ZXJhdG9ySnVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+Z2V0Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0gc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1Bh
dGg+KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHNsb3dQYXRo
VGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4o
bGF6eVNsb3dQYXRoLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkp1bXAgbGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cGF0Y2hhYmxlSnVtcCwgc2xvd1BhdGhUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hh
YmxlSnVtcCkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSwgc2xvd1BhdGhU
YWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBsaW5rZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KGRvbmUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW4pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhenlTbG93UGF0aC0+aW5pdGlhbGl6ZSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5rZWREb25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwo
bGlua0J1ZmZlciwgc2xvd1BhdGhUYWcpLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwobGlua0J1ZmZl
ciksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbFNpdGVJbmRleCwgZ2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5sYXp5
U2xvd1BhdGhzW2luZGV4XSA9IFdURk1vdmUobGF6eVNsb3dQYXRoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDgsNyArMTA4LDcgQEAgT1NSRXhpdDo6T1NSRXhpdCgKIHsKIH0KIAotQ29kZUxvY2F0aW9u
SnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJs
b2NrKSBjb25zdAorQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAogewog
ICAgIFVOVVNFRF9QQVJBTShmdGxDb2RlQmxvY2spOwogICAgIHJldHVybiBtX3BhdGNoYWJsZUp1
bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24g
MjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTksMTIgKzExOSwxMiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBE
Rkc6Ok9TUkV4aXRCYXNlCiAgICAgT1NSRXhpdChPU1JFeGl0RGVzY3JpcHRvciosIEV4aXRLaW5k
LCBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYm9vbCB3
YXNIb2lzdGVkKTsKIAogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBtX2Rlc2NyaXB0b3I7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogICAgIC8vIFRoaXMgdGVsbHMgdXMgd2hlcmUgdG8gcGxh
Y2UgYSBqdW1wLgotICAgIENvZGVMb2NhdGlvbkp1bXAgbV9wYXRjaGFibGVKdW1wOworICAgIENv
ZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wOwogICAgIFZl
Y3RvcjxCMzo6VmFsdWVSZXA+IG1fdmFsdWVSZXBzOwogCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAg
ICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGNvZGVMb2NhdGlvbkZvclJlcGF0
Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OwogICAgIHZvaWQgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7
CiAgICAgICAgIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShw
cm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21GVEwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjMwNzI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5
KAogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKLSAgICB1bnNpZ25lZCBleGl0SUQsIEpJ
VENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFB0clRhZyBleGl0U2l0ZVRhZykKKyAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGpp
dENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgLy8gVGhpcyBjb2RlIHJlcXVpcmVzIGZyYW1lUG9pbnRlclJlZ2lzdGVyIGlzIHRoZSBzYW1l
IGFzIGNhbGxGcmFtZVJlZ2lzdGVyCiAgICAgc3RhdGljX2Fzc2VydChNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICJNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIgYW5kIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyIG11c3QgYmUgdGhlIHNhbWUiKTsKQEAgLTMzOCw5ICszMzgsOCBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKT4oCiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbiksCiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOwot
ICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUiwgdGFn
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFnKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRl
cmlhbGl6ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9u
VG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKIAogICAgICAgICAgICAgLy8gTGV0IGV2
ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgpAQCAtMzY3LDkgKzM2Niw4IEBAIHN0YXRpYyB2
b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1hdGVyaWFsaXphdGlvbiksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKSwKICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVu
dHMpKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSLCB0YWcpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdElu
T1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIAogICAgIC8vIFNhdmUgYWxsIHN0
YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhl
IGFwcHJvcHJpYXRlIHBsYWNlIGluCkBAIC00OTYsNyArNDk0LDcgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVN0dWIoCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAg
ICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICBzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZU
TE9TUkV4aXQoKSwKLSAgICAgICAgcGF0Y2hCdWZmZXIsIGV4aXRTaXRlVGFnLAorICAgICAgICBw
YXRjaEJ1ZmZlciwgT1NSRXhpdFB0clRhZywKICAgICAgICAgIkZUTCBPU1IgZXhpdCAjJXUgKCVz
LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzIiwKICAgICAgICAgICAgIGV4aXRJRCwg
dG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKQEAg
LTU0NCwxMyArNTQyLDEyIEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhl
Y1MKIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9y
aWdpbik7CiAKLSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMT1NSRXhpdFB0clRhZywg
JmV4aXQpOwotICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgaml0Q29kZSwgZXhpdCwgJnZtLCBjb2Rl
QmxvY2ssIHRodW5rVGFnKTsKKyAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQs
ICZ2bSwgY29kZUJsb2NrKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAg
ICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlv
bkxhYmVsKGV4aXQubV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcp
KSk7CisgICAgICAgIGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2Rl
TG9jYXRpb25MYWJlbDxPU1JFeGl0UHRyVGFnPihleGl0Lm1fY29kZS5jb2RlKCkpKTsKICAgICAK
LSAgICByZXR1cm4gZXhpdC5tX2NvZGUucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihleGVjKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gZXhpdC5t
X2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
SGFuZGxlLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDEzIEBA
IHZvaWQgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayhTdGF0ZSYKICAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwogICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW3NlbGYsIGp1bXAsIG15
TGFiZWwsIGNvbXBpbGF0aW9uLCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICBzZWxmLT5leGl0Lm1fcGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKKyAgICAgICAgICAgIHNlbGYtPmV4aXQubV9wYXRj
aGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oanVtcCkpOwogCi0gICAgICAgICAgICBQdHJU
YWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMT1NSRXhpdFB0clRhZywgJnZtKTsKICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcCwKLSAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAg
ICAgICAgICBpZiAoY29tcGlsYXRpb24pCi0gICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmFk
ZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG15TGFiZWwpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkgfSk7CisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRl
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG15TGFiZWwpIH0pOwog
ICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDcgQEAg
ZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVAogICAgIExhenlTbG93UGF0
aCYgbGF6eVNsb3dQYXRoID0gKmppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdOwogICAgIGxh
enlTbG93UGF0aC5nZW5lcmF0ZShjb2RlQmxvY2spOwogCi0gICAgUHRyVGFnIHNsb3dQYXRoVGFn
ID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oJmxh
enlTbG93UGF0aCkpOwotICAgIHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLnJldGFnZ2VkQ29k
ZShzbG93UGF0aFRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OnNjaGVkdWxlCiAgICAg
ICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hhbmRsZXIgPSBoYW5kbGVyOwogICAgICAg
ICAgICAgICAgICAgICBuZXdIYW5kbGVyLnN0YXJ0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CiAg
ICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gY2FsbFNpdGVJbmRleC5iaXRzKCkg
KyAxOwotICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihoYW5kbGUtPmxhYmVsKTsKICAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0hhbmRsZXIp
OwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDI1ICsxMTMsMjIgQEAgU2xvd1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRo
Q2FsbENvbnRleAogICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMiht
X3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IH0KIAotU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQo
dm9pZCogY2FsbFRhcmdldCkgY29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250
ZXh0OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCkgY29uc3QKIHsKICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBj
YWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBtX29mZnNldCk7CiB9CiAKLVNsb3dQYXRo
Q2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIEZ1bmN0aW9uUHRyIGNh
bGxUYXJnZXQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwoVk0m
IHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCiB7Ci0gICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsVGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0g
ICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZXhlY3V0YWJsZUFkZHJlc3MpOwotICAgIFNsb3dQYXRo
Q2FsbEtleSBrZXkgPSBrZXlXaXRoVGFyZ2V0KGV4ZWN1dGFibGVBZGRyZXNzKTsKLSAgICBQdHJU
YWcgY2FsbFRhZyA9IGtleS5jYWxsUHRyVGFnKCk7Ci0gICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9
IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKGNhbGxUYWcpLCBrZXkpOworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXkgPSBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCBy
ZXN1bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpLCBrZXkpOwog
CiAgICAgbV9qaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtyZXN1bHQsICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHVu
ayA9CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRo
dW5rID0KICAgICAgICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5r
KHJlc3VsdC5rZXkoKSk7CiAKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2Fs
bCgpLCBDb2RlTG9jYXRpb25MYWJlbCh0aHVuay5jb2RlKCkpKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9jYXRpb25MYWJlbDxPcGVyYXRpb25QdHJU
YWc+KHRodW5rLnJldGFnZ2VkQ29kZTxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgfSk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAg
KzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6IFRoZSBjYWxsIHRoYXQgdGhpcyByZXR1
cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUgbGlua2VkIGJ5IHRoZSBKSVQgdXNpbmcgYWRkTGlu
a1Rhc2soKSwKICAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciB5b3UgdG8gbGluayBpdCB5
b3Vyc2VsZi4KLSAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBGdW5jdGlvblB0ciBjYWxs
VGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpOwogCiBwcml2YXRlOgotICAgIFNsb3dQYXRoQ2FsbEtl
eSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0OworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCkgY29uc3Q7CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKICAg
ICBSZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwpAQCAtNzgsNyArNzgs
NyBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFNsb3dQ
YXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFZNJiB2bSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBl
eGNlcHRpb25UYXJnZXQsCi0gICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRH
UFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKQogewogICAgIFNsb3dQYXRoQ2FsbCBjYWxsOwogICAgIHsKQEAgLTk0LDcgKzk0LDcg
QEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRp
b25UYXJnZXQsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAorICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwKICAgICBBcmd1bWVudFR5cGVz
Li4uIGFyZ3VtZW50cykKIHsKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewpAQCAtMTEwLDcgKzEx
MCw3IEBAIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4KIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigK
ICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAotICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAg
cmV0dXJuIGNhbGxPcGVyYXRpb24oCiAgICAgICAgIHN0YXRlLnZtKCksIHVzZWRSZWdpc3RlcnMs
IGppdCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4pLCBleGNl
cHRpb25UYXJnZXQsIGZ1bmN0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB2b2lkIFNs
b3dQYXRoQ2FsbEtleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5w
cmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQpLCAi
LCBhcmd1bWVudFJlZ2lzdGVycyA9ICIsIG1fYXJndW1lbnRSZWdpc3RlcnMsICI+Iik7CisgICAg
b3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0
ID0gIiwgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdl
dC5leGVjdXRhYmxlQWRkcmVzcygpKSwgIiwgYXJndW1lbnRSZWdpc3RlcnMgPSAiLCBtX2FyZ3Vt
ZW50UmVnaXN0ZXJzLCAiPiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJl
dmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShG
VExfSklUKQogCi0jaW5jbHVkZSAiUHRyVGFnLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewpAQCAtNDUsMjkgKzQ1LDI3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIGNsYXNzIFNsb3dQYXRoQ2FsbEtleSB7CiBwdWJsaWM6CiAgICAgU2xvd1BhdGhD
YWxsS2V5KCkKLSAgICAgICAgOiBtX2NhbGxUYXJnZXQoMCkKLSAgICAgICAgLCBtX29mZnNldCgw
KQorICAgICAgICA6IG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KICAgICAKICAgICBTbG93UGF0
aENhbGxLZXkoCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxUYXJn
ZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiBhcmd1bWVudFJlZ2lzdGVycywKKyAgICAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHNldCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0
LCBjb25zdCBSZWdpc3RlclNldCYgYXJndW1lbnRSZWdpc3RlcnMsCiAgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQpCiAgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkKLSAgICAgICAgLCBtX2Nh
bGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldC5y
ZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpCiAgICAgICAgICwgbV9hcmd1bWVudFJlZ2lzdGVy
cyhhcmd1bWVudFJlZ2lzdGVycykKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgewog
ICAgIH0KICAgICAKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQotICAgIHZvaWQqIGNhbGxUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+IGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KICAgICBjb25z
dCBSZWdpc3RlclNldCYgYXJndW1lbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50UmVnaXN0ZXJzOyB9CiAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CiAgICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KHZvaWQq
IGNhbGxUYXJnZXQpCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
VGFnZ2VkV2l0aChjYWxsVGFyZ2V0LCBDRnVuY3Rpb25QdHJUYWcpOwogICAgICAgICByZXR1cm4g
U2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgYXJndW1lbnRSZWdp
c3RlcnMoKSwgb2Zmc2V0KCkpOwogICAgIH0KICAgICAKQEAgLTc4LDE0ICs3NiwxMiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgU2xvd1BhdGhDYWxsS2V5KEVtcHR5VmFsdWVUYWcpCiAgICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpFbXB0eVZhbHVlKQotICAgICAgICAsIG1fY2Fs
bFRhcmdldCgwKQogICAgICAgICAsIG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KICAgICAKICAg
ICBTbG93UGF0aENhbGxLZXkoRGVsZXRlZFZhbHVlVGFnKQogICAgICAgICA6IG1fdXNlZFJlZ2lz
dGVycyhSZWdpc3RlclNldDo6RGVsZXRlZFZhbHVlKQotICAgICAgICAsIG1fY2FsbFRhcmdldCgw
KQogICAgICAgICAsIG1fb2Zmc2V0KDApCiAgICAgewogICAgIH0KQEAgLTEwMSwxOSArOTcsMTIg
QEAgcHVibGljOgogICAgIH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsgUHRySGFzaDx2b2lkKj46Omhhc2go
bV9jYWxsVGFyZ2V0KSArIG1fb2Zmc2V0OwotICAgIH0KLQotICAgIFB0clRhZyBjYWxsUHRyVGFn
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGluY2x1ZGUgZmFjdG9y
cyB3aGljaCBhcmUgaW52YXJpYW50IGZvciB0aGUgc2FtZSBzbG93IHBhdGggc2l0ZS4KLSAgICAg
ICAgLy8gbV9jYWxsVGFyZ2V0IGNhbiB2YXJ5IGFuZCBzaG91bGQgYmUgZXhjbHVkZWQuCi0gICAg
ICAgIHJldHVybiBwdHJUYWcoRlRMU2xvd1BhdGhQdHJUYWcsIG1fdXNlZFJlZ2lzdGVycy5oYXNo
KCksIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQ
dHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBt
X29mZnNldDsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0
ZXJzOwotICAgIHZvaWQqIG1fY2FsbFRhcmdldDsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IG1fY2FsbFRhcmdldDsKICAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJz
OwogICAgIHB0cmRpZmZfdCBtX29mZnNldDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAg
ICAgOiBncmFwaChncmFwaCkKLSAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CiAgICAgc3dp
dGNoIChncmFwaC5tX3BsYW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw4ICs0Niw4IEBAIGVudW0gY2xhc3MgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXIK
ICAgICBOb3ROZWVkZWQgCiB9OwogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVy
aWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBGdW5jdGlvblB0ciBnZW5l
cmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUaHVua1RhZywgY29uc3QgY2hhciogbmFtZSwg
dW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVp
cmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCitzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKAorICAgIFZNKiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5lcmF0
aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVk
IGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCBm
cmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQogewogICAgIEFzc2VtYmx5SGVscGVy
cyBqaXQobnVsbHB0cik7CiAKQEAgLTg2LDkgKzg2LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBnZW5lcmljR2VuZQogICAgIGppdC5wZWVrKAogICAgICAgICBHUFJJbmZvOjphcmd1
bWVudEdQUjEsCiAgICAgICAgIChzdGFja01pc2FsaWdubWVudCAtIE1hY3JvQXNzZW1ibGVyOjpw
dXNoVG9TYXZlQnl0ZU9mZnNldCgpKSAvIHNpemVvZih2b2lkKikpOwotICAgIFB0clRhZyBnZW5l
cmF0b3JDYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxsKGdlbmVy
YXRvckNhbGxUYWcpOwotICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2Fs
bCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKICAgICAvLyBBdCB0aGlzIHBvaW50IHdl
IHdhbnQgdG8gbWFrZSBhIHRhaWwgY2FsbCB0byB3aGF0IHdhcyByZXR1cm5lZCB0byB1cyBpbiB0
aGUKICAgICAvLyByZXR1cm5WYWx1ZUdQUi4gQnV0IGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgZG8g
dGhpcywgd2UgbXVzdCByZXN0b3JlIGFsbCByZWdpc3RlcnMuCiAgICAgLy8gVGhlIHdheSB3ZSB3
aWxsIGFjY29tcGxpc2ggdGhpcyBpcyBieSBhcnJhbmdpbmcgdG8gaGF2ZSB0aGUgdGFpbCBjYWxs
IHRhcmdldCBpbiB0aGUKQEAgLTExNywzMCArMTE2LDMwIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZ2VuZXJpY0dlbmUKICAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVy
KTsKIAogI2lmIENQVShBUk02NCkgJiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQotICAgIGppdC51
bnRhZ1B0cihBc3NlbWJseUhlbHBlcnM6OmxpbmtSZWdpc3RlciwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgIGppdC51bnRhZ1B0cihBc3NlbWJseUhlbHBlcnM6OmxpbmtSZWdpc3Rl
ciwgcmVzdWx0VGFnKTsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocmVzdWx0VGFnKTsKICNlbmRpZgogICAgIGppdC5yZXQoKTsKICAgICAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZ2VuZXJhdGlvbkZ1bmN0aW9u
LCBnZW5lcmF0b3JDYWxsVGFnKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIHJlc3VsdFRodW5rVGFnLCAiJXMiLCBuYW1lKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgZ2VuZXJhdGlvbkZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiJXMiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOwotICAgIFB0clRhZyB0aHVua1RhZyA9IHB0
clRhZyhGVExPU1JFeGl0UHRyVGFnLCB2bSk7CiAgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoCi0gICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxlRlRMT1NSRXhp
dCksIHRodW5rVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNU
b1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7Cisg
ICAgICAgIHZtLCBjb21waWxlRlRMT1NSRXhpdCwgT1NSRXhpdFB0clRhZywgIkZUTCBPU1IgZXhp
dCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRq
dXN0bWVudFJlcXVpcmVtZW50OjpOZWVkZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOwot
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIHZtKTsK
ICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAgICAgdm0s
IEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgpLCB0aHVua1RhZywgIkZUTCBsYXp5
IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFu
ZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOb3ROZWVkZWQpOworICAgICAgICB2bSwgY29t
cGlsZUZUTExhenlTbG93UGF0aCwgSklUU3R1YlJvdXRpbmVQdHJUYWcsICJGVEwgbGF6eSBzbG93
IHBhdGggZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFj
a0FkanVzdG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRD
bG9iYmVyKQpAQCAtMTcxLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNo
ZWNrKEFzc2VtYmwKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxs
cHRyKTsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMjA0LDkgKzIwMyw4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CiAgICAgCiAgICAgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soaml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7Ci0gICAgCi0g
ICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKIAogICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CkBAIC0yMzIs
OCArMjMwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rRwogICAg
IGppdC5yZXQoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxU
YXJnZXQoKSwgY2FsbFRhZykpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBrZXkuY2FsbFB0clRhZygpLCAiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRv
Q1N0cmluZyhrZXkpLmRhdGEoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBrZXkuY2Fs
bFRhcmdldCgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtl
eSkuZGF0YSgpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDM2ICszOCwz
NiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhD
YWxsS2V5Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dQYXRoQ2FsbFRodW5rR2Vu
ZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
eXBlQXJndW1lbnQ+CiBzdHJ1Y3QgVGh1bmtNYXAgewogICAgIHR5cGVkZWYgS2V5VHlwZUFyZ3Vt
ZW50IEtleVR5cGU7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUsIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gVG9UaHVua01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5
cGUsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IFRvVGh1bmtNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4s
IEtleVR5cGU+IEZyb21UaHVua01hcDsKICAgICAKICAgICBUb1RodW5rTWFwIG1fdG9UaHVuazsK
ICAgICBGcm9tVGh1bmtNYXAgbV9mcm9tVGh1bms7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdl
bmVyYXRlSWZOZWNlc3NhcnkoCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlSWZOZWNlc3NhcnkoCiAgICAgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmFtZSBN
YXBUeXBlOjpLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUgZ2VuZXJhdG9yKQogewogICAgIHR5
cGVuYW1lIE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV90b1RodW5r
LmZpbmQoa2V5KTsKICAgICBpZiAoaXRlciAhPSBtYXAubV90b1RodW5rLmVuZCgpKQogICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWU7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJl
c3VsdCA9IGdlbmVyYXRvcihrZXkpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiByZXN1bHQgPSBnZW5lcmF0b3Ioa2V5KTsKICAgICBtYXAubV90b1RodW5rLmFk
ZChrZXksIHJlc3VsdCk7CiAgICAgbWFwLm1fZnJvbVRodW5rLmFkZChyZXN1bHQuY29kZSgpLCBr
ZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+
Ci10eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3R5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9y
VGh1bmsoTWFwVHlwZSYgbWFwLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IHB0cikKIHsKICAgICB0eXBlbmFtZSBNYXBUeXBlOjpGcm9tVGh1bmtNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtYXAubV9mcm9tVGh1bmsuZmluZChwdHIpOwogICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIg
IT0gbWFwLm1fZnJvbVRodW5rLmVuZCgpKTsKQEAgLTc5LDEzICs3OSwxMyBAQCBjbGFzcyBUaHVu
a3MgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRodW5rcyk7CiBwdWJsaWM6CiAgICAgVGh1
bmtzKCkgPSBkZWZhdWx0OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0aENh
bGxUaHVuayhjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdldFNsb3dQYXRoQ2FsbFRodW5rKGNvbnN0IFNsb3dQYXRo
Q2FsbEtleSYga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWZOZWNlc3Nhcnko
CiAgICAgICAgICAgICBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcik7CiAgICAgfQotICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93
UGF0aENhbGxUaHVuayhNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQorCisgICAgU2xvd1BhdGhD
YWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRU
aHVua1B0clRhZz4gcHRyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGtleUZvclRodW5rKG1fc2xv
d1BhdGhDYWxsVGh1bmtzLCBwdHIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgT3Bjb2Rl
SUQgSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlECiAgICAgLy8gVGhlIE9wY29kZUlEIGlzIGVtYmVk
ZGVkIGluIHRoZSBpbnQzMl90IHdvcmQgcHJlY2VkaW5nIHRoZSBsb2NhdGlvbiBvZgogICAgIC8v
IHRoZSBMTEludCBjb2RlIGZvciB0aGUgb3Bjb2RlIChzZWUgdGhlIEVNQkVEX09QQ09ERV9JRF9J
Rl9ORUVERUQgbWFjcm8KICAgICAvLyBpbiBMb3dMZXZlbEludGVycHJldGVyLmNwcCkuCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIocmVtb3ZlQ29kZVB0clRhZzx2b2lkKj4ob3Bj
b2RlKSk7CisgICAgYXV0byBjb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2Rl
UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKG9wY29kZSk7CiAgICAgaW50MzJf
dCogb3Bjb2RlSURBZGRyZXNzID0gY29kZVB0ci5kYXRhTG9jYXRpb248aW50MzJfdCo+KCkgLSAx
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gc3RhdGljX2Nhc3Q8T3Bjb2RlSUQ+KCpvcGNvZGVJ
REFkZHJlc3MpOwogICAgIEFTU0VSVChvcGNvZGVJRCA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsOSArMzM3LDggQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogI2Vsc2UKICAgICBtb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogI2VuZGlmCi0gICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkV4Y2VwdGlv
bkZ1enosIHRhZykpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGNh
bGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCB0YWcpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25FeGNl
cHRpb25GdXp6KSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgY2Fs
bChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIE9wZXJhdGlvblB0clRhZyk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwpAQCAtNzEzLDEwICs3MTIsOSBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgQ2FsbCBjYWxs
ID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzaygKICAgICAgICAgWz0sICZ2bV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFn
KExpbmtWaXJ0dWFsQ2FsbFB0clRhZywgJnZtKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAqaW5mbyk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8t
PnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxw
dHIsIHRydWUpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRp
b25MYWJlbCh2aXJ0dWFsVGh1bmsucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFn
KSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0p
OwogfQogCkBAIC05MzMsOSArOTMxLDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2Fs
bChWTSYgdm0sIAogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iCiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25Q
dHIoZnVuY3Rpb24sIHRhZykpLCBzY3JhdGNoKTsKLSAgICBjYWxsKHNjcmF0Y2gsIHRhZyk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGZ1
bmN0aW9uKSksIHNjcmF0Y2gpOworICAgIGNhbGwoc2NyYXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBHUFJJbmZvOjpyZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDgg
QEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7CiAgICAgSnVtcCBvayA9
IGJyYW5jaFB0cihCZWxvdywgc2hhZG93UGFja2V0LCBUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0No
aWNrZW4oKS5sb2dFbmQoKSkpOwogICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
blByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKT4oKTsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHRhZykp
LCBzY3JhdGNoMU5vbkFyZ0dQUik7Ci0gICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUiwgdGFnKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwor
ICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSksIHNj
cmF0Y2gxTm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
LCBzaGFkb3dQYWNrZXQpOwogICAgIG9rLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIz
MDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIC8vIEFzc2VtYmxlIGEgdGh1bmsgdGhhdCB3aWxsIHNlcnZl
IGFzIHRoZSBtZWFucyBmb3Igd3JpdGluZyBpbnRvIHRoZSBKSVQgcmVnaW9uLgotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgd3JpdGVUaHVuayA9IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Io
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3JpdGFibGVBZGRyKSwgc3R1YkJhc2UsIHN0dWJTaXpl
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB3cml0ZVRo
dW5rID0gaml0V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0
YWJsZUFkZHIpLCBzdHViQmFzZSwgc3R1YlNpemUpOwogCiAgICAgICAgIGludCByZXN1bHQgPSAw
OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBDUFUoQVJNNjQp
ICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwgdm9p
ZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRy
LCB2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplKQogICAgIHsKICAgICAgICAgdXNpbmcg
bmFtZXNwYWNlIEFSTTY0UmVnaXN0ZXJzOwogICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyOwpAQCAtMjk5LDggKzI5OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29sZSBvciBhbnl3aGVyZSBpbiBtZW1v
cnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgogICAgICAgICAvLyBUaGUgc2Vjb25kIGlz
IHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBjb2RlIGlzIHJlYWRhYmxlIHdoZW4gdXNpbmcg
dGhlCiAgICAgICAgIC8vIGFzeW5jRGlzYXNzZW1ibHkgb3B0aW9uIGFzIG91ciBjYWxsZXIgd2ls
bCBzZXQgb3VyIHBhZ2VzIGV4ZWN1dGUgb25seS4KLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhKSVRXcml0ZVRodW5rUHRyVGFnLCAmaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pOwot
ICAgICAgICByZXR1cm4gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHko
dGFnKTsKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOwogICAgIH0KICNlbHNlIC8vIENQVShBUk02NCkgJiYg
VVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCiAgICAgc3RhdGljIHZvaWQgZ2Vu
ZXJpY1dyaXRlVG9KSVRSZWdpb24ob2ZmX3Qgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YVNpemUpCkBAIC0zMDgsMTUgKzMwNywxOCBAQCBwcml2YXRlOgogICAgICAgICBtZW1j
cHkoKHZvaWQqKShzdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRh
LCBkYXRhU2l6ZSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGppdFdyaXRl
VGh1bmtHZW5lcmF0b3Iodm9pZCogYWRkcmVzcywgdm9pZCosIHNpemVfdCkKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9p
ZCogYWRkcmVzcywgdm9pZCosIHNpemVfdCkKICAgICB7CiAgICAgICAgIHN0YXJ0T2ZGaXhlZFdy
aXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsK
LSAgICAgICAgdWludHB0cl90IGZ1bmN0aW9uID0gKHVpbnRwdHJfdCkoKHZvaWQqKSZnZW5lcmlj
V3JpdGVUb0pJVFJlZ2lvbik7CisgICAgICAgIHZvaWQqIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKICNpZiBDUFUoQVJNX1RIVU1C
MikKICAgICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAgICBmdW5jdGlvbiAtPSAx
OworICAgICAgICB1aW50cHRyX3QgZnVuY3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihmdW5jdGlvbik7CisgICAgICAgIGZ1bmN0aW9uQXNJbnQgLT0gMTsKKyAgICAgICAg
ZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKICNlbmRp
ZgotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCh2b2lkKilmdW5jdGlvbikpOworICAgICAg
ICBhdXRvIGNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRh
Z0NGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihjb2RlUHRyKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIzMDcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw4ICs5MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogcGVyZm9ybUpJ
VE1lbWNweSh2b2kKICAgICAgICAgICAgIC8vIFVzZSBleGVjdXRlLW9ubHkgd3JpdGUgdGh1bmsg
Zm9yIHdyaXRlcyBpbnNpZGUgdGhlIEpJVCByZWdpb24uIFRoaXMgaXMgYSB2YXJpYW50IG9mCiAg
ICAgICAgICAgICAvLyBtZW1jcHkgdGhhdCB0YWtlcyBhbiBvZmZzZXQgaW50byB0aGUgSklUIHJl
Z2lvbiBhcyBpdHMgZGVzdGluYXRpb24gKGZpcnN0KSBwYXJhbWV0ZXIuCiAgICAgICAgICAgICBv
ZmZfdCBvZmZzZXQgPSAob2ZmX3QpKCh1aW50cHRyX3QpZHN0IC0gc3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpOwotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRXcml0
ZVRodW5rUHRyVGFnLCAmaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pOwotICAgICAgICAg
ICAgcmV0YWdDb2RlUHRyKGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uLCB0YWcsIENGdW5j
dGlvblB0clRhZykob2Zmc2V0LCBzcmMsIG4pOworICAgICAgICAgICAgcmV0YWdDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnLCBDRnVuY3Rpb25QdHJUYWc+KGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0
aW9uKShvZmZzZXQsIHNyYywgbik7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
OkdDQXdhcmVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IGNvZGUsIFZNJiB2bSkKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0pCiAgICAgOiBKSVRTdHViUm91dGluZShjb2RlKQog
ICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxzZSkKICAgICAsIG1faXNKZXR0aXNvbmVkKGZhbHNl
KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkCiB9CiAKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMpCiAgICAgOiBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUoY29kZSwgdm0pCiAgICAgLCBtX2NlbGxzKGNlbGxzLnNpemUoKSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCB2b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSCiAKIAog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXI6OkdDQXdhcmVKSVRTdHVi
Um91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpT
Q2VsbCo+JiBjZWxscywKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBW
ZWN0b3I8SlNDZWxsKj4mIGNlbGxzLAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhjZXB0
aW9uSGFuZGxlcnMsIENhbGxTaXRlSW5kZXggZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgp
CiAgICAgOiBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBvd25lciwgY2Vs
bHMpCiAgICAgLCBtX2NvZGVCbG9ja1dpdGhFeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9ja0ZvckV4
Y2VwdGlvbkhhbmRsZXJzKQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lV2l0aEV4Y2VwdGlvbkgKIAogCiBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLAog
ICAgIFZNJiB2bSwKICAgICBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIGJvb2wgbWFrZXNDYWxs
cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3
ICs0OSw3IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogLy8gbGlzdCB3aGljaCBkb2VzIG5v
dCBnZXQgcmVjbGFpbWVkIGFsbCBhdCBvbmNlKS4KIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGlu
ZSA6IHB1YmxpYyBKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6Ci0gICAgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJik7CisgICAgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mLCBWTSYpOwogICAgIHZpcnR1YWwgfkdDQXdhcmVKSVRTdHViUm91dGluZSgpOwogICAg
IAogICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAg
LTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIGNsYXNzIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBNYXJraW5n
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYpOwor
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mKTsKICAg
ICB2aXJ0dWFsIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7CiAgICAgCiBwcm90ZWN0
ZWQ6CkBAIC05NCw3ICs5NCw3IEBAIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNl
cHRpb24KIHB1YmxpYzoKICAgICB0eXBlZGVmIEdDQXdhcmVKSVRTdHViUm91dGluZSBCYXNlOwog
Ci0gICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0
b3I8SlNDZWxsKj4mLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKyAgICBHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25z
dCBWZWN0b3I8SlNDZWxsKj4mLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKIAogICAgIHZv
aWQgYWJvdXRUb0RpZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgp
IG92ZXJyaWRlOwpAQCAtMTExLDcgKzExMSw3IEBAIHByaXZhdGU6CiAvLyBhZnRlciB0aGUgZmly
c3QgY2FsbCB0byBDKysgb3IgSlMuCiAvLyAKIC8vIFJlZjxKSVRTdHViUm91dGluZT4gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCi0vLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUs
CisvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
JiBjb2RlLAogLy8gICAgVk0mIHZtLAogLy8gICAgY29uc3QgSlNDZWxsKiBvd25lciwKIC8vICAg
IGJvb2wgbWFrZXNDYWxscywKQEAgLTEyNCw3ICsxMjQsNyBAQCBwcml2YXRlOgogLy8gd2F5Lgog
CiBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtl
c0NhbGxzLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXNDYWxscywKICAgICBj
b25zdCBWZWN0b3I8SlNDZWxsKj4mID0geyB9LCAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zv
ckV4Y2VwdGlvbkhhbmRsZXJzID0gbnVsbHB0ciwgQ2FsbFNpdGVJbmRleCBleGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDExICs2NywxMSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21w
aWxlVGltZTsKIAotdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCi0gICAgICAgIENvZGVMb2NhdGlvbkNhbGwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwKLSAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24pOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwKKyAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAogSklUOjpKSVQoVk0q
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQpCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIG1fdm0pLCBOZWFyQ29kZVB0clRh
ZykpOworICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRo
IEFTU0VSVHMuCkBAIC03ODgsMjcgKzc4OCwyNSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6Omxp
bmsoKQogICAgICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxl
LT5icmFuY2hPZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJs
ZS0+Y3RpT2Zmc2V0cy5zaXplKCkpOwogCiAgICAgICAgICAgICBhdXRvKiBzaW1wbGVKdW1wVGFi
bGUgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZTsKLSAgICAgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHNpbXBsZUp1bXBUYWJsZSk7Ci0gICAg
ICAgICAgICBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdLCB0YWcp
OworICAgICAgICAgICAgc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNv
cmQuZGVmYXVsdE9mZnNldF0pOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgp
OyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0c1tqXTsKICAgICAgICAgICAgICAgICBz
aW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQKLSAgICAgICAgICAgICAgICAg
ICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zm
c2V0XSwgdGFnKQorICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkKICAgICAg
ICAgICAgICAgICAgICAgOiBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0g
U3dpdGNoUmVjb3JkOjpTdHJpbmcpOwogCiAgICAgICAgICAgICBhdXRvKiBzdHJpbmdKdW1wVGFi
bGUgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZTsKLSAgICAgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHN0cmluZ0p1bXBUYWJsZSk7CiAgICAg
ICAgICAgICBzdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQgPQotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVm
YXVsdE9mZnNldF0sIHRhZyk7CisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogc3RyaW5nSnVt
cFRhYmxlLT5vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGxvY2F0aW9uLmJyYW5jaE9mZnNldDsKICAgICAgICAgICAgICAgICBsb2NhdGlv
bi5jdGlPZmZzZXQgPSBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgdGFnKQorICAgICAg
ICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkKICAgICAgICAgICAgICAgICAgICAgOiBz
dHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTgxNiw3ICs4MTQsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+
ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1toYW5kbGVyLnRhcmdldF0sIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4K
KyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPihtX2xhYmVsc1toYW5kbGVyLnRhcmdldF0pOwogICAgIH0KIAog
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9jYWxscykgewpAQCAtODMyLDE4ICs4MzEsMTggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgbV9wdXRCeUlkc1tpXS5maW5h
bGl6ZShwYXRjaEJ1ZmZlcik7CiAKICAgICBpZiAobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkpIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlciA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9leGNlcHRpb25IYW5kbGVyLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4g
ZXhjZXB0aW9uSGFuZGxlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4obV9leGNlcHRpb25IYW5kbGVyKTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGJ5VmFsQ29tcGlsYXRpb25JbmZvIDogbV9ieVZhbENvbXBpbGF0aW9uSW5mbykgewogICAgICAg
ICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVOb3RJbmRleEp1bXAgPSBieVZhbENvbXBpbGF0
aW9uSW5mby5ub3RJbmRleEp1bXA7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25KdW1wIG5vdElu
ZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoKTsKKyAgICAgICAgICAgIGF1dG8gbm90SW5kZXhK
dW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgaWYg
KEp1bXAocGF0Y2hhYmxlTm90SW5kZXhKdW1wKS5pc1NldCgpKQotICAgICAgICAgICAgICAgIG5v
dEluZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihwYXRj
aGFibGVOb3RJbmRleEp1bXApKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlw
ZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21w
aWxhdGlvbkluZm8uYmFkVHlwZUp1bXApKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZv
LmRvbmVUYXJnZXQpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbmV4dEhvdFBhdGhU
YXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5leHRI
b3RQYXRoVGFyZ2V0KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoVGFy
Z2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5zbG93UGF0
aFRhcmdldCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZvLnJldHVybkFkZHJlc3Mp
OworICAgICAgICAgICAgICAgIG5vdEluZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXA8SlNFbnRy
eVB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihwYXRjaGFibGVO
b3RJbmRleEp1bXApKTsKKyAgICAgICAgICAgIGF1dG8gYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRp
b25KdW1wPEpTRW50cnlQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4oYnlWYWxDb21waWxhdGlvbkluZm8uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPE5vUHRyVGFnPiBkb25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxOb1B0clRhZz4oYnlWYWxDb21waWxhdGlvbkluZm8uZG9uZVRhcmdldCk7CisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0aW9uSW5mby5uZXh0SG90UGF0
aFRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gc2xvd1Bh
dGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0
aW9uSW5mby5zbG93UGF0aFRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPiByZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
YnlWYWxDb21waWxhdGlvbkluZm8ucmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgICAgICpieVZh
bENvbXBpbGF0aW9uSW5mby5ieVZhbEluZm8gPSBCeVZhbEluZm8oCiAgICAgICAgICAgICAgICAg
YnlWYWxDb21waWxhdGlvbkluZm8uYnl0ZWNvZGVJbmRleCwKQEAgLTg2MSwyMiArODYwLDIwIEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlv
bkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CiAgICAgICAgIGluZm8uc2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGNvbXBp
bGF0aW9uSW5mby5ob3RQYXRoQmVnaW4pKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7CisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNFbnRyeVB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bikpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4ocGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aEJl
Z2luKSksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRy
eVB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOwogICAgIH0KIAogICAgIEpJ
VENvZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKSB7Ci0gICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKENvZGVQdHJUYWcsIG1fY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChieXRlY29kZU9mZnNldCwg
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0sIHRhZykpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkK
KyAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0LCBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwog
ICAgIH0KICAgICBqaXRDb2RlTWFwLmZpbmlzaCgpOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRD
b2RlTWFwKFdURk1vdmUoaml0Q29kZU1hcCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2FyaXR5Q2hlY2ssIENv
ZGVQdHJUYWcpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0
eUNoZWNrKTsKIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChwYXRjaEJ1ZmZlcik7CkBAIC04OTEsOCArODg4LDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsKICAgICAKLSAgICBD
b2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLCBDb2Rl
UHRyVGFnLAorICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09E
RSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5t
YWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKQEAgLTkz
Myw4ICs5MzAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAg
ICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUs
IHRhZykpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlv
blB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
KSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9CiAKQEAg
LTk1Myw4ICs5NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpKTsKKyAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSgpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEzICs3MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1
Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207CiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBGdW5jdGlvblB0ciBjYWxsZWU7
CisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlOwogCiAgICAgICAg
IENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3Jk
KE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5j
dGlvblB0ciBjYWxsZWUpCisgICAgICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
ZnJvbSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4gY2FsbGVlKQogICAgICAgICAgICAgOiBmcm9tKGZyb20pCiAgICAgICAgICAgICAsIGJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQpA
QCAtMTc0LDcgKzE3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbzsKICAgICB9OwogCi0gICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKQEAgLTI2NywxOCArMjY3LDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAgICAgIC8vIEFk
ZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgot
ICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRh
ZyB0YWcpCisgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGNhbGwodGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
ZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFn
KSkpOworICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRh
Zyk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
bV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7
CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAKICNpZiBPUyhX
SU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1Bh
dGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQorICAg
ICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFB0clRhZyB0YWcpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUo
dGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxs
LCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOworICAgICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVP
ZmZzZXQsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICAgICAgfQogI2VuZGlmCkBAIC03MTYsMzkgKzcx
NiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4pOwogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRT
bG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0
aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnLCBpbnQpOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcsIGludCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOwog
ICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgaW50IHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHRhZywgcmVzdWx0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgdGFnLCByZXN1bHQsIGFyZ3MuLi4pOwotICAgICAgICB9Ci0K
LSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJU
YWcgdGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUob3BlcmF0aW9uLCB0YWcp
OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCisjaWYgT1MoV0lORE9X
UykgJiYgQ1BVKFg4Nl82NCkKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzNjRCaXRUeXBlKCkgeyByZXR1cm4gc2l6ZW9mKFR5
cGUpIDw9IDg7IH0KIApAQCAtNzU3LDg3ICs3NDEsNTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2
YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlPigpLCAiV2luNjQgY2Fubm90IHVz
ZSBzdGFuZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4i
KTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
LCB0YWcpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICAgICAgfQogI2Vsc2UgLy8gT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82
NCkKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4g
QXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFn
KTsKLSAgICAgICAgfQotI2VuZGlmIC8vIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFn
LCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3Bl
cmF0aW9uLCB0YWcsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgICAgICB9CisjZW5kaWYgLy8gT1MoV0lORE9X
UykgJiYgQ1BVKFg4Nl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgog
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uLCB0YWcsIHJl
c3VsdCwgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRy
VGFnIHRhZywgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgQXJncy4uLiBhcmdzKQotICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24sIHRhZyk7Ci0gICAgICAgICAgICBzZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb24sIHRhZywgcmVzdWx0
UmVncywgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHVwZGF0ZVRv
cENhbGxGcmFtZSgpOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0
YWcpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CisgICAgICAgICAgICBzZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb24sIHRh
ZywgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24sIHRhZywgYXJncy4uLik7Cisg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
b3BlcmF0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNuaXBw
ZXRHZW5lcmF0b3I+CkBAIC04NDksOCArNzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKIAotICAgICAgICBDYWxsIGVtaXROYWtlZENh
bGwoQ29kZVB0ciBmdW5jdGlvbiA9IENvZGVQdHIoKSk7Ci0gICAgICAgIENhbGwgZW1pdE5ha2Vk
VGFpbENhbGwoQ29kZVB0ciBmdW5jdGlvbiA9IENvZGVQdHIoKSk7CisgICAgICAgIENhbGwgZW1p
dE5ha2VkQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiBmdW5jdGlvbiA9IENvZGVQdHI8Tm9QdHJUYWc+
KCkpOworICAgICAgICBDYWxsIGVtaXROYWtlZFRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IGZ1
bmN0aW9uID0gQ29kZVB0cjxOb1B0clRhZz4oKSk7CiAKICAgICAgICAgLy8gTG9hZHMgdGhlIGNo
YXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIGludG8gZHN0LgogICAg
ICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKQEAgLTkzNiw3ICs4ODQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGlzYXNzZW1ibGVyPiBtX2Rp
c2Fzc2VtYmxlcjsKICAgICAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21w
aWxhdGlvbjsKLSAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJh
dG9yKFZNKik7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKIAogICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzA1LDEyICs3MDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPAogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlu
bGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElu
bGluZUNvZGUpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJl
c3VsdFJlZ3MsIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
IApAQCAtNzc5LDEyICs3NzgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC04MTksMTUgKzgxNywxNCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKICNlbmRpZgogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgp
OwpAQCAtODg2LDE1ICs4ODMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQwogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAotICAg
IFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9u
KTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCBjYWxsVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIGNhbGxUYWcsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZp
c2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFr
ZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVh
c29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTAsOSArMjUwLDgg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bExpbmtJbmZvKSwgcmVnVDIpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0Nh
bGxQdHJUYWcsIG1fdm0pOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBO
ZWFyQ29kZVB0clRhZykpOworICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWls
Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9u
IDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZihKCiB7CiB9CiAKLUpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2Rl
UmVmKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVSZWY6OkpJ
VENvZGVXaXRoQ29kZVJlZihDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUVHlwZSBqaXRU
eXBlKQogICAgIDogSklUQ29kZShqaXRUeXBlKQogICAgICwgbV9yZWYocmVmKQogewpAQCAtMTIx
LDEyICsxMjEsMTIgQEAgSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKAog
dm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIGFzc2VydElzVGFn
Z2VkV2l0aChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Cisg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBK
U0VudHJ5UHRyVGFnKTsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBD
b2RlUHRyVGFnKTsKLSAgICByZXR1cm4gdGFnQ29kZVB0cihleGVjdXRhYmxlQWRkcmVzcyArIG9m
ZnNldCwgQ29kZVB0clRhZyk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0Nv
ZGVQdHI8Y2hhciosIEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICByZXR1cm4gdGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRk
cmVzcyArIG9mZnNldCk7CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQpAQCAtMTYxLDcgKzE2MSw3IEBAIERpcmVjdEpJVENv
ZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXQKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGly
ZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShK
SVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29k
ZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKICAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFy
aXR5Q2hlY2spCiB7CkBAIC0xNzMsNyArMTczLDcgQEAgRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJ
VENvZGUoKQogewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJ
VENvZGU6OkNvZGVSZWYgcmVmLCBKSVRDb2RlOjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrKQordm9p
ZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2RlOjpDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwogICAgIG1fcmVmID0gcmVmOwpA
QCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYo
SkkKICAgICBBU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIg
RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCitKSVRD
b2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxs
KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogewogICAgIHN3aXRjaCAoYXJpdHkpIHsKICAgICBjYXNl
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoKQEAgLTE5Myw3ICsxOTMsNyBAQCBKSVRDb2RlOjpDb2Rl
UHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGCiAgICAgICAgIHJldHVybiBtX3dpdGhBcml0eUNo
ZWNrOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKIH0KIAog
TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdFR5cGUpCkBAIC0yMDEsNyAr
MjAxLDcgQEAgTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdAogewogfQog
Ci1OYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5
cGUpCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
cmVmLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRU
eXBlKQogewogfQpAQCAtMjEwLDEzICsyMTAsMTMgQEAgTmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJ
VENvZGUoKQogewogfQogCi12b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKENv
ZGVSZWYgcmVmKQordm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IHJlZikKIHsKICAgICBBU1NFUlQoIW1fcmVmKTsKICAgICBtX3JlZiA9
IHJlZjsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0pJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
TmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRjaCAoYXJpdHkpIHsKQEAgLTIyNiw3
ICsyMjYsNyBAQCBKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGCiAgICAg
ICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVQdHIoKTsKKyAgICByZXR1cm4gQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw4ICs1MCw4IEBA
IGNsYXNzIFZNOwogCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEpJVENvZGU+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBD
b2RlUmVmOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+OworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVSZWYgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPjsKIAogICAgIGVudW0gSklUVHlwZSA6IHVpbnQ4X3QgewogICAg
ICAgICBOb25lLApAQCAtMTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGpp
dENvZGUtPmppdFR5cGUoKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRP
ZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCkgPSAwOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHByaXZhdGU6CiBjbGFzcyBKSVRDb2Rl
V2l0aENvZGVSZWYgOiBwdWJsaWMgSklUQ29kZSB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUQ29kZVdp
dGhDb2RlUmVmKEpJVFR5cGUpOwotICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRU
eXBlKTsKKyAgICBKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgSklU
VHlwZSk7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5KSVRDb2RlV2l0aENvZGVSZWYoKTsKQEAg
LTIxNywzMiArMjE3LDMyIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKSBvdmVy
cmlkZTsKIAogcHJvdGVjdGVkOgotICAgIENvZGVSZWYgbV9yZWY7CisgICAgQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklU
Q29kZVdpdGhDb2RlUmVmIHsKIHB1YmxpYzoKICAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwot
ICAgIERpcmVjdEpJVENvZGUoQ29kZVJlZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKICAgICB2aXJ0dWFsIH5EaXJl
Y3RKSVRDb2RlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmLCBD
b2RlUHRyIHdpdGhBcml0eUNoZWNrKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVS
ZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sp
OwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7
CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQ29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOwor
ICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKIGNsYXNz
IE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKIHB1YmxpYzoKICAg
ICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUpOwotICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJlZiwgSklU
VHlwZSk7CisgICAgTmF0aXZlSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBKSVRUeXBl
KTsKICAgICB2aXJ0dWFsIH5OYXRpdmVKSVRDb2RlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFs
aXplQ29kZVJlZihDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWY8
SlNFbnRyeVB0clRhZz4pOwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNr
TW9kZSkgb3ZlcnJpZGU7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBhZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMjggKzM4LDI4IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IEVudHJ5IHsKICAgICAg
ICAgRW50cnkoKSB7IH0KIAotICAgICAgICBFbnRyeSh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
b2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24pCisgICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
bikKICAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICAsIG1fY29kZUxvY2F0aW9uKGNvZGVMb2NhdGlvbikKICAgICAgICAgeyB9CiAKICAgICAg
ICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlSW5kZXg7IH0KLSAgICAgICAgaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlv
bigpIHsgcmV0dXJuIG1fY29kZUxvY2F0aW9uOyB9CisgICAgICAgIGlubGluZSBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24oKSB7IHJldHVybiBtX2NvZGVMb2Nh
dGlvbjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4
OwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2NvZGVMb2NhdGlvbjsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9jb2RlTG9jYXRpb247CiAgICAgfTsKIAog
cHVibGljOgotICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2Nh
dGlvbkxhYmVsIGNvZGVMb2NhdGlvbikKKyAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24pCiAg
ICAgewogICAgICAgICBtX2VudHJpZXMuYXBwZW5kKHsgYnl0ZWNvZGVJbmRleCwgY29kZUxvY2F0
aW9uIH0pOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoKCkgeyBtX2VudHJpZXMuc2hyaW5rVG9G
aXQoKTsgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluZCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSBjb25zdAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGZpbmQodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0K
ICAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxFbnRyeSwgdW5zaWduZWQ+KG1fZW50cmllcywKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkt
PmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgaWYgKCFlbnRy
eSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgIHJldHVy
biBlbnRyeS0+Y29kZUxvY2F0aW9uKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjEsOSArMTYxLDkgQEAgdm9pZCBKSVREaXNhc3NlbWJsZXI6OnJlcG9ydEluc3Ry
dWN0aW9ucwogCiB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50U3Ry
ZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBm
cm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCiB7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGZyb20pOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHRvTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodG8pOwotICAgIGRp
c2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwgdG9Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzczx1aW50
cHRyX3Q+KCkgLSBmcm9tTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpLCAi
ICAgICAgICAiLCBvdXQpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFn
PiBmcm9tTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+
KGZyb20pOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFnPiB0b0xvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPih0byk7CisgICAg
ZGlzYXNzZW1ibGUoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uLmRhdGFMb2NhdGlvbjx1aW50cHRy
X3Q+KCkgLSBmcm9tTG9jYXRpb24uZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSwgIiAgICAgICAg
Iiwgb3V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQog
ICAgICAgICBjYXRjaFJvdXRpbmUgPSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPnUucG9pbnRlcjsK
ICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0Q29k
ZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CisgICAgICAgIGNhdGNoUm91dGluZSA9IExM
SW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyhoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
CiAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wRW50cnlGcmFtZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsMTggKzczLDE4IEBAIEpJ
VEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6
OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsK
ICAgICBBU1NFUlQobV9zdGFydC5pc1NldCgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFy
dCA9IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdGFydCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0ID0gZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdGFydCk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guc3RhcnQgPSBz
dGFydDsKIAogICAgIGludDMyX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIHN0YXJ0LCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1f
ZG9uZSkpOworICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZjxOb1B0clRhZz4obV9k
b25lKSk7CiAgICAgQVNTRVJUKGlubGluZVNpemUgPiAwKTsKICAgICBtX3N0dWJJbmZvLT5wYXRj
aC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKIAogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRh
RnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1f
c2xvd1BhdGhDYWxsKSk7CisgICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mPE5vUHRy
VGFnPihtX3Nsb3dQYXRoQ2FsbCkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0
YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2lu
KSk7CisgICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mPE5vUHRyVGFnPihtX3Nsb3dQ
YXRoQmVnaW4pKTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjEgKzExNiwxOSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAgICAgY29udDhCaXQubGluayh0aGlzKTsKIH0K
IAotQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVu
Y3Rpb24pCitBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0
cjxOb1B0clRhZz4gdGFyZ2V0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwo
KTsKLSAgICBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSwgTmVhckNvZGVQdHJUYWcpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFr
ZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbikpKTsKKyAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgSklUOjpD
YWxsIEpJVDo6ZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0ciBmdW5jdGlvbikKK0FMV0FZU19JTkxJ
TkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFy
Z2V0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZz
ZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhclRhaWxDYWxsKCk7Ci0gICAgYXNz
ZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5lYXJD
b2RlUHRyVGFnKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9i
eXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24pKSk7CisgICAgbV9jYWxscy5hcHBl
bmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKICAg
ICByZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC0xNTEsMzUgKzE0OSwzNSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhCiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1l
KCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24s
IHRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rp
b24pOwogICAgIGV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKICNpZiBP
UyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5
cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyAgdGFnKQorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tB
bmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoZnVuY3Rpb24s
IHRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoU2xv
d1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uKTsKICAgICBleGNlcHRpb25DaGVjaygpOwogICAgIHJl
dHVybiBjYWxsOwogfQogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3Qg
RnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHNl
dHRpbmcgdG9wQ2FsbEZyYW1lIHRvIHRoZWlyIGNhbGxlcgotICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICBleGNlcHRpb25DaGVja1dp
dGhDYWxsRnJhbWVSb2xsYmFjaygpOwogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcs
IGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgdGFn
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE4OCw5ICsxODYsOSBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNh
bGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgaW50IGRzdCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgdGFnKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
OSArNjIsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldChtX2lu
bGluZVNpemUpOyB9Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydExvY2F0aW9u
KCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2Nh
dGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3Rh
cnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9m
ZnNldChtX2lubGluZVNpemUpOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0
T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9CisgICAgQ29kZUxvY2F0
aW9uQ2FsbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIG1f
aW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExv
Y2F0aW9uKTsgfQogICAgIAogICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBq
aXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9IHRydWUpCiAgICAgewpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkKKyAgICB2b2lkIGdlbmVy
YXRlT3V0T2ZMaW5lKENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGF1dG8gbGlua0p1bXBUb091
dE9mTGluZVNuaXBwZXQgPSBbJl0gKCkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpAQCAtMTM5LDEzICsxMzksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtX2lubGluZVNpemUpKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIG1faW5saW5lU3RhcnQuZGF0YUxvY2F0aW9uKCksIGppdC5tX2Fzc2VtYmxl
ci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0Jy
YW5jaENvbXBhY3Rpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5p
c1ZhbGlkKCkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsKG1fY29kZS5jb2RlKCkpKTsKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgTmVhckNvZGVQdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0
byBvdXQgb2YgbGluZSBzdHViIik7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fY29kZS5jb2RlKCkpKTsK
KyAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRo
SUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CiAgICAgICAg
IH07CiAKICAgICAgICAgYXV0byByZXBsYWNlQ2FsbCA9IFsmXSAoKSB7Ci0gICAgICAgICAgICBQ
dHJUYWcgY2FsbFRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIG1faW5zdHJ1Y3Rpb24pOwotICAg
ICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgY2FsbFJlcGxhY2VtZW50LCBjYWxsVGFnKTsKKyAgICAgICAgICAgIGZ0bFRo
dW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCkudGVt
cGxhdGUgcmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgY2FsbFJlcGxhY2VtZW50KTsKICAg
ICAgICAgfTsKIAogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKQEAgLTE2OCw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9Eb25l
LCBkb25lTG9jYXRpb24oKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJ
WkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZm
ZXIsIE5lYXJDb2RlUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZh
c3QgSUMgc25pcHBldCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5r
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQg
b2YgbGluZSBmYXN0IElDIHNuaXBwZXQiKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWdl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHdvbid0IG5lZWQgdG8gcmVnZW5lcmF0ZSwgc28gd2UgY2FuIHdpcmUgdGhl
IHNsb3cgcGF0aCBjYWxsCkBAIC0yMTAsNyArMjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dQYXRoSnVtcExpc3QsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigp
KTsKIAogICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzog
Z2VuZXJhdGluZyBvdXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAgY29k
ZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2Vu
ZXJhdGluZyBvdXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CiAgICAgICAgIH0KIAogICAgICAgICBs
aW5rSnVtcFRvT3V0T2ZMaW5lU25pcHBldCgpOwpAQCAtMjE4LDE3ICsyMTcsMTcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBmaW5hbGl6ZUlubGluZUNvZGUoY29uc3QgTWF0aElDR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICB7Ci0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRo
U3RhcnQsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3Rh
dGUuZmFzdFBhdGhTdGFydCk7CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFydDsKIAogICAg
ICAgICBtX2lubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAotICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0
UGF0aEVuZCwgTm9QdHJUYWcpKTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KHN0YXRlLmZhc3RQYXRoRW5kKSk7CiAgICAgICAgIEFTU0VSVChtX2lu
bGluZVNpemUgPiAwKTsKIAogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxM
b2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoQ2FsbCkp
OworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oc3Rh
dGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3Rh
cnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAg
ICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0KSk7Cisg
ICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihzdGF0ZS5z
bG93UGF0aFN0YXJ0KSk7CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUo
KSBjb25zdCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsgfQpAQCAtMjQ3LDggKzI0Niw4IEBAIHB1
YmxpYzoKIAogICAgIEFyaXRoUHJvZmlsZSogbV9hcml0aFByb2ZpbGU7CiAgICAgSW5zdHJ1Y3Rp
b24qIG1faW5zdHJ1Y3Rpb247Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IG1faW5saW5lU3RhcnQ7CiAgICAgaW50MzJfdCBtX2lubGluZVNpemU7
CiAgICAgaW50MzJfdCBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbjsKICAg
ICBpbnQzMl90IG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMzA3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMzcsMTcgKzEwMzcsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywg
bV9jb2RlQmxvY2spOwogICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFk
VHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5
cGVKdW1wVG9Eb25lKSk7CiAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRh
ZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFk
ZHJlc3MudmFsdWUoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBOb1B0clRhZykp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJU
YWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIzMDcy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0Miw4ICs2NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVj
dGlvbiogY3VyCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBQdHJUYWcgZXhjZXB0aW9uSGFuZGxlclRhZyA9IEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgZXhjZXB0aW9uSGFu
ZGxlclRhZyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewpAQCAtNjgxLDcgKzY4MCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOworICAg
IGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5
Nyw3ICs2OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRh
YmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0
clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyArNzExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFs
dWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2MywxNyArMTE2Miwx
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICAKICAgICBieVZh
bEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBIYXNQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFk
ZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjMyLDcgKzEyMzEs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVyCiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgSGFzUHJvcGVydHlQdHJUYWcsIGRz
dCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsNyArODAxLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsT3B0aQogICAgIGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uUHV0
QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMpOwogICAgIH0KICAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9CkBAIC04ODUsNyArODg1LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VgogICAgIGlmICh0cnlEaXJl
Y3RQdXRCeVZhbE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRh
ZykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwog
ICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1
ZSwgYnlWYWxJbmZvKTsKQEAgLTkzMiwxMiArOTMyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2EKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IFB0clRhZyByZXN1bHRUYWcpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxl
ckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBw
dHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldENv
ZGVCbG9jaygwKTsKIApAQCAtOTUzLDE5ICs5NTIsMTkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSwgcmVzdWx0VGFnKSwKKyAgICAgICAgICAgICAgICB0YWdDRnVuY3Rp
b25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLAogICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
ICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5v
bmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0
aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVj
dXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgfQogCkBAIC05ODIsMTcgKzk4MSwxNyBAQCBzdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIHZtLT5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlLCByZXN1bHRUYWcpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6
Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAg
ICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCisgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1l
KSk7CiB9CiAKQEAgLTEwMDIsNyArMTAwMSw2IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBQdHJUYWcgbGlua2VkVGFy
Z2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKQEAgLTEw
MTIsMjYgKzEwMTAsMjYgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYg
KGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
Pigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua0ZvcihleGVj
Q2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRy
LCBDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxs
TGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCi0gICAgICAg
ICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQdHIoY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpLCBDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgdm9p
ZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxl
ZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbyk7
CiAgICAgfQogCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3Bl
VW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4
ZWN1dGFibGUoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwg
TXVzdENoZWNrQXJpdHkpOwpAQCAtMTAzOSw4ICsxMDM3LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAg
ICAgICAgICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9u
UHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
KHRocm93RXhjZXB0aW9uVGFnLCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwog
ICAgICAgICB9OwogCkBAIC0xMDY1LDkgKzEwNjIsOSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zv
cihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwg
Q29kZVB0clRhZyk7CisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywg
Y29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCi0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChj
b2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIGxpbmtlZFRhcmdldFRhZykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRh
aWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDk3LDEwICsxMDk0LDEw
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKIAogICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHI7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0
clRhZywgTmVhckNvZGVQdHJUYWcpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTExMTIsMTYgKzExMDksMTYgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlua0luZm8tPm1h
eE51bUFyZ3VtZW50cygpOwogICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3RzIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBj
b2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVj
a0FyaXR5KS5yZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RD
aGVja0FyaXR5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpLnJl
dGFnZ2VkKENvZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIGNvZGVQdHIg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJl
cXVpcmVkKTsKICAgICB9CiAgICAgCiAgICAgbGlua0RpcmVjdEZvcihleGVjLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIFB0
clRhZyByZXN1bHRUYWcpCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKQEAgLTExMzQsMTIgKzExMzEsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5j
dGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25D
ZWxsKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oKnZt
LCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9
IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAg
ICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChj
b2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAg
ICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgcmVzdWx0VGFnKTsKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxM
aW5rSW5mbyk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CkBAIC0xMTQ3LDEyICsxMTQ0LDEx
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CiAgICAgaWYgKFVO
TElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25U
YWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgICAgICBpZiAoIWlz
Q2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMs
IGZ1bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTExNjEsMjMgKzExNTcsMjAg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICBFWENF
UFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gcmVpbnRlcnByZXRfY2FzdDxF
eGNlcHRpb24qPihlcnJvcikpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGhyb3dFeGNl
cHRpb25UYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0clRh
ZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICBraW5kLCBNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2Fs
bCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBQdHJUYWcgcmVzdWx0
VGFnID0gcHRyVGFnKExpbmtQb2x5bW9ycGhpY0NhbGxSZXN1bHRQdHJUYWcsIHZtKTsKLSAgICBT
bG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2Fs
bGVlLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCByZXN1bHRUYWcpOworICAg
IFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWND
YWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCiAgICAgbGlua1Bv
bHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkpOwogICAgIApAQCAtMTE4NiwxMSArMTE3OSw4IEBAIFNsb3dQYXRo
UmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIFB0clRhZyByZXN1bHRUYWcg
PSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbElnbm9yZWQsIHJlc3VsdFRhZyk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRo
RnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbEln
bm9yZWQpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCkBAIC0xNTkwLDggKzE1ODAsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAg
ICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJ1
ZVRyaVN0YXRlKTsKICAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB2bS5nZXRDVElTdHViKERGRzo6
b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0clRhZywgJnZtKTsKLSAg
ICAgICAgdGFyZ2V0UEMgPSByZXRhZ0NvZGVQdHIodGFyZ2V0UEMsIHRodW5rVGFnLCBiaXR3aXNl
X2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgIHRhcmdldFBDID0gcmV0YWdDb2RlUHRyKHRh
cmdldFBDLCBKSVRUaHVua1B0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBkYXRhQnVmZmVyKTsKICAgICB9CiAK
QEAgLTE2NDIsMTAgKzE2MzEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyCiAgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAg
ICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKLSAg
ICAgICAgdm9pZCogZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGlt
aXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAg
ICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGVudHJ5LCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihlbnRyeSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBlbnRyeSA9IERGRzo6
cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICByZXR1cm4gZW50cnkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7
CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTY2NCwxMCArMTY1MSw4
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBzd2l0Y2gg
KG9wdGltaXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVENvZGU6OkRG
R0pJVDoKICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogewotICAgICAgICB2b2lkKiBlbnRyeSA9
IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgoZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KGVudHJ5KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHJl
dHVybiBlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKICAgICB9CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkBAIC0xODUyLDcgKzE4MzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBn
ZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQu
YXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAg
ICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAg
ICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBv
cGVyYXRpb25HZXRCeVZhbFN0cmluZyk7CiAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChl
eGVjLCBpKTsKICAgICAgICAgICAgIH0KQEAgLTE5OTIsNyArMTk3Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBpZiAodHJ5R2V0QnlWYWxPcHRpbWl6
ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSA9
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRy
eSB0byBvcHRpbWl6ZS4KICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgb3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdl
dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MpKTsKQEAgLTIwMzIsNyArMjAxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSGEKICAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEw
CiAgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7
CiAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMs
IEhhc1Byb3BlcnR5UHRyVGFnKSk7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlHZW5lcmljKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA5Myw3ICsy
MDc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAg
ICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMt
PmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgYXV0byBnZXRCeVZhbEZ1bmN0aW9uID0g
YnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihn
ZXRCeVZhbEZ1bmN0aW9uLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgZ2V0QnlWYWxGdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBi
YXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKQEAgLTIyNDIsNyArMjIyNyw3
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoQ2hhclcKICAgICAgICAgICAg
IHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgoKnZhbHVlKVswXSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWco
U3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgo
cmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKQEAgLTIyNjEsNyArMjI0Niw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3dpdGNoSW1tV2kKICAgICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aUZv
clZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlEZWZhdWx0
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgcHRy
VGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKHJlc3VsdCwgSlNTd2l0Y2hQdHJUYWcpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjgxLDcgKzIyNjYsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUp
KTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKLUpJVDo6Q29kZVJlZiBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCitKSVQ6OkNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtMTY3
LDcgKzE2Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRy
VGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFu
Y2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsK
KyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihtX3ZtLT5nZXRD
VElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NTcsNyArNTU3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIHBva2UocmVnVDEs
IHBva2VPZmZzZXQrKyk7CiAgICAgcG9rZShyZWdUMCwgcG9rZU9mZnNldCsrKTsKICAgICBwb2tl
KFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgcG9rZU9mZnNldCsrKTsKLSAgICBDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIE5vUHRyVGFnKTsK
KyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1p
emUpOwogI2Vsc2UKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3Nl
biB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBwaW5nIHNo
b3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAotSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KFZNKiB2bSkKK0pJVDo6Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC05MSw3ICs5MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwg
c3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIz
Miw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0
aGlzKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCBkc3QsIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xvd0RvbmVDYXNlID0ganVtcCgpOwog
CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCAKICAg
ICAgICAgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAg
ICAgIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChDb2Rl
TG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRh
Zz4obV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8s
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBA
IC0yNzAsNyArMjcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1
YwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFn
LCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZh
bEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTQ1
MCw3ICs0NTAsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQYXRoSnVtcCgp
LmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIFB1dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHBy
b3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCkBAIC00ODcsNyAr
NDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEludGVycHJldGVy
OjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IFB1dFByb3BlcnR5UHRyVGFnLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoSW5zdAogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJv
cGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmlt
cGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwo
KSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KQEAgLTYyNSw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChJCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1
bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzA0
LDcgKzcwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzQ2LDcgKzc0Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQ
dXRQcm9wZXJ0eVB0clRhZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmlt
cGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0xMjc5
LDE3ICsxMjc5LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4K
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxh
YmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAg
IAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAot
ICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAg
ICAiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAg
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFzdERvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0RvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvTmV4dEhvdFBhdGgpKTsKICAgICBpZiAoIW1fZXhj
ZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkBAIC0xMzE3LDEyICsxMzE3LDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZm
ZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVz
JyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRm
OCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnZhbHVlKCkpOwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYywgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9Q
dHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQpAQCAtMTM2MSw4ICsxMzYxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKICAg
ICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgpKTsKQEAgLTEzNzIsMTYgKzEzNzIsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0
T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3Q7CiAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAgICAgIkJhc2VsaW5lIHB1
dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgfSBl
bHNlIHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRy
VGFnLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGlu
ZVB0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRy
ZXNzKSksIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
IHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEzOTUsNyArMTM5
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKIAogICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0
T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUp
KTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7
CkBAIC0xNDA3LDEyICsxNDA3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
V2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJs
b2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRf
YnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3Bl
cnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0g
Z2VuLnN0dWJJbmZvKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJ
bmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
YyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljKSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
Um91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNz
IEpJVFN0dWJSb3V0aW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGlu
ZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSklUU3R1YlJv
dXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKQorICAgIEpJVFN0dWJSb3V0
aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNv
ZGUpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAg
IHsKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50
IHRvIHBhc3MgYSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCiAgICAg
Ly8gYSBSZWZQdHI8SklUU3R1YlJvdXRpbmU+LgogICAgIHN0YXRpYyBSZWY8SklUU3R1YlJvdXRp
bmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJhd0NvZGVQb2ludGVyKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHJhd0NvZGVQb2ludGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSklUU3R1YlJvdXRpbmUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEpJVFN0dWJSb3V0aW5lKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsK
ICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKQEAgLTY5LDExICs2
OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlzIGNvcHlhYmxl
LCBidXQgYXQgdGhlIGNvc3Qgb2YgcmVmZXJlbmNlCiAgICAgLy8gY291bnRpbmcgY2h1cm4uIFJl
dHVybmluZyBhIHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9mIHJlZHVjaW5nCiAgICAgLy8gdGhl
IGNodXJuLgotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZTsgfQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKLSAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFzQ29kZVB0cihSZWY8SklUU3R1YlJvdXRp
bmU+JiYgc3R1YlJvdXRpbmUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRT
dHViUm91dGluZVB0clRhZz4gYXNDb2RlUHRyKFJlZjxKSVRTdHViUm91dGluZT4mJiBzdHViUm91
dGluZSkKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsK
ICAgICAgICAgQVNTRVJUKCEhcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9j
b2RlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9j
b2RlOwogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ2ICs0
NSw0NiBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKIHsK
ICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0
aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklU
VGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSogdm0pCiB7
CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0qIHZt
KQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZt
LCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5h
dGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSogdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpj
YW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91
dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNh
bGwoVk0qIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBj
dGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3Ry
dWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1
bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2bSkKIHsKICAgICBBU1NFUlQo
Vk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlv
bkNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
SklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0q
IHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAu
YWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOworICAgIENUSVN0dWJNYXA6
OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5
KSB7CiAgICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlz
dGluZyBlbnRyaWVzLgogICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkBA
IC05MywxMiArOTMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1
YgogICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhp
c3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgIENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlT
dHViTWFwLmZpbmQoZ2VuZXJhdG9yKTsKICAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVu
ZCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7CiAgICAgcmV0dXJu
IGVudHJ5LT52YWx1ZTsKIH0KIApAQCAtMTIzLDEyICsxMjMsMTIgQEAgTmF0aXZlRXhlY3V0YWJs
ZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogCiAgICAgUmVmUHRyPEpJVENvZGU+IGZvckNhbGw7
CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZW50
cnkgPSBnZW5lcmF0b3Iodm0pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gZW50cnkgPSBnZW5lcmF0b3Iodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CiAgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50
cnkuY29kZSgpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGZvckNhbGwgPSBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDYWxsKHZtKSksIEpJVENvZGU6
Okhvc3RDYWxsVGh1bmspKTsKKyAgICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVmKG5ldyBOYXRpdmVK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNhbGwodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkp
LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCi0gICAgUmVmPEpJVENvZGU+IGZvckNv
bnN0cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pKSwgSklU
Q29kZTo6SG9zdENhbGxUaHVuaykpOworICAgIFJlZjxKSVRDb2RlPiBmb3JDb25zdHJ1Y3QgPSBh
ZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZtKS5y
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAg
IAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRh
YmxlOjpjcmVhdGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9uLCBXVEZN
b3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBpbnRyaW5zaWMsIHNpZ25hdHVyZSwgbmFt
ZSk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUo
ZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRp
dmVFeGVjdXRhYmxlLCB0aGlzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAg
SklUVGh1bmtzKCk7CiAgICAgdmlydHVhbCB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Rp
TmF0aXZlVGFpbENhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwo
Vk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2
ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25z
dHJ1Y3QoVk0qKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1
bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIo
VGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY3RpU3R1YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVu
Y3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWRO
YXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2Vu
ZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+
IENUSVN0dWJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElTdHViTWFwOwogICAgIENUSVN0dWJN
YXAgbV9jdGlTdHViTWFwOwogCiAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPiBIb3N0RnVuY3Rpb25LZXk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNw
cAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBQQ1Rv
Q29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUCiAgICAgICAgICAgICBjb2RlT3Jp
Z2luQ29tcHJlc3Nvci53cml0ZTx1aW50cHRyX3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgfTsKIAotICAgIG1fcGNSYW5nZVN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3Rh
cnQpLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCk7Ci0gICAgbV9wY1JhbmdlRW5kID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2Nh
dGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFM
b2NhdGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlRW5kID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPE5vUHRyVGFnPihidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCkuZW5kKS5kYXRhTG9j
YXRpb248dWludHB0cl90PigpOwogICAgIG1fcGNSYW5nZUVuZCAtPSAxOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKTsgaSsrKSB7CiAg
ICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdlJiBjb2RlUmFuZ2UgPSBi
dWlsZGVyLm1fY29kZVJhbmdlc1tpXTsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKLSAgICAgICAgdm9p
ZCogZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlv
bigpOworICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRh
Zz4oY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgdm9pZCogZW5kID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRp
b24oKTsKICAgICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0YXJ0KSk7CiAgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEpOwogICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQogICAg
ICAgICAgICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CiAg
ICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3Rh
cnQpOworICAgICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
YnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQp
OwogCiAgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CiAgICAgICAgIGJ1aWxkQ29kZU9yaWdp
blRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NCw2ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ1aWxkTWFwcGluZzsKIH07
CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzY2NTg+CiBjbGFzcyBQQ1RvQ29kZU9y
aWdpbk1hcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXApOwog
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBvbHltb3JwaGljQ2FsbENhc2U6OmR1
bXAoUHJpbnRTdHJlCiB9CiAKIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVS
ZWYsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwK
KyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBj
b2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVyRnJh
bWUsCiAgICAgQ2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxs
Q2FzZT4mIGNhc2VzLAogICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiYmIGZhc3RDb3VudHMpCiAg
ICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZVJlZiwgdm0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCBwcml2YXRl
OgogY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKLSAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgICAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lLCBDYWxsTGlua0luZm8mLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2Fz
ZT4mLAogICAgICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4mJiBmYXN0Q291bnRzKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjMwNzI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNDAgKzY2LDM3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRnVuY3Rp
b25QdHIgcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1
dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsKQogewotICAgIEZ1bmN0aW9uUHRyIHRhcmdldCA9IE1hY3JvQXNz
ZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxPcGVyYXRpb25Q
dHJUYWc+KGNhbGwpOwogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGF1dG8q
IGNhbGxUYXJnZXQgPSBjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhD
YWxsVGh1bmsoc2xvd1BhdGhUaHVuaykuY2FsbFRhcmdldCgpOwotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHIoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxPcGVyYXRpb25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4
ZWN1dGFibGVBZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpOworICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5r
KHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwogICAgIH0K
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHVudGFnQ0Z1bmN0aW9uUHRyKHRhcmdldC5l
eGVjdXRhYmxlQWRkcmVzcygpLCBQdXRQcm9wZXJ0eVB0clRhZyksIENGdW5jdGlvblB0clRhZyk7
CisgICAgcmV0dXJuIHRhcmdldC5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCk7CiB9CiAKLXZv
aWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9j
YXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uLCBQdHJUYWcgY2Fs
bFRhZykKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgewogICAg
ICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwogICAgICAgICBGVEw6OlRodW5rcyYgdGh1
bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHIgdGFyZ2V0ID0gTWFjcm9B
c3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENh
bGxUYXJnZXQ8T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRo
dW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPEpJVFRodW5r
UHRyVGFnPigpKTsKICAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtl
eUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOwotICAgICAgICBrZXkgPSBrZXku
d2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHIodGh1bmtzLmdldFNsb3dQYXRo
Q2FsbFRodW5rKGtleSkuY29kZSgpKTsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5ld0Nh
bGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIGtleS5jYWxsUHRyVGFnKCkpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24p
OworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5yZXRhZ2dlZENv
ZGU8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZWxzZSAv
LyBFTkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwg
RnVuY3Rpb25QdHIobmV3Q2FsbGVlRnVuY3Rpb24sIGNhbGxUYWcpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0
aW9uUHRyVGFnPigpKTsKIH0KIAogZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CkBAIC0xNTAsNyAr
MTQ3LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludAogICAgIH0K
IH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5j
dGlvbihHZXRCeUlES2luZCBraW5kKQoraW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQp
CiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUlES2luZDo6Tm9ybWFsOgpA
QCAtMTY2LDcgKzE2Myw3IEBAIGlubGluZSBGdW5jdGlvblB0ciBhcHByb3ByaWF0ZU9wdGltaXpp
bmcKICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRy
IGFwcHJvcHJpYXRlR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQpCitpbmxpbmUgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5SWRGdW5jdGlvbihHZXRC
eUlES2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlJREtp
bmQ6Ok5vcm1hbDoKQEAgLTIxMCw3ICsyMDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1p
emluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0QXJyYXlMZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI2Nyw3ICsyNjQsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9w
ZXJ0eU5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5m
by5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVu
Y3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICB9CkBAIC0zNzYsNyArMzczLDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZv
T3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgp
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8s
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5MSw3ICszODgsNyBAQCB2b2lkIHJlcGF0Y2hHZXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgCiAgICAgaWYgKHRyeUNhY2hlR2V0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZXRCeUlkRnVuY3Rpb24o
a2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlh
dGVHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgIH0KIH0KIApAQCAtNDYzLDcgKzQ2MCw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxM
b2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCksIFB1dFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRo
dW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0
aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2Uo
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTgyLDcgKzU3OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CiAKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC01OTcsNyArNTk0LDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVgogICAgIAogICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9u
Q2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8u
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCks
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAg
fQogfQogCkBAIC02NzEsNyArNjY4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlSW4oCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9ySW4oKSwKLSAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNjg2LDI0ICs2ODMsMjMgQEAgdm9pZCByZXBhdGNoSW4oCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIGlm
ICh0cnlDYWNoZUluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8p
ID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9u
SW4sIENGdW5jdGlvblB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0
aW9uSW4pOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgUHRyVGFnIGxpbmtU
YWcpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYp
CiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVSZWYucmV0YWdnZWRDb2Rl
KGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oY29kZVJlZi5jb2RlKCkpKTsKIH0KIAotc3RhdGlj
IHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlua1RhZykKK3N0YXRpYyB2b2lkIGxpbmtT
bG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0
Q1RJU3R1YihnZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5r
VmlydHVhbENhbGxQdHJUYWcsIHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuaywgbGlua1RhZyk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0
dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxM
aW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3Jl
YXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0K
IApAQCAtNzIxLDcgKzcxNyw3IEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlND
ZWxsKiAKIAogdm9pZCBsaW5rRm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpTT2JqZWN0
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBQdHJUYWcgY29kZVRhZykK
KyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwogCkBAIC03
NDMsMTQgKzczOSwxMyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3Nl
bWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwg
aW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBv
aW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNv
ZGVQdHIucmV0YWdnZWQoY29kZVRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
ZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxp
emF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkp
IHsKLSAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0
clRhZywgJnZtKTsKLSAgICAgICAgbGlua1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8sIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1RhZyk7CisgICAgICAgIGxpbmtTbG93
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNzU5LDcgKzc1NCw3IEBAIHZvaWQg
bGlua0ZvcigKIAogdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIoKSk7CiAgICAgCkBAIC03NzQsOCArNzY5LDggQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogCiAg
ICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFp
bENhbGwpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKGNhbGxMaW5r
SW5mby5wYXRjaGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRy
KSk7Ci0gICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0lu
Zm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQ
dHIpKTsKKwogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChleGVjLCAmY2FsbExpbmtJbmZvKTsKIH0KQEAgLTc4OSw3ICs3
ODQsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8pOwogfQogCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBQdHJUYWcgY29kZVRh
ZykKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVm
KQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlu
a0luZm8uY2xlYXJDb2RlQmxvY2soKTsKQEAgLTgwMSw3ICs3OTYsNyBAQCBzdGF0aWMgdm9pZCBy
ZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0lu
Zm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwotICAgICAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmLCBjb2RlVGFnKTsKKyAgICAgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7CiAgICAgICAgIGNhbGxMaW5r
SW5mby5jbGVhckNhbGxlZSgpOwogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CkBAIC04MTYsOCArODExLDcgQEAgdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxv
ZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCAiXG4i
KTsKICAgICAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZt
KTsKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExp
bmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtODI5LDE2ICs4MjMsMTUg
QEAgdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbAogICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygi
TGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7CiAKLSAgICBQdHJUYWcgbGlua1Rh
ZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsICZ2bSk7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5m
byk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rLCBsaW5r
VGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgcmV2
ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVs
bHB0ciwgdHJ1ZSkpOwogfQogCiBuYW1lc3BhY2Ugewogc3RydWN0IENhbGxUb0NvZGVQdHIgewog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogfTsKIH0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKIApAQCAtMTAzNCw3ICsxMDI3LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAKICAgICAgICAgQ2FsbFZhcmlhbnQg
dmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhl
Y3V0YWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhh
c0pJVENvZGVGb3JDYWxsKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0
YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNo
ZWNrTm90UmVxdWlyZWQpOwpAQCAtMTA4MCw3ICsxMDczLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogI2VuZGlmCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJK
aXQuanVtcCgpOwpAQCAtMTA5OCwyMSArMTA5MSwyMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoCiAgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9y
bWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCiAg
ICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0Nh
bGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKICAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2Fs
bCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIu
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnRQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3ModGFyZ2V0KSkpOwogI2Vsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5yZXRhZ2dlZChDb2Rl
UHRyVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
VG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIu
Y29kZVB0cikpOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAg
UHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1Rh
ZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUg
PSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5B
TElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IE5lYXJDb2RlUHRyVGFnLAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAg
ICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zm
c2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxp
c3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCkBAIC0xMTIxLDcgKzExMTMsNyBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hP
blJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCi0gICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQt
Yml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24t
Y2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKQEAg
LTExMzksNyArMTEzMSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIAogdm9pZCByZXNl
dEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgR2V0QnlJREtpbmQga2luZCkKIHsKLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOwogfQogCkBAIC0xMTU4LDcgKzExNTAsNyBAQCB2b2lkIHJlc2V0
UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0KIAotICAg
IGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2Fs
bExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjMwNzI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDggKzQ1LDggQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwg
Sgogdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBQdXRLaW5kKTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciwgUHRyVGFnKTsKLXZvaWQgbGlua0RpcmVjdEZvcihFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RG
b3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJik7CiB2b2lkIHVubGlua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBs
aW5rVmlydHVhbEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mKTsKQEAgLTU0LDcgKzU0LDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbAogdm9pZCByZXNldEdl
dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlES2luZCk7CiB2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNl
dEluKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsLCBGdW5jdGlvblB0ciBuZXdD
YWxsZWVGdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcpOwordm9pZCBmdGxUaHVua0F3YXJlUmVwYXRj
aENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDggQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC0+bW92ZShKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVQ6OmFyZ3VtZW50R1BSMCk7
CiAgICAgICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbVB0cihtX3BjKSwgSklUOjphcmd1
bWVudEdQUjEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU2xvd1BhdGhQ
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2ppdC0+
Y2FsbCh0YWcpOwotICAgICAgICBtX2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIobV9zbG93UGF0aEZ1bmN0aW9u
LCB0YWcpKSk7CisgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gbV9qaXQtPmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
bV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obV9z
bG93UGF0aEZ1bmN0aW9uKSkpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgbV9qaXQtPmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDE2KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMzA3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY0LDI1ICsxNjQsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaywgY29uc3Qg
Y2hhciogdGh1bmtLaW5kKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFs
bGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2sp
KTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAg
ICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3Bl
Y2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKKyAgICAgICAgICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRo
dW5rIGZvciAlcyIsIHRodW5rS2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVz
IHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBh
cmd1bWVudAogICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJsZSBh
cmNoaXRlY3R1cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uKQorICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJsZShGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBh
c3NlcnRJc0NGdW5jdGlvblB0cihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3BlY2lhbGl6ZWRUaHVua1B0clRhZywgbmV4dFB0
clRhZ0lEKCkpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2Fs
bCh0YWcpLCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOworICAgICAgICAgICAgbV9jYWxs
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChKSVRUaHVua1B0clRhZyksIGZ1bmN0aW9uLnJl
dGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihGdW5jdGlvblB0ciBmdW5j
dGlvbikKKyAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOwpAQCAtMjA5LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWls
dXJlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4+IG1fY2Fs
bHM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+Pj4gbV9jYWxsczsKICAgICB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3
LDEzIEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiUHRyVGFnLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgVk07Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7Cit0ZW1w
bGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoVk0qKTsKK3VzaW5nIFRodW5rR2Vu
ZXJhdG9yID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiAoKikoVk0qKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAKIC8v
IFdlIHdpbGwganVtcCBoZXJlIGlmIHRoZSBKSVQgY29kZSB0cmllcyB0byBtYWtlIGEgY2FsbCwg
YnV0IHRoZQogLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVzIHRvIHRocm93IGFu
IGV4Y2VwdGlvbiBpbnN0ZWFkLgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTcwLDIzICs3MCwxOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAKICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJh
bWUpOwogCi0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0
aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CiAKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhy
b3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
dGhyb3dFeGNlcHRpb25UYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0
aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAK
LXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVk
TGlua2VkVGFyZ2V0VGFnKQorc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBq
aXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQogewot
ICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7Ci0KICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwpAQCAtOTksOSAr
OTQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQubW92ZShHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxU
YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHNsb3dQYXRoRnVuY3Rpb24p
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgOCksIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwOSw5
ICsxMDQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKHNs
b3dQYXRoRnVuY3Rpb24pPihHUFJJbmZvOjpyZWdUMik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihzbG93UGF0aEZ1bmN0aW9uLCBjYWxs
VGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9u
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMTIyLDcgKzExNyw3IEBAIHN0YXRpYyB2
b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgIC8v
IFRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIEdQUiB3aWxsIGhvbGQgYSBub24temVybyB2YWx1ZSBm
b3IgdGFpbCBjYWxscy4KIAotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcp
OwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC51bnRhZ1JldHVybkFk
ZHJlc3MoKTsKIApAQCAtMTMzLDEwICsxMjgsMTAgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3Io
CiAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogCiAgICAgZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgaml0Lmp1bXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewog
ICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsg
cmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0
byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE0
NSwzMyArMTQwLDI5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIK
ICAgICAvLyBiZWVuIGFkanVzdGVkLCBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFp
bGFibGUgZm9yIHVzZS4KICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgUHRyVGFnIGV4cGVj
dGVkTGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwsIGV4cGVjdGVkTGlua2Vk
VGFyZ2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7
CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBsaW5rVGFnLCAiTGluayBjYWxsIHNsb3cgcGF0
aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRm9yIGNsb3N1
cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUg
dXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdv
aW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIFB0clRhZyBleHBlY3RlZExpbmtl
ZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7
Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwg
ZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJh
dGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWco
TGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBsaW5rVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRklYTUU6
IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxs
IHZzLiBhIHNsb3cKIC8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBm
YXN0IHRhaWwgY2FsbHMgZm9yIG1lZ2Ftb3JwaGljCiAvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5n
IHRoZSBzaHVmZmxlci4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDg4MzEKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUz
Ml82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlz
IG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAg
LTIzMiwxMiArMjIzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3Io
Vk0KIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBK
SVQgY29kZS4KICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwgY2FsbENvZGUoaml0LmxhYmVsKCkp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0LCBDb2RlUHRy
VGFnKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgSlNF
bnRyeVB0clRhZyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKICAgICAg
ICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJlZ1Q0KTsKICAgICB9
Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIENvZGVQdHJUYWcpOworICAgIGppdC5qdW1w
KEdQUkluZm86OnJlZ1Q0LCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIG5vdEpTRnVuY3Rpb24ubGlu
aygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZv
OjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKQEAgLTI0OCwxMyArMjM5LDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJn
ZXRUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlua2VkVGFy
Z2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7
CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsIHZt
KTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsIGxpbmtUYWcsCisg
ICAgICAgIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIlZpcnR1
YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkg
PT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpOwogfQpAQCAtMjYy
LDcgKzI1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KIGVu
dW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRh
Z3MsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsKIGVudW0gY2xhc3MgVGh1bmtGdW5j
dGlvblR5cGUgeyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0aW9uIH07CiAKLXN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlv
blR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1
bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQorc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1
bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3Vl
IHBhY2tldHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTY4OQpAQCAtMzA3LDkgKzI5Niw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5
cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29k
ZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50
ZXJmYWNlSklUOjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRy
VGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJl
c3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2
ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlv
bjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEpTRW50cnlQdHJUYWcpOwogCiAg
ICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFj
ZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0zMjgsNyArMzE3LDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVzaSwgSW50ZXJuYWxGdW5jdGlv
bjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIFg4NlJlZ2lzdGVyczo6cjkpOwog
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNv
bjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgaml0LnhvcjY0KFg4NlJlZ2lzdGVy
czo6ZXNpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5
LCBDb2RlUHRyVGFnKTsKKyAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBKU0VudHJ5UHRy
VGFnKTsKIAogI2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVk
eCwgcjgsIHI5LCAuLi4pOwpAQCAtMzQzLDkgKzMzMiw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtG
dW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBYODZSZWdp
c3RlcnM6OnI5KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsK
KyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpy
OSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVs
c2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJz
OjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkp
LCBDb2RlUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rp
b25Gb3Ioa2luZCkpLCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZhY2VKSVQ6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMzY3LDcgKzM1Niw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0LmxvYWRQdHIo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngxLCBJbnRlcm5hbEZ1bmN0
aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQVJNNjRSZWdpc3RlcnM6Ongy
KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNvZGVQ
b2lzb246OmtleSgpKSwgQVJNNjRSZWdpc3RlcnM6OngxKTsKICAgICBqaXQueG9yNjQoQVJNNjRS
ZWdpc3RlcnM6OngxLCBBUk02NFJlZ2lzdGVyczo6eDIpOwotICAgIGppdC5jYWxsKEFSTTY0UmVn
aXN0ZXJzOjp4MiwgQ29kZVB0clRhZyk7CisgICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6Ongy
LCBKU0VudHJ5UHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAjaWYgQ1BV
KE1JUFMpCkBAIC0zODMsOSArMzcyLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlw
ZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgICAgIGppdC54b3JQdHIo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
KSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6
b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVQdHJUYWcpOworICAgICAgICBq
aXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRH
UFIxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwg
SlNFbnRyeVB0clRhZyk7CiAKICNpZiBDUFUoTUlQUykKICAgICAvLyBSZXN0b3JlIHN0YWNrIHNw
YWNlCkBAIC00MjksOSArNDE4LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZQogI2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJl
Z2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgotICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoRXhjZXB0aW9uSGFuZGxlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0
cihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdGFnKSksIEpTSW50ZXJmYWNlSklUOjpyZWdU
Myk7Ci0gICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCB0YWcpOworICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKSksIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMyk7CisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBPcGVyYXRpb25QdHJU
YWcpOwogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaml0LmFkZFB0cihK
U0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VsaWYgT1MoV0lORE9XUykKQEAgLTQ0MSw0MCArNDI5LDQwIEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENv
ZGVQdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVu
a0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlU
eXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3Mg
IiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0
aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0
cmFtcG9saW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVu
Y3Rpb24gPyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBX
aXRoU2F2ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50
ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDog
IiIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBuYXRp
dmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uLCBDb2RlRm9y
Q2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRh
aWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlh
SnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJh
dG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1
bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhvdXRT
YXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0
aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2Vu
ZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVj
dCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVy
bmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9y
R2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5jdGlvbiwgQ29kZUZv
ckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW50ZXJuYWxGdW5jdGlvbkNvbnN0
cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJl
dHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpJbnRlcm5hbEZ1
bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFy
aXR5Rml4dXBHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJ
VCBqaXQodm0pOwogCkBAIC00OTQsNyArNDgyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFy
aXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
LCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBleHRyYVRlbXApOwogICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFU
ZW1wKTsKLSAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gcHRyVGFnKEFyaXR5Rml4dXBQdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gc3RhdGlj
X2Nhc3Q8UHRyVGFnPihyYW5kb20oKSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRy
dXN0ZWRJbW1QdHIodGVtcFJldHVyblBDVGFnKSwgZXh0cmFUZW1wKTsKICAgICBqaXQudGFnUHRy
KEdQUkluZm86OnJlZ1QzLCBleHRyYVRlbXApOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwpAQCAtNjE5LDE5ICs2MDcsMTcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogI2VuZGlmIC8vIEVuZCBvZiBV
U0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uLgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgUHRyVGFnIGFyaXR5Rml4dXBUYWcgPSBwdHJUYWco
QXJpdHlGaXh1cFB0clRhZywgdm0pOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBhcml0eUZpeHVwVGFnLCAiZml4dXAgYXJpdHkiKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKIAogICAgIGppdC5icmVha3BvaW50
KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
LSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJ1bnJlYWNoYWJsZSB0
aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJM
b2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQpAQCAtNjcyLDcgKzY1OCw3IEBA
IHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5k
RmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsK
ICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4MCw3ICs2NjYsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuCiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJp
bmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4OSw3ICs2NzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJBdCIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIC8vIGxv
YWQgY2hhciBjb2RlCkBAIC02OTksNyArNjg1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZy
b21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm9uSW50QXJnSnVtcDsKQEAgLTcyMCwxMSArNzA2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjbHozMlRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQ
b2ludFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAg
ICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBA
IC04ODAsMTIgKzg2NiwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcih0cnVuYyk7CiAK
IHN0YXRpYyBjb25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41OwogICAgIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTkyMywx
MSArOTA5LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8KICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAiZmxvb3IiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVu
a0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEp
OwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtOTQ2LDExICs5
MzIsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
ZWlsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dl
bmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1
bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0
LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTk2OSwxMSArOTU1
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG8KICAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1
bmMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAg
ICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJn
dW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGpp
dC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMDAzLDM3ICs5
ODksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJy
b3VuZCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleHBUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQot
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3Vi
bGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1
cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYg
KCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQu
Y2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihs
b2cpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAp
OwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2Fs
bCh2bSksICJsb2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAx
KTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCk7CkBAIC0xMDg2LDcgKzEwNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtH
ZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCh2bSwgMik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnMEp1bXA7CkBA
IC0xMTE3LDExICsxMTAzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5l
cmF0b3IKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiaW11bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmFuZG9tVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoKnZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qy
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCk7CkBAIC0xMTI5LDExICsxMTE1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21U
aHVua0dlbmVyYXQKIAogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKICNlbHNlCi0gICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhp
c05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTEyMTcsMTYgKzEyMDMs
MTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgR1BS
SW5mbzo6cmVnVDEpOwogICAgIGppdC54b3I2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDApOwogI2VuZGlmCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVn
VDAsIENvZGVQdHJUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBDb2RlUHRyVGFn
KTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCwgSlNFbnRy
eVB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOwog
CiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIAog
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlu
a0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgbGlua0J1ZmZlci5saW5r
KG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAotICAgICAgICBsaW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3BlY2lhbGl6ZWQg
dGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CisgICAg
ICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJv
dW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDQ2ICsyNiw0NyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5j
bHVkZSAiUHRyVGFnLmgiCiAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKK3RlbXBsYXRl
PFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3MgVk07CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Io
Vk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihW
TSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNKiwgQ2FsbExp
bmtJbmZvJik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJh
dG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0q
KTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
ZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dl
bmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21U
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0Nh
bGxUaHVuayhWTSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSosIENhbGxMaW5rSW5mbyYpOwor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29u
c3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3Io
Vk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSop
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxv
b3JUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI2ICs1OCwyNCBAQCB2b2lkIGlu
aXRpYWxpemUoKQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAgICBsbGludF9lbnRyeSgmRGF0YTo6
c19vcGNvZGVNYXApOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNP
REVfSURTOyArK2kpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IChpID09IG9wX2NhdGNoKSA/IEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcgOiBCeXRlY29kZVB0clRhZzsKLSAgICAgICAgRGF0YTo6c19v
cGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCB0YWcpOwotICAg
IH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7ICsraSkK
KyAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2Rl
TWFwW2ldLCBCeXRlY29kZVB0clRhZyk7CiAKICAgICBzdGF0aWMgY29uc3QgUHRyVGFnIHRhZ3NG
b3JPcGNvZGVbXSA9IHsKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfcHJvZ3JhbV9wcm9s
b2d1ZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9ldmFsX3Byb2xvZ3VlCi0gICAgICAg
IENvZGVQdHJUYWcsIC8vIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgIENv
ZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlCi0gICAgICAgIENv
ZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUKLSAgICAg
ICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKLSAg
ICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9j
aGVjawotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9nZW5lcmljX3JldHVybl9wb2ludAor
ICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCisgICAgICAg
IEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2V2YWxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0
clRhZywgLy8gbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0
clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRy
eVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZQorICAgICAg
ICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjawor
ICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2dlbmVyaWNfcmV0dXJu
X3BvaW50CiAgICAgICAgIEJ5dGVjb2RlUHRyVGFnLCAvLyBsbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lCiAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIC8vIGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxp
bnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9u
YXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCi0gICAgICAgIENvZGVQdHJUYWcsIC8v
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAgIEpT
RW50cnlQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgSlNF
bnRyeVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAg
IEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZQogICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbgogICAgIH07CiAKQEAgLTg5LDcgKzg3LDcgQEAgdm9pZCBpbml0
aWFsaXplKCkKICAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdID0gdGFnQ29kZVB0
cihEYXRhOjpzX29wY29kZU1hcFtvcGNvZGVJRF0sIHRhZ3NGb3JPcGNvZGVbaV0pOwogICAgIH0K
IAotICAgIHZvaWQqIGhhbmRsZXIgPSBMTEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lKTsKKyAgICB2b2lkKiBoYW5kbGVyID0gTExJbnQ6OmdldEV4
ZWN1dGFibGVBZGRyZXNzKGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4T3Bjb2RlTGVuZ3RoICsgMTsgKytpKQogICAgICAg
ICBEYXRhOjpzX2V4Y2VwdGlvbkluc3RydWN0aW9uc1tpXS51LnBvaW50ZXIgPSBoYW5kbGVyOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAy
MzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUg
Ik9wY29kZS5oIgotI2luY2x1ZGUgIlB0clRhZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NTUsNyArNTUsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBJbnN0cnVjdGlvbiogZXhjZXB0aW9u
SW5zdHJ1Y3Rpb25zKCk7CiAgICAgZnJpZW5kIE9wY29kZSogb3Bjb2RlTWFwKCk7CiAgICAgZnJp
ZW5kIE9wY29kZSBnZXRPcGNvZGUoT3Bjb2RlSUQpOwotICAgIGZyaWVuZCB2b2lkKiBnZXRDb2Rl
UHRyKE9wY29kZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4gZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldENvZGVSZWYoT3Bj
b2RlSUQpOwogfTsKIAogdm9pZCBpbml0aWFsaXplKCk7CkBAIC03OSwxNiArODAsMzYgQEAgaW5s
aW5lIE9wY29kZSBnZXRPcGNvZGUoT3Bjb2RlSUQgaWQpCiAjZW5kaWYKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEIGlkKQorQUxXQVlTX0lOTElORSB2b2lkKiBn
ZXRFeGVjdXRhYmxlQWRkcmVzcyhPcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0T3Bjb2RlKGlkKSk7CisgICAgQVNTRVJUKG9wY29kZUlE
ID49IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihnZXRPcGNvZGUob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4K
K0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNv
ZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhnZXRPcGNvZGUob3Bjb2RlSUQpKTsKK30KKwor
dGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz4gZ2V0Q29kZVJlZihPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRDb2RlUHRy
PHRhZz4ob3Bjb2RlSUQpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCit0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKE9wY29kZUlE
IG9wY29kZUlEKQoreworICAgIEFTU0VSVChvcGNvZGVJRCA+PSBOVU1CRVJfT0ZfQllURUNPREVf
SURTKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8
dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CiAKLUFMV0FZ
U19JTkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5jdGlvblB0cihPcGNvZGVJRCBjb2RlSWQpCisj
ZWxzZQorQUxXQVlTX0lOTElORSB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEIGlkKQogewotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cihjb2RlSWQpKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0T3Bjb2RlKGlkKSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50
cnlwb2ludC5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTIg
QEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bQogICAgIGlmIChWTTo6
Y2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgICAgICBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAg
ICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlv
bkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLCB2
bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAg
ICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0
cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTU5LDE5ICs1OSwxOSBAQCBzdGF0aWMgdm9pZCBz
ZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUo
Ci0gICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9n
dWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoZ2V0Q29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIGdldENvZGVQdHI8
SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJv
bG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKKyAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGdldENvZGVSZWY8
SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIGdl
dENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICAg
ICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ28KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2Rl
UmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9ldmFs
X3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVm
KCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgc2V0UHJv
Z3JhbUVudHJ5cG9pbnQoVk0mIHZtLAogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpj
YW5Vc2VKSVQoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZt
LmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IHZtLmdldENUSVN0dWIocHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAg
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAg
IFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3By
b2xvZ3VlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJl
ZiA9IGdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSk7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgc2V0TW9kdWxlUHJvZ3JhbUVu
dHJ5cG9pbnQoVgogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIo
bW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IHZtLmdldENUSVN0dWIobW9kdWxlUHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAg
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyB2b2lk
IHNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KFYKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X21vZHVsZV9w
cm9ncmFtX3Byb2xvZ3VlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZVJlZiA9IGdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbW9kdWxlX3Byb2dy
YW1fcHJvbG9ndWUpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwg
Y29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkocmV2
aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCogY2FsbFRvVGhy
b3coRXhlY1N0YXRlKiBleGVjKQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIEpTVmFsdWUoc2NvcGUu
ZXhjZXB0aW9uKCkpLCAiIChjYWxsVG9UaHJvdykuXG4iKTsKICNlbmRpZgotICAgIHJldHVybiBM
TEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lKTsKKyAg
ICByZXR1cm4gTExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKGxsaW50X3Rocm93X2R1cmluZ19j
YWxsX3RyYW1wb2xpbmUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDExICs0NDQsMTAgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKIAogICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBj
b2RlQmxvY2stPmppdENvZGVNYXAoKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRp
b24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAK
LSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZVB0clRhZywgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7Ci0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVM
b2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9U
V08oanVtcFRhcmdldCwgZXhlYy0+dG9wT2ZGcmFtZSgpKTsKQEAgLTE0MzgsNyArMTQzNyw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBp
ZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1
bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFs
dWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHZtLmdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNv
ZGVQdHIpOwogCiAgICAgICAgICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBj
YWxsTGlua0luZm8pIHsKQEAgLTE0NTAsMTIgKzE0NDksMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwg
Y2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5h
bEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFy
Z2V0ID0gY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7Cisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAgICAgICAgICAgYXNzZXJ0SXNU
YWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAg
ICAgICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQoY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMs
IGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Cisg
ICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0Nh
bGxlZSwgcGMsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwpAQCAtMTQ2NCw3ICsxNDYzLDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKQEAgLTE1MDAsMTQgKzE0OTksMTQgQEAgaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5yZW1vdmUoKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxs
ZXJDb2RlQmxvY2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7Ci0gICAgICAgIGNhbGxMaW5rSW5m
by0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIExMSW50
Q2FsbElDUHRyVGFnKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9
IGNvZGVQdHI7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKICAgICB9CiAKLSAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsK
KyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQoY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBl
eGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAg
IExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
Z2VuZXJpY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKQEAgLTE2MzcsNyArMTYzNiw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwKICAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhwY1szXS51Lm9wZXJhbmQpOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxl
ckZyYW1lKGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMoTExJ
bnQ6OmdldENvZGVQdHIobGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQpKTsKKyAgICBleGVjQ2Fs
bGVlLT5zZXRSZXR1cm5QQyhMTEludDo6Z2V0RXhlY3V0YWJsZUFkZHJlc3MobGxpbnRfZ2VuZXJp
Y19yZXR1cm5fcG9pbnQpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAgICAg
ZXhlYy0+c2V0Q3VycmVudFZQQyhwYyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEVuY29kZWRKU1ZhbHVlIEpTX0VYUE9SVF9Q
UklWQVRFIHZtRW50cnlUb1dhc20odm9pZCogY29kZSwgVk0qIHZtLCBQcm90b0NhbGxGcmFtZSog
ZnJhbWUpCiB7CisgICAgY29kZSA9IHJldGFnQ29kZVB0cjxXYXNtRW50cnlQdHJUYWcsIEpTRW50
cnlQdHJUYWc+KGNvZGUpOwogICAgIHJldHVybiB2bUVudHJ5VG9KYXZhU2NyaXB0KGNvZGUsIHZt
LCBmcmFtZSk7CiB9CiAgICAgCkBAIC01MSw1MCArNTIsNTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNf
RVhQT1JUX1BSSVZBVEUgdm1FbnRyeQogCiBuYW1lc3BhY2UgTExJbnQgewogCi1zdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwgT3Bjb2Rl
SUQgb3Bjb2RlSUQsIGNvbnN0IGNoYXIgKnRodW5rS2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwg
T3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IGNoYXIgKnRodW5rS2luZCkKIHsKICAgICBKU0ludGVy
ZmFjZUpJVCBqaXQodm0pOwogCiAgICAgLy8gRklYTUU6IHRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0
ZXIgd2F5IHRvIGRvIGl0IG9uIFg4NiwgYnV0IEknbSBub3Qgc3VyZSBJIGNhcmUuCi0gICAgTExJ
bnRDb2RlIHRhcmdldCA9IExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIob3Bjb2RlSUQpOwotICAg
IGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4odGFyZ2V0KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwLCBDb2RlUHRyVGFnKTsKKyAgICBMTEludENvZGUgdGFyZ2V0ID0gTExJ
bnQ6OmdldENvZGVGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihvcGNvZGVJRCk7CisgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKHRhcmdldCwgSlNFbnRyeVB0clRhZyk7CisKKyAgICBqaXQubW92ZShK
U0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YXJnZXQpLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDApOworICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7
CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZVB0clRhZywgIkxMSW50ICVz
IHByb2xvZ3VlIHRodW5rIiwgdGh1bmtLaW5kKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJMTEludCAlcyBwcm9sb2d1ZSB0aHVuayIsIHRo
dW5rS2luZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRy
eVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
cmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjYWxsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNvbnN0cnVjdEVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSwgImZ1bmN0
aW9uIGZvciBjb25zdHJ1Y3QiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjYWxsIHdp
dGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9y
Q29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBU
byh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaywgImZ1bmN0aW9u
IGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9ldmFsX3Byb2xvZ3Vl
LCAiZXZhbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBw
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRl
VGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlLCAicHJvZ3JhbSIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBtb2R1bGVQ
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRl
VGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSwgIm1vZHVs
ZV9wcm9ncmFtIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTIgKzQyLDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTX0VYUE9SVF9QUklWQVRFIHZtRW50cnkKIAogbmFtZXNwYWNlIExMSW50IHsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5
VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNh
bGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
dW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1
bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvZ3JhbUVudHJ5VGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjMwNzI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTIwMTEsOCArMjAxMSw4IEBAIG1hY3JvIGRvQ2FsbChzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9m
ZnNldFt0M10KICAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQogICAg
IG1vdmUgdDMsIHNwCi0gICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVD
b2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJbnRDYWxsSUNQdHJUYWcpCi0gICAgY2FsbFRh
cmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIExM
SW50Q2FsbElDUHRyVGFnKQorICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNo
aW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCisgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIEpT
RW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93OgogICAgIHNsb3dQYXRoRm9yQ2FsbChzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwoZW50
cnksIHRlbXApCiAgICAgaWYgQ19MT09QCiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50
cnkKICAgICBlbHNlCi0gICAgICAgIGNhbGwgZW50cnksIENvZGVQdHJUYWcKKyAgICAgICAgY2Fs
bCBlbnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZAogICAgIHN1YnAgMTYsIHNwCiBlbmQKQEAg
LTI3MCwxMCArMjcwLDEwIEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1w
KQogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBXZSBuZWVkIHRvIGFsbG9jYXRlIDMy
IGJ5dGVzIG9uIHRoZSBzdGFjayBmb3IgdGhlIHNoYWRvdyBzcGFjZS4KICAgICAgICAgc3VicCAz
Miwgc3AKLSAgICAgICAgY2FsbCB0ZW1wLCBDb2RlUHRyVGFnCisgICAgICAgIGNhbGwgdGVtcCwg
SlNFbnRyeVB0clRhZwogICAgICAgICBhZGRwIDMyLCBzcAogICAgIGVsc2UKLSAgICAgICAgY2Fs
bCB0ZW1wLCBDb2RlUHRyVGFnCisgICAgICAgIGNhbGwgdGVtcCwgSlNFbnRyeVB0clRhZwogICAg
IGVuZAogZW5kCiAKQEAgLTM3MCw3ICszNzAsNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9y
TG9vcCgpCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAg
YnRweiByMCwgLnJlY292ZXIKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCi0gICAgICAgICAgICBq
bXAgcjAsIENvZGVQdHJUYWcKKyAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAg
ICAgICAucmVjb3ZlcjoKICAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZz
ZXRbY2ZyXSwgUEMKICAgICAgICAgZW5kKQpAQCAtMjA1NiwxMSArMjA1NiwxMSBAQCBtYWNybyBk
b0NhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIGlmIFBPSVNPTgogICAgICAgICBsb2Fk
cCBfZ19KSVRDb2RlUG9pc29uLCB0MgogICAgICAgICB4b3JwIExMSW50Q2FsbExpbmtJbmZvOjpt
YWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyCi0gICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MSwgdDMs
IHQ0LCBMTEludENhbGxJQ1B0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHQyLCBM
TEludENhbGxJQ1B0clRhZykKKyAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQxLCB0MywgdDQsIEpT
RW50cnlQdHJUYWcpCisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MiwgSlNFbnRyeVB0clRh
ZykKICAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNo
aW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQotICAgICAg
ICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0
W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCisgICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExp
bmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcp
CisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNv
ZGVUYXJnZXRbdDFdLCBKU0VudHJ5UHRyVGFnKQogICAgIGVuZAogCiAub3BDYWxsU2xvdzoKQEAg
LTIxOTEsMTIgKzIxOTEsMTIgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJs
ZU9mZgogICAgIGVsc2UKICAgICAgICAgaWYgWDg2XzY0X1dJTgogICAgICAgICAgICAgc3VicCAz
Miwgc3AKLSAgICAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBD
b2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3Qx
XSwgSlNFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwgc3AKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwgdDIKICAgICAgICAgICAgIHhv
cnAgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCB0MgotICAgICAgICAgICAgY2FsbCB0
MiwgQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCB0MiwgSlNFbnRyeVB0clRhZwogICAgICAg
ICBlbmQKICAgICBlbmQKIApAQCAtMjIzNCwxMiArMjIzNCwxMiBAQCBtYWNybyBpbnRlcm5hbEZ1
bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRfV0lO
CiAgICAgICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0
aW9uW3QxXSwgQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3Qx
XSwgSlNFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwgc3AKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwgdDIKICAgICAgICAgICAgIHhv
cnAgb2Zmc2V0T2ZGdW5jdGlvblt0MV0sIHQyCi0gICAgICAgICAgICBjYWxsIHQyLCBDb2RlUHRy
VGFnCisgICAgICAgICAgICBjYWxsIHQyLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGVuZAogICAg
IGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI2
Miw5ICsyNjIsOCBAQCBjb25zdCBBcml0aFByb2ZpbGVJbnROdW1iZXIgPSAweDUwMDAwMAogCiAj
IFBvaW50ZXIgVGFncwogY29uc3QgQnl0ZWNvZGVQdHJUYWcgPSBjb25zdGV4cHIgQnl0ZWNvZGVQ
dHJUYWcKLWNvbnN0IENvZGVQdHJUYWcgPSBjb25zdGV4cHIgQ29kZVB0clRhZworY29uc3QgSlNF
bnRyeVB0clRhZyA9IGNvbnN0ZXhwciBKU0VudHJ5UHRyVGFnCiBjb25zdCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnID0gY29uc3RleHByIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLWNvbnN0IExMSW50
Q2FsbElDUHRyVGFnID0gY29uc3RleHByIExMSW50Q2FsbElDUHRyVGFnCiBjb25zdCBOb1B0clRh
ZyA9IGNvbnN0ZXhwciBOb1B0clRhZwogY29uc3QgU2xvd1BhdGhQdHJUYWcgPSBjb25zdGV4cHIg
U2xvd1BhdGhQdHJUYWcKIApAQCAtMTAzNyw3ICsxMDM2LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29k
ZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3AgY2Zy
CiAgICAgICAgIGVuZAotICAgICAgICBqbXAgcjAsIENvZGVQdHJUYWcKKyAgICAgICAgam1wIHIw
LCBKU0VudHJ5UHRyVGFnCiAgICAgLnJlY292ZXI6CiAgICAgICAgIGNvZGVCbG9ja0dldHRlcih0
MSwgdDIpCiAgICAgLmNvbnRpbnVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjMwNzI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCBFeGVjdXRpb25Db3Vu
dGVyKiBDb21waWxhdGlvbjo6ZXhlY3V0aW9uCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0KCk7CiB9
CiAKLXZvaWQgQ29tcGlsYXRpb246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rvcjxjb25zdCB2
b2lkKj4mIGNvZGVBZGRyZXNzZXMpCit2b2lkIENvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZShj
b25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29k
ZUFkZHJlc3NlcykKIHsKICAgICBtX29zckV4aXRTaXRlcy5hcHBlbmQoT1NSRXhpdFNpdGUoY29k
ZUFkZHJlc3NlcykpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGREZXNj
cmlwdGlvbihjb25zdCBDb21waWxlZEJ5dGVjb2RlJik7CiAgICAgdm9pZCBhZGREZXNjcmlwdGlv
bihjb25zdCBPcmlnaW5TdGFjayYsIGNvbnN0IENTdHJpbmcmIGRlc2NyaXB0aW9uKTsKICAgICBF
eGVjdXRpb25Db3VudGVyKiBleGVjdXRpb25Db3VudGVyRm9yKGNvbnN0IE9yaWdpblN0YWNrJik7
Ci0gICAgdm9pZCBhZGRPU1JFeGl0U2l0ZShjb25zdCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBjb2Rl
QWRkcmVzc2VzKTsKKyAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsKICAgICBP
U1JFeGl0KiBhZGRPU1JFeGl0KHVuc2lnbmVkIGlkLCBjb25zdCBPcmlnaW5TdGFjayYsIEV4aXRL
aW5kLCBib29sIGlzV2F0Y2hwb2ludCk7CiAgICAgCiAgICAgdm9pZCBzZXRKZXR0aXNvblJlYXNv
bihKZXR0aXNvblJlYXNvbiwgY29uc3QgRmlyZURldGFpbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAko
cmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgSlNW
YWx1ZSBPU1JFeGl0U2l0ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIEpTQXJyYXkqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQWRkcmVz
c2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0p
KSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3RyaW5nKGV4
ZWMsIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ldLmRhdGFMb2NhdGlvbigp
KSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXRTaXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwyMyArMjYsMjQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAKIGNs
YXNzIE9TUkV4aXRTaXRlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPU1JFeGl0U2l0ZShjb25z
dCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBjb2RlQWRkcmVzc2VzKQorICAgIGV4cGxpY2l0IE9TUkV4
aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4+JiBjb2RlQWRkcmVzc2VzKQogICAgICAgICA6IG1fY29kZUFkZHJlc3Nlcyhjb2RlQWRkcmVz
c2VzKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmVjdG9yPGNvbnN0IHZvaWQqPiYg
Y29kZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KKyAgICBjb25z
dCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFk
ZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KICAgICAKICAgICBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPGNvbnN0
IHZvaWQqPiBtX2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0ludGVybmFsUHRyVGFnPj4gbV9jb2RlQWRkcmVzc2VzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OlByb2ZpbGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01NCw4ICs1NCw4IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNs
ZWFyQ29kZSgpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0
cjsKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBudWxscHRyOwotICAgIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7
CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKICNlbmRpZgog
ICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7
CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NP
TVBJTEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGlu
bGluZSBib29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW4KIAogY2xhc3MgRXhlY3V0YWJs
ZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwotICAgIGZyaWVu
ZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJh
dG9yKFZNKik7CisgICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgaW50IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QgPSAwOwpAQCAt
MTQzLDggKzE0Myw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7
CiAgICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50Rm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01vZGUgYXJpdHkpCisKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogICAgIHsKICAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBm
b3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8vIG5vLWFyaXR5IGVu
dHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZh
bHVlIGRpcmVjdGx5IGluCkBAIC0xNTIsMTcgKzE1MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7
CiAgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAgICAgIGlmIChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KQorICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sp
CisgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiByZXN1bHQgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0
ID0KLSAgICAgICAgICAgIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxs
KGFyaXR5KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJl
c3VsdCA9IGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKGFyaXR5KTsK
ICAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CiAgICAgICAgICAgICAvLyBD
YWNoZSB0aGUgcmVzdWx0OyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIEpJVCdzIHZpcnR1YWwg
Y2FsbCBvcHRpbWl6YXRpb25zLgogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0yMzIs
OCArMjMxLDggQEAgcHJvdGVjdGVkOgogICAgIEludHJpbnNpYyBtX2ludHJpbnNpYzsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ2FsbDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlRm9yQ29uc3RydWN0OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2s7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2NywxMCBAQCB2b2lkIE5hdGl2ZUV4ZWN1
dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2sgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVj
a0FyaXR5KTsKICAgICBtX25hbWUgPSBuYW1lOwogCi0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1f
aml0Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1f
aml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVk
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCksIENv
ZGVQdHJUYWcpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVj
a05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChB
cml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcp
OworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2su
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRh
YmxlKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNp
Z25hdHVyZSogc2lnbmF0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TmF0aXZlRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVGdW5jdGlvbi5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwx
MCArNzAsMTAgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKGlu
dHB0cl90IGJpdHMpIDogbV9wdHIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXRzKSkgeyB9CiAKICAg
ICBUYWdnZWROYXRpdmVGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jKQotICAgICAgICA6IG1f
cHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYy5tX3B0ciwgQ29kZVB0clRhZykpCisgICAg
ICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5UHRyVGFnPihmdW5jLm1f
cHRyKSkKICAgICB7IH0KICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbihSYXdOYXRpdmVGdW5jdGlv
biBmdW5jKQotICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQ29k
ZVB0clRhZykpCisgICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5
UHRyVGFnPihmdW5jKSkKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fcHRyOyB9CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBOYXRpdmVGdW5jdGlvbigpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9wdHIpOwotICAgICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24+
KG1fcHRyLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPE5h
dGl2ZUZ1bmN0aW9uLCBKU0VudHJ5UHRyVGFnPihtX3B0cik7CiAgICAgfQogCiAgICAgdm9pZCog
cmF3UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDUyICszMSwy
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBGT1JfRUFDSF9QVFJUQUdfRU5VTSh2KSBc
CiAgICAgdihOb1B0clRhZykgXAotICAgIHYoTmVhckNvZGVQdHJUYWcpIFwKICAgICB2KENGdW5j
dGlvblB0clRhZykgXAogICAgIFwKLSAgICB2KEFyaXR5Rml4dXBQdHJUYWcpIFwKICAgICB2KEIz
Q0NhbGxQdHJUYWcpIFwKKyAgICB2KEIzQ29tcGlsYXRpb25QdHJUYWcpIFwKICAgICB2KEJ5dGVj
b2RlUHRyVGFnKSBcCi0gICAgdihCeXRlY29kZUhlbHBlclB0clRhZykgXAotICAgIHYoQ29kZVB0
clRhZykgXAotICAgIHYoREZHT1NSRW50cnlQdHJUYWcpIFwKLSAgICB2KERGR09TUkV4aXRQdHJU
YWcpIFwKLSAgICB2KERGR09wZXJhdGlvblB0clRhZykgXAorICAgIHYoRGlzYXNzZW1ibHlQdHJU
YWcpIFwKICAgICB2KEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpIFwKLSAgICB2KEZUTENvZGVQdHJU
YWcpIFwKLSAgICB2KEZUTExhenlTbG93UGF0aFB0clRhZykgXAotICAgIHYoRlRMT1NSRXhpdFB0
clRhZykgXAotICAgIHYoRlRMT3BlcmF0aW9uUHRyVGFnKSBcCi0gICAgdihGVExTbG93UGF0aFB0
clRhZykgXAotICAgIHYoR2V0UHJvcGVydHlQdHJUYWcpIFwKLSAgICB2KEdldHRlclNldHRlclB0
clRhZykgXAotICAgIHYoSGFzUHJvcGVydHlQdHJUYWcpIFwKLSAgICB2KEpJVENvZGVQdHJUYWcp
IFwKLSAgICB2KEpJVE9wZXJhdGlvblB0clRhZykgXAogICAgIHYoSklUVGh1bmtQdHJUYWcpIFwK
LSAgICB2KEpJVFdyaXRlVGh1bmtQdHJUYWcpIFwKLSAgICB2KExMSW50Q2FsbElDUHRyVGFnKSBc
Ci0gICAgdihMaW5rQ2FsbFB0clRhZykgXAotICAgIHYoTGlua0NhbGxSZXN1bHRQdHJUYWcpIFwK
LSAgICB2KExpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcpIFwKLSAgICB2KExpbmtQb2x5bW9ycGhp
Y0NhbGxSZXN1bHRQdHJUYWcpIFwKLSAgICB2KExpbmtWaXJ0dWFsQ2FsbFB0clRhZykgXAotICAg
IHYoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnKSBcCi0gICAgdihNYXRoSUNQdHJUYWcpIFwK
LSAgICB2KE5hdGl2ZUNvZGVQdHJUYWcpIFwKLSAgICB2KFB1dFByb3BlcnR5UHRyVGFnKSBcCisg
ICAgdihKSVRTdHViUm91dGluZVB0clRhZykgXAorICAgIHYoSlNFbnRyeVB0clRhZykgXAorICAg
IHYoSlNJbnRlcm5hbFB0clRhZykgXAorICAgIHYoSlNTd2l0Y2hQdHJUYWcpIFwKKyAgICB2KExp
bmtCdWZmZXJQdHJUYWcpIFwKKyAgICB2KE9wZXJhdGlvblB0clRhZykgXAorICAgIHYoT1NSRXhp
dFB0clRhZykgXAogICAgIHYoU2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KFNwZWNpYWxpemVkVGh1
bmtQdHJUYWcpIFwKLSAgICB2KFN3aXRjaFRhYmxlUHRyVGFnKSBcCi0gICAgdihUaHJvd0V4Y2Vw
dGlvblB0clRhZykgXAorICAgIHYoV2FzbUVudHJ5UHRyVGFnKSBcCiAgICAgdihZYXJyOEJpdFB0
clRhZykgXAogICAgIHYoWWFycjE2Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5OEJp
dFB0clRhZykgXAogICAgIHYoWWFyck1hdGNoT25seTE2Qml0UHRyVGFnKSBcCiAgICAgdihZYXJy
QmFja3RyYWNrUHRyVGFnKSBcCi0gICAgdihXYXNtQ2FsbFB0clRhZykgXAotICAgIHYoV2FzbUhl
bHBlclB0clRhZykgXAotCiAKIGVudW0gUHRyVGFnIDogdWludHB0cl90IHsKICNkZWZpbmUgREVD
TEFSRV9QVFJUQUdfRU5VTSh0YWcpICB0YWcsCkBAIC04NSw4ICs2MSw3IEBAIGVudW0gUHRyVGFn
IDogdWludHB0cl90IHsKIH07CiAKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90
PihOb1B0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSwgIiIpOwotc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5lYXJDb2RlUHRyVGFnKSA9PSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oQ0Z1bmN0aW9uUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpLCAiIik7Citz
dGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0Z1bmN0aW9uUHRyVGFnKSA9PSBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpLCAiIik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCiB7CkBAIC05OCwxMCArNzMsNyBAQCBpbmxpbmUgY29uc3QgY2hh
ciogcHRyVGFnTmFtZShQdHJUYWcgdGFnCiAjdW5kZWYgUkVUVVJOX1BUUlRBR19OQU1FCiB9CiAK
LXVpbnRwdHJfdCBuZXh0UHRyVGFnSUQoKTsKLQogI2lmICFVU0UoUE9JTlRFUl9QUk9GSUxJTkcp
Ci1pbmxpbmUgdWludHB0cl90IG5leHRQdHJUYWdJRCgpIHsgcmV0dXJuIDA7IH0KIAogaW5saW5l
IGNvbnN0IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKikgeyByZXR1cm4gIjxubyB0YWc+Ijsg
fQogCkBAIC0xMTEsMjEgKzgzLDM5IEBAIGlubGluZSBjb25zdGV4cHIgUHRyVGFnIHB0clRhZyhB
cmd1bWVudHMKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFz
dGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCB0YWdD
b2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFQgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQ+KHB0cik7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNv
bnN0ZXhwciBQdHJUeXBlIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4g
cHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5l
IFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwg
UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCB1bnRhZ0NvZGVQdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1
bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpICB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsg
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFB0
clR5cGUgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQog
Cit0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBl
IHVudGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlw
ZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIs
IFB0clRhZywgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+Pgor
aW5saW5lIFQgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29u
c3RleHByIFB0clR5cGUgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcsIFB0clRhZykg
eyByZXR1cm4gcHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgUHRyVGFnLCB0eXBlbmFtZSBQdHJU
eXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+
Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0
dXJuIHB0cjsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFQg
cmVtb3ZlQ29kZVB0clRhZyhQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0
cik7IH0KIApAQCAtMTM1LDE1ICsxMjUsMjcgQEAgaW5saW5lIGNvbnN0ZXhwciBQdHJUeXBlIHJl
bW92ZUNvZGVQdHJUYQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFQgdGFnQ0Z1bmN0
aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFQgdGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxp
bmUgUHRyVHlwZSB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4g
cHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5l
IFB0clR5cGUgdGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KKwog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFQgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1
bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0
cik7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFB0clR5cGUg
dW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gcHRyOyB9CiAK
K3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFB0clR5cGUg
dW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsgfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsg
fQogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cihQdHJUeXBlKSB7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzSW5pdGlhbGl6YXRpb24oaXNJbml0
aWFsaXphdGlvbikKICAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAgICAgLCBtX2Nh
Y2hlYWJpbGl0eShDYWNoaW5nQWxsb3dlZCkKLSAgICAgICAgLCBtX3B1dEZ1bmN0aW9uKG51bGxw
dHIpCiAgICAgewogICAgIH0KIApAQCAtNjcsMTcgKzY2LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
bV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b21WYWx1ZShKU09i
amVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQorICAgIHZvaWQgc2V0Q3VzdG9tVmFs
dWUoSlNPYmplY3QqIGJhc2UsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgewotICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihmdW5jdGlvbik7CiAg
ICAgICAgIG1fdHlwZSA9IEN1c3RvbVZhbHVlOwogICAgICAgICBtX2Jhc2UgPSBiYXNlOwogICAg
ICAgICBtX3B1dEZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0
b21BY2Nlc3NvcihKU09iamVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQorICAgIHZv
aWQgc2V0Q3VzdG9tQWNjZXNzb3IoSlNPYmplY3QqIGJhc2UsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgewotICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cihmdW5jdGlvbik7CiAgICAgICAgIG1fdHlwZSA9IEN1c3RvbUFjY2Vzc29yOwogICAgICAg
ICBtX2Jhc2UgPSBiYXNlOwogICAgICAgICBtX3B1dEZ1bmN0aW9uID0gZnVuY3Rpb247CkBAIC0x
MDAsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNTdHJpY3RNb2RlID0gdmFsdWU7CiAg
ICAgfQogCi0gICAgUHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwogICAgICAgICByZXR1cm4gbV9wdXRGdW5j
dGlvbjsKQEAgLTE0MCw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luaXRpYWxp
emF0aW9uOwogICAgIHVpbnQ4X3QgbV9jb250ZXh0OwogICAgIENhY2hlYWJpbGl0eVR5cGUgbV9j
YWNoZWFiaWxpdHk7Ci0gICAgUHV0VmFsdWVGdW5jIG1fcHV0RnVuY3Rpb247CisgICAgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBtX3B1dEZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3Jp
cHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzcsMTIgKzEzNywxMiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omlu
c3RhbGxDb2RlKFZNJiB2CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2sgPyBnZW5lcmlj
Q29kZUJsb2NrLT5qaXRDb2RlKCkgOiBudWxscHRyOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbnVsbHB0cjsKICAgICAgICAgbV9udW1QYXJhbWV0
ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2sgPyBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgOiBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51bGxw
dHI7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrID0gbnVsbHB0cjsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
Z2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA6IE5V
TV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODEs
MjMgKzY4MSwyMyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hCiAg
ICAgVU5VU0VEX1BBUkFNKGludHJpbnNpYyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICBy
ZXR1cm4gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCp0aGlzLAotICAgICAgICBhZG9wdFJlZigq
bmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVS
ZWYobGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KSwgZnVuY3Rpb24sCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9uYXRpdmVfY29uc3RydWN0
X3RyYW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGNvbnN0cnVjdG9yLAorICAg
ICAgICBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTExJbnQ6OmdldENvZGVSZWY8SlNFbnRy
eVB0clRhZz4obGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxs
VGh1bmspKSwgZnVuY3Rpb24sCisgICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShM
TEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9uYXRpdmVfY29uc3RydWN0X3Ry
YW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGNvbnN0cnVjdG9yLAogICAgICAg
ICBOb0ludHJpbnNpYywgc2lnbmF0dXJlLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06
OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChjYW5Vc2VKSVQoKSkgewogICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcyk7Ci0gICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVy
biBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcykucmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKTsKKyAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0KHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgfQogI2VuZGlm
CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9j
YWxsX3RyYW1wb2xpbmUpOwotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUxMSW50Q29kZVB0cihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGlu
ZSk7CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUpOworICAgIHJldHVybiBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZSk7CiB9CiAKIFZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Miw3ICs1
NDIsNyBAQCBwdWJsaWM6CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJM
RShKSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgewogICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0
aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICB9CkBAIC01NTQsNyArNTU0LDcgQEAgcHVibGlj
OgogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMs
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNv
bnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0Q1RJSW50
ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIzMDcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM3LDcgKzQzNyw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWwKICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIGZwKSk7CiAgICAgICAgICAg
ICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywg
c2NyYXRjaDEsIHNjcmF0Y2gyKSk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtv
dmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1
ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVy
ZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRz
IHRvIGJlIGNvcnJlY3QuCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0RXhjZXB0aW9uQ2hlY2soQwogICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5q
dW1wKCk7CiAKICAgICBqaXQuYWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNl
cHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICB9KTsKIH0KIApAQCAtOTM3LDcgKzkzNyw3
IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQKICAgICAgICAgICAg
IGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwp
LCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1Rp
ZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPE5vUHRy
VGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2lu
Z2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CkBAIC0xMTEyLDcgKzExMTIsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1
bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5
UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTExMjgsNyArMTEyOCw2
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZVBvaXNvbmluZygpKQogICAgICAgICAgICAganVtcERlc3RpbmF0aW9uID0g
aXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4o
KSwganVtcERlc3RpbmF0aW9uLCBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOwogCi0gICAgICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAg
ICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigp
LnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNU
eXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CkBAIC0xMTM4LDkgKzExMzcsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlLCBjYWxsVGFnXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBjYWxsVGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5n
cHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICBVcHNpbG9uVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24gPSBy
ZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8
VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBlbWJlZGRlckNhbGxSZXN1bHQpOwpAQCAt
MTE2OCw3ICsxMTY3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bgogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CkBAIC0xMzEwLDcgKzEzMDksNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zCiAgICAgICAgIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGNhbGxlZUNvZGUsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQ
b2lzb24pKTsKIAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7
Ci0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5o
YXNoKCkpOwogICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbCht
X3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlw
ZSksCiAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMzI1LDcg
KzEzMjMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09
IFZvaWQgPyAwIDogMV0uZ3ByKCksIGNhbGxUYWcpOworICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc0LDEwICsxNzQsOCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogICAgICAgICBpZiAoaW1w
b3J0LT5raW5kICE9IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5zaXplKCk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9y
dEZ1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBkYXRhTG9n
TG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVu
Y3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIG1ha2VTdHJpbmcoaW1w
b3J0LT5tb2R1bGUpLCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+ZmllbGQpKTsKLSAgICAgICAg
YXV0byBiaW5kaW5nID0gd2FzbVRvV2FzbShzaWduYXR1cmUsIGltcG9ydEZ1bmN0aW9uSW5kZXgp
OworICAgICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KGJpbmRpbmcuZXJyb3IoKSkgewogICAgICAgICAgICAgY2FzZSBCaW5kaW5nRmFpbHVyZTo6T3V0
T2ZNZW1vcnk6CkBAIC0zMDMsNyArMzAxLDYgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvYwogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0g
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0
clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CkBAIC0zMTIsNyArMzA5LDcgQEAgdm9p
ZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRp
b24+KAotICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIGNhbGxU
YWcsICJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1
cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IGZ1
bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQogCkBAIC0zMjQsMjMgKzMyMSwyMCBA
QCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+
KAotICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIENvZGVQdHJU
YWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbklu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgICAgICAg
ICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVt
YmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAg
V1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxp
bmtlZCkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBleGVjdXRhYmxl
QWRkcmVzczsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcg
YSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxF
QVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2
MgogICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpOwotICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJU
YWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1
dGFibGVBZGRyZXNzLnJldGFnZ2VkKG9sZFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
YXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8
V2FzbUVudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRy
eVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2
aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwogICAgIH0KIAotICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKQorICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mJiB0YWtlV2FzbVRvV2FzbUV4
aXRTdHVicygpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhh
c1dvcmsoKSk7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fd2FzbVRvV2FzbUV4aXRTdHVicyk7
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBzdGF0ZVN0cmlu
ZyhTdGF0ZSk7CiAgICAgCiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwot
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsK
KyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2Fz
bVRvV2FzbUV4aXRTdHViczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBIYXNoU2V0PHVpbnQzMl90LCB0
eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzOwogICAg
IEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgdHlw
ZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25z
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2
aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKIHVzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKIAotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbShjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCitFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVuaXF1
aWZ5IHRoZSBzdHVicyBiYXNlZCBvbiBzaWduYXR1cmUgKyBpbmRleCB0byBzZWUgaWYgdGhpcyBz
YXZlcyBtZW1vcnkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NDE1NwpAQCAtODAsMTQgKzgwLDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgQmluZGluZ0YKICAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKICAgICBp
ZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCiAgICAgICAgIGppdC54b3JQdHIoSklUOjpUcnVz
dGVkSW1tUHRyKGdfSklUQ29kZVBvaXNvbiksIHNjcmF0Y2gpOwotICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgIGppdC5qdW1wKHNj
cmF0Y2gsIHRhZyk7CisgICAgaml0Lmp1bXAoc2NyYXRjaCwgV2FzbUVudHJ5UHRyVGFnKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0
YWcsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAi
V2ViQXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
ZW51bSBjbGFzcyBCaW5kaW5nRmFpbHVyZSB7CiAgICAgT3V0T2ZNZW1vcnksCiB9OwogCi1FeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKGNv
bnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2Fz
bSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJldmlzaW9uIDIz
MDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqY2FsbGVlKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpOyB9Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdh
c21FbnRyeVB0clRhZz4oKTsgfQogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhP
ck5hbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4
NSw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6
ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9Ci0gICAgdm9pZCBzZXR1cEZyYW1lSW5Q
cm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6
OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1
cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNp
emVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5v
dy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
aXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBu
b3cuIik7CkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21F
bnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBlbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qIGVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKQEAgLTEyMywxMCArMTIzLDEwIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CiAgICAgVmVjdG9yPFJlZlB0
cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVz
OwotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IG1fd2FzbUluZGlyZWN0Q2FsbEVu
dHJ5UG9pbnRzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CiAgICAgVmVjdG9yPFRpZXJVcENv
dW50PiBtX3RpZXJVcENvdW50czsKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJl
ZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlv
bkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcg
QEAgc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihTaWduYWwsIAogICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwg
ImZ1bmN0aW9uIHN0YXJ0OiAiLCBSYXdQb2ludGVyKHN0YXJ0KSwgIiBlbmQ6ICIsIFJhd1BvaW50
ZXIoZW5kKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rp
b24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IGVuZCkgewogICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZihXYXNtRmF1bHRTaWduYWxIYW5kbGVySW50ZXJuYWw6OnZlcmJvc2UsICJmb3Vu
ZCBtYXRjaCIpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhj
ZXB0aW9uU3R1YiA9IFRodW5rczo6c2luZ2xldG9uKCkuZXhpc3RpbmdTdHViKHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhjZXB0aW9uU3R1YiA9IFRodW5rczo6c2lu
Z2xldG9uKCkuZXhpc3RpbmdTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRv
cik7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGZvciB3aGF0ZXZlciByZWFzb24gd2UgZG9u
J3QgaGF2ZSBhIHN0dWIgdGhlbiB3ZSBzaG91bGQganVzdCB0cmVhdCB0aGlzIGxpa2UgYSByZWd1
bGFyIGNyYXNoLgogICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblN0dWIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1Niw3ICsyNTYsNyBAQCBp
bmxpbmUgYm9vbCBpc1ZhbGlkTmFtZVR5cGUoSW50IHZhbCkKIH0KIAogc3RydWN0IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGwgewotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbjsK
KyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsK
ICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlOwogfTsKIApAQCAtMjY2LDcgKzI2Niw3IEBA
IHN0cnVjdCBFbnRyeXBvaW50IHsKIH07CiAKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uOworICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsK
ICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCkBAIC0yNzQsNyArMjc0LDcgQEAgc3Ry
dWN0IEludGVybmFsRnVuY3Rpb24gewogLy8gd2l0aCBhbGwgaW1wb3J0cywgYW5kIHRoZW4gYWxs
IGludGVybmFsIGZ1bmN0aW9ucy4gV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBhbmQgRnVu
Y3Rpb25JbmRleFNwYWNlIGFyZSBvbmx5CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMg
Zm9yIHRoZXNlIG9wY29kZXMgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIHsKLSAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIqOworICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+KjsKICNpZiAhQ09NUElMRVJfU1VQUE9SVFMoTlNETUlfRk9S
X0FHR1JFR0FURVMpCiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpID0gZGVmYXVs
dDsKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4LCBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3Rh
bmNlIGFuZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5k
IGFyZSBvdGhlcndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3Vy
cyB0aHJvdWdoIGltcG9ydCBmdW5jdGlvbi4KICAgICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3Rh
bmNlIHsgbnVsbHB0ciB9OwogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxscHRyIH07Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3YXNtVG9FbWJlZGRlclN0dWI7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsK
ICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1i
ZWRkaW5nLCB0aGlzIGlzIGEgUG9pc29uZWRCYXJyaWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAg
IHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0
RnVuY3Rpb25zOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE0ICs5NywxMyBAQCB2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhh
c2goKSk7CiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBjYWxs
VGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1fZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVu
Y3Rpb25bJWldICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1v
dmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludDsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tG
b3IobW9kZSgpKSk7CiAgICAgICAgIFJlZjxDYWxsZWU+IGNhbGxlZSA9IENhbGxlZTo6Y3JlYXRl
KFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKQEAgLTEyMCwx
NiArMTE5LDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAg
ICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gV1RG
TW92ZShjYWxsZWUpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkQ2FsbHMp
IHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50OworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
ICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZV0uY29kZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCk7CisgICAg
ICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9p
bnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CiAKLSAgICAgICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRyVGFn
KFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKGVudHJ5cG9pbnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAg
ICB9CiAgICAgICAgIHVubGlua2VkQ2FsbHMgPSBzdGQ6OmV4Y2hhbmdlKG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21DYWxsc2l0ZXNbbV9mdW5jdGlvbkluZGV4XSwgdW5saW5rZWRDYWxscyk7CiAg
ICAgfQpAQCAtMTQ5LDEwICsxNDUsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihj
YWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwu
ZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwg
YXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRv
ICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2ln
bmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGVudHJ5cG9p
bnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExv
Y2tlciYpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIApAQCAtNTIsMTkgKzUyLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAot
ICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwog
ICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAogICAg
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24gPSBUaHVua3M6OnNpbmdsZXRv
bigpLnRocm93V2FzbUV4Y2VwdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIodGhyb3dXYXNtRXhjZXB0
aW9uLCB0YWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29k
ZVB0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKKyAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHJvd1dhc21FeGNlcHRpb24p
KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhy
b3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTc0LDExICs3MywxMSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93CiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEV4Y2VwdGlv
blR5cGU6OlN0YWNrT3ZlcmZsb3cpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBhdXRv
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuanVtcCgpOwogICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCku
c3R1Yihsb2NrZXIsIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcs
ICJUaHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsKKyAgICBsaW5rQnVmZmVyLmxpbmso
anVtcFRvRXhjZXB0aW9uSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+
KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yihsb2NrZXIsIHRocm93RXhjZXB0aW9uRnJvbVdhc21U
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cihjb25zdCBBYnN0cmFjdExvY2tlciYpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYpCiB7CiAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcHV0IHRo
ZSBmdW5jdGlvbiBpbmRleCBpbnRvIEdQUkluZm86OmFyZ3VtZW50R1BSMQogICAgIENDYWxsSGVs
cGVycyBqaXQ7CkBAIC05MywxNiArOTIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdn
ZXJPTUdUaWVyVXBUaAogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSW5zdGFuY2UqLCB1aW50MzJf
dCk7CiAgICAgUnVuIHJ1biA9IE9NR1BsYW46OnJ1bkZvckluZGV4OwotICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihydW4sIHRhZykp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5jYWxsKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgdGFnKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIsIE9wZXJhdGlvblB0clRh
Zyk7CiAKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVy
T2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRl
cyk7CiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlRyaWdnZXIgT01H
IHRpZXIgdXAiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIlRyaWdnZXIgT01HIHRpZXIgdXAiKTsKIH0KIAogc3RhdGljIFRodW5rcyogdGh1
bmtzOwpAQCAtMTMwLDI4ICsxMjgsMjggQEAgVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5rczo6dGhy
b3dXYXNtRXhjZQogICAgIHJldHVybiBtX3Rocm93V2FzbUV4Y2VwdGlvbjsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIFRodW5rczo6c3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IFRodW5rczo6c3R1YihUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgIHJldHVybiBzdHViKGxvY2tlciwgZ2VuZXJhdG9yKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIFRodW5rczo6c3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IFRodW5rczo6c3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiB7CiAgICAgQVNTRVJUKCEhZ2VuZXJhdG9yKTsKICAgICB7Ci0gICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHVicy5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHVicy5hZGQoZ2VuZXJh
dG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAgICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUg
PSBnZW5lcmF0b3IobG9ja2VyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGUgPSBnZW5lcmF0b3IobG9ja2VyKTsKICAgICAvLyBXZSBzcGVjaWZpY2FsbHkg
ZG9uJ3QgdXNlIHRoZSBpdGVyYXRvciBoZXJlIHRvIGFsbG93IGdlbmVyYXRvciB0byByZWN1cnNp
dmVseSBjaGFuZ2UgbV9zdHVicy4KICAgICBtX3N0dWJzLnNldChnZW5lcmF0b3IsIGNvZGUpOwog
ICAgIHJldHVybiBjb2RlOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpleGlz
dGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBUaHVua3M6OmV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3IpCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogCkBAIC0xNTks
NyArMTU3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFRodW5rczo6ZXhpc3RpbmdTdAogICAg
IGlmIChpdGVyICE9IG1fc3R1YnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
IAotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAko
cmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9t
V2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBB
YnN0cmFjdExvY2tlciYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRyaWdnZXJPTUdUaWVyVXBU
aHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3Io
Y29uc3QgQWJzdHJhY3RMb2NrZXImKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0
cmFjdExvY2tlciYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cmln
Z2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKIAotdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKTsKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiAoKlRodW5rR2VuZXJhdG9yKShjb25zdCBBYnN0cmFjdExvY2tlciYpOwogCiBjbGFzcyBUaHVu
a3MgewogcHVibGljOgpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRo
cm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViKFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25z
dCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYs
IFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvcik7CiAKIHByaXZhdGU6CiAgICAgVGh1bmtz
KCkgPSBkZWZhdWx0OwogCi0gICAgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPiBtX3N0dWJzOworICAgIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IG1fc3R1YnM7CiAgICAgVGhyb3dXYXNtRXhj
ZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2Nr
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlCiAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVl
TW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92
ZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+
KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgKmxp
bmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9u
KTsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2Fz
bUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOwogICAgIH0pOwogCiAgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCAr
IGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+
YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSB9KTsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSB9KTsKICAgICB9KTsKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lv
biAyMzA3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAg
ICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQo
KTsgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3YXNtVG9FbWJlZGRlclN0dWIo
c2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2lt
cG9ydEZ1bmN0aW9uTnVtXS5jb2RlKCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVt
KSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEZ1bmN0aW9uTnVtXS5jb2RlKCk7
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtOTgsNyArOTgsNyBAQCBw
cml2YXRlOgogICAgIH07CiAKICAgICBQb2lzb25lZFJlZjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
UG9pc29uLCBXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwotICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CisgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub0pTRXhpdFN0dWJzOwogICAg
IFBvaXNvbmVkVW5pcXVlUHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXI+IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24g
MjMwNzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1w
b3J0SlNDZWxsKEpJVCYKICAgICBqaXQueG9yNjQocG9pc29uLCByZXN1bHQpOwogfQogCi1zdGF0
aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gaGFuZGxl
QmFkSTY0VXNlKFZNKiB2bSwgSklUJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1
bnNpZ25lZCBpbXBvcnRJbmRleCkKK3N0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IGhhbmRsZUJhZEk2NFVzZShWTSog
dm0sIEpJVCYgaml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQgaW1wb3J0
SW5kZXgpCiB7CiAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOwogCkBAIC05Myw4ICs5Myw3IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYsIEIKICAgICAgICAgLy8gTGV0J3MgYmUgcGFyYW5vaWQgb24gdGhlIGV4Y2VwdGlvbiBw
YXRoIGFuZCB6ZXJvIG91dCB0aGUgcG9pc29uIGluc3RlYWQgb2YgbGVhdmluZyBpdCBpbiBhbiBh
cmd1bWVudCBHUFIuCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogCi0gICAgICAgIFB0clRhZyBjYWxsVGFnID0g
cHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgYXV0byBj
YWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7
CiAKICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UpIC0+IHZvaWQgewpAQCAtMTE2LDE1ICsxMTUsMTQgQEAgc3RhdGljIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQgogICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd0JhZEk2NCwgY2FsbFRhZykpOwotICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkph
dmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHRocm93QmFkSTY0KSk7CisgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IFdhc21FbnRyeVB0clRhZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVz
ZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnlQdHJUYWc+KCk7CiB9CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNh
bGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCkKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+
LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2Fs
bExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9y
dEluZGV4KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVybHkg
YWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIEl0J2QgYmUgc3Vw
ZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTQwMQpAQCAtMzAyLDEyICszMDAsOSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYsIEJpbmRpbmdGCiAgICAgICAgIC8vIExldCdzIGJlIHBhcmFub2lkIGJlZm9yZSB0aGUgY2Fs
bCBhbmQgemVybyBvdXQgdGhlIHBvaXNvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgaW4gYW4gYXJn
dW1lbnQgR1BSLgogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigw
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKIAotICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0
clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIFB0clRhZyBk
b1Vud2luZGluZ1RhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
Ci0KICAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGNhbGxGdW5jKT4oR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoY2FsbFRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKIAogICAgICAg
ICAvLyBFeGNlcHRpb24gaGVyZS4KQEAgLTMxOSw3ICszMTQsNyBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBl
eGVjKTsKICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAg
ICAgIH07Ci0gICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKGRvVW53aW5kaW5n
VGFnKTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAg
ICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwpAQCAtMzQ0LDExICszMzksMTAgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICBpZiAoVU5MSUtFTFkobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjYWxsRnVuYywgY2FsbFRhZykpOwotICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZG9VbndpbmRpbmcsIGRv
VW53aW5kaW5nVGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGNhbGxGdW5jKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhl
eGNlcHRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGRvVW53aW5kaW5nKSk7
CiAKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJl
Lmhhc2goKSk7Ci0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHRhZywg
IldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKICAgICB9CiAKICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIHBl
cmZvcm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCkBAIC01NTAs
MTQgKzU0NCwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAg
ICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKGNvbnZlcnRUb0kzMik+KEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29udmVydFRvSTMyLCB0YWcpKTsKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNv
bnZlcnRUb0kzMikpOwogICAgICAgICB9KTsKIAogICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBA
IC01ODYsMTQgKzU3OSwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRp
bmdGCiAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAgICAgICBkb25lLmFwcGVuZChqaXQu
anVtcCgpKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvRjMyKT4oR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBleGNlcHRp
b25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0VG9GMzIsIHRhZykp
OworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4oY29udmVydFRvRjMyKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKQEAgLTYyMSwxNCArNjEzLDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgQmluZGluZ0YKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9GNjQpPihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKHRhZyk7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvbnZlcnRUb0Y2NCwg
dGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihjb252ZXJ0VG9GNjQpKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwpAQCAtNjQwLDExICs2MzEsMTAgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgIGppdC5yZXQoKTsKIAogICAgIGlmICghZXhjZXB0aW9u
Q2hlY2tzLmVtcHR5KCkpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVy
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZq
aXQpOwogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAg
ICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhl
YykgLT4gdm9pZCB7CkBAIC02NTUsNyArNjQ1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLCBCaW5kaW5nRgogICAgICAgICB9OwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihkb1Vud2luZGluZywgdGFnKSk7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihkb1Vud2luZGlu
ZykpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTY2MywxNSArNjUzLDEzIEBAIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBw
dHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxs
LCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpOworICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCk7CiAgICAgY2FsbExpbmtJbmZv
LT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQ
YXRoT3RoZXIpOwogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2ln
bmF0dXJlLmhhc2goKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRh
ZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKIH0KIAogdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgJKHJldmlzaW9uIDIz
MDcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgSW5z
dGFuY2U7CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub0pTKFZNKiwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVy
ZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwgQmFn
PENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBp
bXBvcnRJbmRleCk7CiAKIHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdhc206
OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDcy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0
aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBhcml0eSkKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlD
aGVja01vZGUgYXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkgPT0gQXJpdHlDaGVja05v
dFJlcXVpcmVkKQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBvaW50OwpAQCAtODAsNyAr
ODAsNyBAQCBwcml2YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUg
YSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUg
TW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBh
Y3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fanNFbnRyeXBvaW50OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OwogICAgIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gbV9pbXBvcnRhYmxlRnVuY3Rpb247CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCw3ICs2
MDQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICB2
b2lkIGxvYWRGcm9tRnJhbWVBbmRKdW1wKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewot
ICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24g
KiBzaXplb2Yodm9pZCopKSwgcHRyVGFnKFlhcnJCYWNrdHJhY2tQdHJUYWcsICZtX2NvZGVCbG9j
aykpOworICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9j
YXRpb24gKiBzaXplb2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRhZyk7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyh1bnNpZ25lZCBjYWxsRnJhbWVT
aXplKQpAQCAtOTI3LDExICs5MjcsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2Yg
Y29kZSBnZW5lcmF0aW9uIHRvIGxpbmsgYWxsIHJldHVybiBhZGRyZXNzZXMuCi0gICAgICAgIHZv
aWQgbGlua0RhdGFMYWJlbHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgWWFyckNvZGVCbG9jayYg
Y29kZUJsb2NrKQorICAgICAgICB2b2lkIGxpbmtEYXRhTGFiZWxzKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKG1fYmFja3RyYWNrUmVjb3Jk
c1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmFja3RyYWNrUmVjb3Jk
c1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uLCBwdHJUYWcoWWFyckJhY2t0cmFja1B0clRhZywgJmNv
ZGVCbG9jaykpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKG1fYmFja3RyYWNr
UmVjb3Jkc1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPFlhcnJCYWNrdHJh
Y2tQdHJUYWc+KG1fYmFja3RyYWNrUmVjb3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CiAg
ICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0zNTA4LDI0ICszNTA4LDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxz
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90cnlSZWFkVW5pY29k
ZUNoYXJhY3RlckVudHJ5LCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7
CiAKICAgICAgICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckNhbGxzKQogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckhlbHBlcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmtEYXRhTGFiZWxzKGxpbmtCdWZmZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CiAKICAgICAgICAg
aWYgKGNvbXBpbGVNb2RlID09IE1hdGNoT25seSkgewogICAgICAgICAgICAgaWYgKG1fY2hhclNp
emUgPT0gQ2hhcjgpCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlTWF0Y2hP
bmx5KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRy
VGFnLCAmY29kZUJsb2NrKSwgIk1hdGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIikp
OworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCAiTWF0Y2gtb25seSA4
LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1hdGNoT25seShGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIHB0clRhZyhZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiTWF0
Y2gtb25seSAxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikpOworICAgICAgICAgICAgICAgIGNv
ZGVCbG9jay5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBZ
YXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsICJNYXRjaC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJl
c3Npb24iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9
PSBDaGFyOCkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBwdHJUYWcoWWFycjhCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiOC1i
aXQgcmVndWxhciBleHByZXNzaW9uIikpOworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4
Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFlhcnI4Qml0UHRyVGFnLCAiOC1iaXQg
cmVndWxhciBleHByZXNzaW9uIikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGNvZGVCbG9jay5zZXQxNkJpdENvZGUoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBwdHJUYWco
WWFycjE2Qml0UHRyVGFnLCAmY29kZUJsb2NrKSwgIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZShGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIFlhcnIxNkJpdFB0clRhZywgIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZmFpbHVyZVJlYXNvbikKICAgICAgICAgICAg
IGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKCptX2ZhaWx1cmVSZWFzb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gMjMwNzI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NiwxMyArODYsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXM4Qml0Q29kZSgpIHsg
cmV0dXJuIG1fcmVmOC5zaXplKCk7IH0KICAgICBib29sIGhhczE2Qml0Q29kZSgpIHsgcmV0dXJu
IG1fcmVmMTYuc2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXQ4Qml0Q29kZShNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcmVmKSB7IG1fcmVmOCA9IHJlZjsgfQotICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiByZWYpIHsgbV9yZWYxNiA9IHJlZjsgfQorICAgIHZvaWQgc2V0OEJp
dENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0UHRyVGFnPiByZWYpIHsgbV9yZWY4
ID0gcmVmOyB9CisgICAgdm9pZCBzZXQxNkJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnIxNkJpdFB0clRhZz4gcmVmKSB7IG1fcmVmMTYgPSByZWY7IH0KIAogICAgIGJvb2wgaGFzOEJp
dENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25seTguc2l6ZSgpOyB9CiAgICAgYm9v
bCBoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25seTE2LnNpemUoKTsg
fQotICAgIHZvaWQgc2V0OEJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1h
dGNoT25seSkgeyBtX21hdGNoT25seTggPSBtYXRjaE9ubHk7IH0KLSAgICB2b2lkIHNldDE2Qml0
Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbWF0Y2hPbmx5KSB7IG1fbWF0Y2hP
bmx5MTYgPSBtYXRjaE9ubHk7IH0KKyAgICB2b2lkIHNldDhCaXRDb2RlTWF0Y2hPbmx5KE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4gbWF0Y2hPbmx5KSB7IG1f
bWF0Y2hPbmx5OCA9IG1hdGNoT25seTsgfQorICAgIHZvaWQgc2V0MTZCaXRDb2RlTWF0Y2hPbmx5
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+IG1hdGNoT25s
eSkgeyBtX21hdGNoT25seTE2ID0gbWF0Y2hPbmx5OyB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRf
QUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICBib29sIHVzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZl
cigpIHsgcmV0dXJuIG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyOyB9CkBAIC0xMDEsMjUgKzEw
MSwyNSBAQCBwdWJsaWM6CiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBm
cmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhczhCaXRDb2RlKCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50
YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4PihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIHB0clRhZyhZYXJyOEJpdFB0clRhZywgdGhpcykpKGlucHV0LCBzdGFydCwgbGVuZ3Ro
LCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhC
aXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0
LCBsZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVu
Q29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXMxNkJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZTE2PihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBwdHJUYWcoWWFycjE2Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91
dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2Qml0
UHRyVGFnPihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CiAg
ICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2ln
bmVkIHBhcmVuQ29udGV4dFNpemUpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGVN
YXRjaE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0
cjxZYXJySklUQ29kZU1hdGNoT25seTg+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0
YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0
Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRl
eHQsIHBhcmVuQ29udGV4dFNpemUpKTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRl
KGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9p
ZCogZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2PihtX21h
dGNoT25seTE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBwdHJUYWcoWWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNv
bnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJp
dFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQs
IHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsK
ICAgICB9CiAjZWxzZQogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKQEAgLTE4OCwx
OCArMTg4LDE4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAg
bV9yZWY4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Ci0gICAgICAgIG1fcmVmMTYgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKLSAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCk7Ci0gICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoKTsKKyAgICAgICAgbV9yZWY4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0UHRy
VGFnPigpOworICAgICAgICBtX3JlZjE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJp
dFB0clRhZz4oKTsKKyAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPigpOworICAgICAgICBtX21hdGNoT25seTE2ID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4oKTsKICAgICAgICAg
bV9mYWlsdXJlUmVhc29uID0gc3RkOjpudWxsb3B0OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9yZWY4OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBt
X3JlZjE2OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX21hdGNoT25seTg7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fbWF0Y2hPbmx5MTY7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFlhcnI4Qml0UHRyVGFnPiBtX3JlZjg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnIxNkJpdFB0clRhZz4gbV9yZWYxNjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1h
dGNoT25seThCaXRQdHJUYWc+IG1fbWF0Y2hPbmx5ODsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPiBtX21hdGNoT25seTE2OwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgIGJvb2wgbV91c2VzUGF0dGVybkNv
bnRleHRCdWZmZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDcyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE4LTA0LTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
ZW1wbGF0aXplIENvZGVQdHIvUmVmcy9GdW5jdGlvblB0cnMgd2l0aCBQdHJUYWdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzAyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zNTM5MTY4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgKiBjc3Nq
aXQvQ1NTUHRyVGFnLmg6IEFkZGVkLgorICAgICAgICAqIGNzc2ppdC9Db21waWxlZFNlbGVjdG9y
Lmg6CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6
RnVuY3Rpb25DYWxsOjpGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3Rpb25D
YWxsOjpzZXRGdW5jdGlvbkFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3Rpb25DYWxs
OjpwcmVwYXJlQW5kQ2FsbCk6CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yRnJhZ21lbnQ6OmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUNvbnRleHRGdW5jdGlv
bkNhbGxUZXN0KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9y
Q2hlY2tlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnF1
ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rp
b25XaXRoQ2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRl
eHQpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisKIDIwMTgtMDQtMTcgIEJhc3Vr
ZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBFeHBv
cnQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gdG8gYmUgdXNlZCBieSB0aGUgY2xpZW50LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjMwNzI4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTQ5LDYgKzQ5NDksNyBAQAog
CQlGREY2QkFGOTEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjZC
QUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICov
OyB9OwogCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlD
MjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi87IH07CiAJCUZF
MEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdl
YkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkUyNzFGNjcyMDgyREJFNTAwQTk1MkQ0IC8qIENTU1B0clRhZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyNzFGNjQyMDgyREJCRTAwQTk1MkQ0
IC8qIENTU1B0clRhZy5oICovOyB9OwogCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hh
bmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oICov
OyB9OwogCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1h
Y2hpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MzZGRDEzMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oICov
OyB9OwogCQlGRTM2RkQxODE2Qzc4MjY1MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTQx
NkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCAqLzsgfTsKQEAgLTE0Nzk2
LDYgKzE0Nzk3LDcgQEAKIAkJRkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZm
ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVm
ZmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDg0RTgxMDQ4
NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ4NEVBMTA0
ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RTI3MUY2NDIwODJEQkJFMDBBOTUyRDQgLyogQ1NTUHRyVGFnLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU1B0clRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNkZEMTIxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVN
YWNoaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9u
U3RhdGVNYWNoaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjE3Nyw2ICsx
NjE3OSw3IEBACiAJCTI2Qjk5OThEMTgwM0FERkEwMEQwMTEyMSAvKiBjc3NqaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMjcxRjY0MjA4MkRCQkUw
MEE5NTJENCAvKiBDU1NQdHJUYWcuaCAqLywKIAkJCQlFNDQ1MTA3NzIwMkM3RTAxMDA2NTdEMzMg
LyogQ29tcGlsZWRTZWxlY3Rvci5oICovLAogCQkJCTI2Qjk5OTkyMTgwM0I5RDkwMEQwMTEyMSAv
KiBGdW5jdGlvbkNhbGwuaCAqLywKIAkJCQkyNkI5OTk4RTE4MDNBRTcyMDBEMDExMjEgLyogUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLywKQEAgLTI3NjQ0LDYgKzI3NjQ3LDcgQEAKIAkJCQk2RTBFNTY5
QzE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3VuZGVkUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNThDRDM1Q0IxOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMjcxRjY3MjA4MkRCRTUwMEE5NTJENCAvKiBDU1NQdHJUYWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0OTkzQkU2MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1
c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVF
IC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTIsNyArMzkyLDcgQEAgaW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQog
ICAgIH0KIAogICAgIGlmIChjb21waWxlZFNlbGVjdG9yQ2hlY2tlciAmJiBjb21waWxlZFNlbGVj
dG9yLnN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXIpIHsKLSAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVy
OjpydWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxl
Y3Rvci5jb2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgY29tcGlsZWRTZWxlY3Rvci5z
dGF0dXMpOworICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6
OnJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVj
dG9yQ2hlY2tlciwgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMpOwogI2lmICFBU1NFUlRfTVNHX0RJ
U0FCTEVECiAgICAgICAgIHVuc2lnbmVkIGlnbm9yZVNwZWNpZmljaXR5OwogICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJmlnbm9yZVNwZWNp
ZmljaXR5KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9PSBOT1BTRVVETywgIldo
ZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3ZSBzaG91bGQgbmV2ZXIgY29tcGlsZSBhIHNl
bGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0IHVubGVzcyBpdCBjYW5ub3QgbWF0Y2ggYW55
dGhpbmcuIik7CkBAIC00MjAsNyArNDIwLDcgQEAgaW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xs
ZWN0b3I6OnJ1bGVNYQogICAgIGlmIChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAg
ICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CiAKLSAgICAgICAgYXV0
byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2VsZWN0
b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3IuY29k
ZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsK
KyAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29s
bGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVk
U2VsZWN0b3JDaGVja2VyLCBjb21waWxlZFNlbGVjdG9yLnN0YXR1cyk7CiAKICNpZiBDU1NfU0VM
RUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBjb21waWxlZFNlbGVjdG9yLnVzZUNvdW50Kys7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ1NTUHRyVGFnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3Nzaml0L0NTU1B0clRhZy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9DU1NQdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1B0clRhZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25z
dGV4cHIgSlNDOjpQdHJUYWcgQ1NTU2VsZWN0b3JQdHJUYWcgPSBzdGF0aWNfY2FzdDxKU0M6OlB0
clRhZz4oMHhjNTUxKTsKK3N0YXRpYyBjb25zdGV4cHIgSlNDOjpQdHJUYWcgQ1NTT3BlcmF0aW9u
UHRyVGFnID0gc3RhdGljX2Nhc3Q8SlNDOjpQdHJUYWc+KDB4YzU1Mik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRTZWxlY3Rvci5oCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRTZWxlY3Rvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQog
CisjaW5jbHVkZSAiQ1NTUHRyVGFnLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU4LDcg
QEAgcHJpdmF0ZToKIHN0cnVjdCBDb21waWxlZFNlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7CiAgICAgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBzdGF0dXM7
Ci0gICAgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZjsKKyAgICBKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0clRhZz4gY29kZVJlZjsKICNpZiBkZWZpbmVk
KENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HKSAmJiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElO
RwogICAgIHVuc2lnbmVkIHVzZUNvdW50IHsgMCB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAyMzA3MjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAKKyNpbmNsdWRlICJDU1NQdHJUYWcu
aCIKICNpbmNsdWRlICJSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0YWNrQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR1BSSW5mby5oPgpAQCAtMzYsNyArMzcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZ1bmN0aW9uQ2FsbCB7CiBwdWJsaWM6
Ci0gICAgRnVuY3Rpb25DYWxsKEpTQzo6TWFjcm9Bc3NlbWJsZXImIGFzc2VtYmxlciwgUmVnaXN0
ZXJBbGxvY2F0b3ImIHJlZ2lzdGVyQWxsb2NhdG9yLCBTdGFja0FsbG9jYXRvciYgc3RhY2tBbGxv
Y2F0b3IsIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpG
dW5jdGlvblB0cj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1h
Y3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9j
YXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRy
VGFnPj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQogICAgICAgICA6IG1fYXNzZW1ibGVyKGFzc2VtYmxl
cikKICAgICAgICAgLCBtX3JlZ2lzdGVyQWxsb2NhdG9yKHJlZ2lzdGVyQWxsb2NhdG9yKQogICAg
ICAgICAsIG1fc3RhY2tBbGxvY2F0b3Ioc3RhY2tBbGxvY2F0b3IpCkBAIC00Nyw3ICs0OCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXRGdW5jdGlvbkFkZHJlc3MoSlND
OjpGdW5jdGlvblB0ciBmdW5jdGlvbkFkZHJlc3MpCisgICAgdm9pZCBzZXRGdW5jdGlvbkFkZHJl
c3MoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9uQWRkcmVzcykK
ICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25BZGRyZXNzID0gZnVuY3Rpb25BZGRyZXNzOwogICAg
IH0KQEAgLTE0Nyw3ICsxNDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmUobV9maXJzdEFyZ3VtZW50LCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBtX2Fz
c2VtYmxlci5jYWxsKEpTQzo6Q0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gbV9hc3NlbWJsZXIuY2FsbChDU1NPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICBtX2NhbGxSZWdpc3RyeS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbCwgbV9m
dW5jdGlvbkFkZHJlc3MpKTsKICAgICB9CiAKQEAgLTE3OCwxMiArMTc5LDEyIEBAIHByaXZhdGU6
CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxv
Y2F0b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tB
bGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxs
LCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+JiBtX2NhbGxSZWdpc3RyeTsKKyAgICBWZWN0b3I8c3Rk
OjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3Bl
cmF0aW9uUHRyVGFnPj4sIDMyPiYgbV9jYWxsUmVnaXN0cnk7CiAKICAgICBSZWdpc3RlclZlY3Rv
ciBtX3NhdmVkUmVnaXN0ZXJzOwogICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZl
Y3RvciBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CiAgICAgCi0gICAgSlNDOjpGdW5j
dGlvblB0ciBtX2Z1bmN0aW9uQWRkcmVzczsKKyAgICBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4gbV9mdW5jdGlvbkFkZHJlc3M7CiAgICAgdW5zaWduZWQgbV9hcmd1bWVudENv
dW50OwogICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9maXJzdEFyZ3VtZW50
OwogICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9zZWNvbmRBcmd1bWVudDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlz
aW9uIDIzMDcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDggKzIwMSw4IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdt
ZW50IHsKICAgICBWZWN0b3I8Y29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4qPiBsYW5ndWFnZUFy
Z3VtZW50c0xpc3Q7CiAgICAgVmVjdG9yPGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCA4PiBjbGFz
c05hbWVzOwogICAgIEhhc2hTZXQ8dW5zaWduZWQ+IHBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9y
PEpTQzo6RnVuY3Rpb25QdHIsIDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3NlczsKLSAgICBWZWN0
b3I8SlNDOjpGdW5jdGlvblB0ciwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRl
eHQ7CisgICAgVmVjdG9yPEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiwgND4g
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzOworICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyPENT
U09wZXJhdGlvblB0clRhZz4sIDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhDb250ZXh0
OwogICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDQ+IGF0dHJpYnV0ZXM7CiAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDI+IG50aENoaWxkRmlsdGVyczsKICAgICBWZWN0
b3I8TnRoQ2hpbGRPZlNlbGVjdG9ySW5mbz4gbnRoQ2hpbGRPZkZpbHRlcnM7CkBAIC0yNTgsNyAr
MjU4LDcgQEAgc3RydWN0IEJhY2t0cmFja2luZ0xldmVsIHsKIGNsYXNzIFNlbGVjdG9yQ29kZUdl
bmVyYXRvciB7CiBwdWJsaWM6CiAgICAgU2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1Nl
bGVjdG9yKiwgU2VsZWN0b3JDb250ZXh0KTsKLSAgICBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
IGNvbXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmKTsKKyAgICBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzIGNvbXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0
b3JQdHJUYWc+Jik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCByZXR1cm5SZWdpc3RlcjsKQEAgLTI5Miw4ICsyOTIsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hp
bmdUYWdOYW1lRmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Bvc3RU
YWdOYW1lRmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBn
ZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRM
aW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50Jik7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7Ci0g
ICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CisgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KTsKKyAgICB2b2lkIGdlbmVyYXRl
Q29udGV4dEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4pOwogICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SXNBY3RpdmUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25z
dCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFz
c2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1l
bnRJc0ZpcnN0Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKQEAgLTMw
OSw3ICszMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRl
TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBk
ZWNJbmRleFJlZ2lzdGVyLCBjb25zdCBBdHRyaWJ1dGVNYXRjaGluZ0luZm8mIGF0dHJpYnV0ZUlu
Zm8pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVNYXRjaGluZyhBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJy
ZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXR0cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1
dGVJbmZvKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZVZhbHVlRXhhY3RNYXRj
aGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3Rl
ZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHkpOwot
ICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGlu
ZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZh
bHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIEpTQzo6
RnVuY3Rpb25QdHIgY2FzZVNlbnNpdGl2ZVRlc3QsIEpTQzo6RnVuY3Rpb25QdHIgY2FzZUluc2Vu
c2l0aXZlVGVzdCk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNh
bGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5z
aXRpdml0eSwgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRp
dmVUZXN0LCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0
aXZlVGVzdCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNUYWdOYW1lKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgQ1NTU2VsZWN0b3ImIHRhZ01hdGNoaW5nU2Vs
ZWN0b3IpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzSWQoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBMb2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3Ms
IGNvbnN0IEF0b21pY1N0cmluZyYgaWRUb01hdGNoKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVu
dEhhc0NsYXNzZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBMb2Nh
bFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IFZlY3Rvcjxjb25zdCBBdG9taWNT
dHJpbmdJbXBsKiwgOD4mIGNsYXNzTmFtZXMpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHByaXZhdGU6
CiAgICAgQXNzZW1ibGVyIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9yIG1fcmVn
aXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3IgbV9zdGFja0FsbG9jYXRvcjsKLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPEFzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMy
PiBtX2Z1bmN0aW9uQ2FsbHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGws
IEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2Fs
bHM7CiAKICAgICBTZWxlY3RvckNvbnRleHQgbV9zZWxlY3RvckNvbnRleHQ7CiAgICAgRnVuY3Rp
b25UeXBlIG1fZnVuY3Rpb25UeXBlOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBGdW5jdGlv
blR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGMKIAogc3RhdGljIHZvaWQgY29tcHV0ZUJhY2t0cmFj
a2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywg
dW5zaWduZWQgbGV2ZWwgPSAwKTsKIAotU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxl
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIGxhc3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0
IHNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCitT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rv
ciogbGFzdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0clRhZz4mIGNvZGVSZWYpCiB7CiAgICAg
aWYgKCFKU0M6OlZNOjpjYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CkBAIC00MzYsNyArNDM2LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGZyYWdtZW50TWF0Y2hlc1JpZ2h0bQogCiBGdW5jdGlvblR5cGUgU2VsZWN0b3JG
cmFnbWVudDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KGJvb2wgKCpt
YXRjaGVyKShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYpKQogewotICAg
IHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhDb250ZXh0LmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyKG1hdGNoZXIpKTsKKyAgICB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5h
cHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXIpKTsKICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
OwogfQogCkBAIC01MzQsODMgKzUzNCw4MyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBh
ZGRQc2V1ZG9DbGFzCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgLy8gVW5vcHRpbWl6ZWQgcHNl
dWRvIHNlbGVjdG9yLiBUaGV5IGFyZSBqdXN0IGZ1bmN0aW9uIGNhbGwgdG8gYSBzaW1wbGUgdGVz
dGluZyBmdW5jdGlvbi4KICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0F1dG9maWxs
OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHIoaXNBdXRvZmlsbGVkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+
KGlzQXV0b2ZpbGxlZCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxl
Y3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0
cm9uZ1Bhc3N3b3JkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNBdXRvZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsKKyAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNBdXRvZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQ2hlY2tlZDoKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzQ2hlY2tl
ZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpT
Qzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0NoZWNrZWQpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRGVmYXVsdDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNEZWZhdWx0UHNl
dWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFw
cGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0RlZmF1bHRQ
c2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEaXNhYmxlZDoKLSAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyKG1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVu
b3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRp
b25QdHJUYWc+KG1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNz
KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNFbmFibGVkUHNldWRvQ2xh
c3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGVmaW5lZDoKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlz
RGVmaW5lZEVsZW1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNEZWZpbmVk
RWxlbWVudCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1czoKLSAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRy
KFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENT
U09wZXJhdGlvblB0clRhZz4oU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsUGFnZU1lZGlhOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25Q
dHIoaXNNZWRpYURvY3VtZW50KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzTWVk
aWFEb2N1bWVudCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJblJhbmdlOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rp
b25QdHIoaXNJblJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzSW5SYW5n
ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJbmRldGVybWluYXRlOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25Q
dHIobWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0
aW9uUHRyVGFnPihtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJl
dHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0ludmFsaWQpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNJbnZhbGlkKSk7CiAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc09wdGlvbmFsOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0Ns
YXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNPcHRpb25hbEZvcm1Db250cm9sKSk7Cisg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzT3B0aW9uYWxGb3JtQ29udHJvbCkpOwogICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPdXRPZlJhbmdlOgotICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNPdXRPZlJh
bmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzT3V0T2ZSYW5nZSkpOwogICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFkT25seToKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNSZWFk
T25seVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNS
ZWFkT25seVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRX
cml0ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChK
U0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8
Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUmVxdWlyZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc1JlcXVpcmVkRm9y
bUNvbnRyb2wpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFw
cGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNSZXF1aXJlZEZvcm1D
b250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1ZhbGlkOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIo
aXNWYWxpZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc1ZhbGlkKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgotICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNXaW5k
b3dJbmFjdGl2ZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc1dpbmRvd0luYWN0
aXZlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0Z1bGxTY3JlZW46Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0Ns
YXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuUHNl
dWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JD
aGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkRvY3Vt
ZW50OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpT
Qzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3JlZW5Eb2N1bWVudFBzZXVkb0NsYXNzKSk7Cisg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1
ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsU2NyZWVuQW5jZXN0
b3I6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlbkFuY2VzdG9yUHNldWRvQ2xhc3MpKTsKKyAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0Z1bGxTY3JlZW5BbmNlc3RvclBzZXVk
b0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FuaW1hdGluZ0Z1bGxTY3Jl
ZW5UcmFuc2l0aW9uOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3JlZW5BbmltYXRpbmdGdWxsU2Ny
ZWVuVHJhbnNpdGlvblBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+
KG1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRpb25Qc2V1ZG9DbGFz
cykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7
CiAjZW5kaWYKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NGdXR1cmU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3Mp
KTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6
OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0Ns
YXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Bhc3Q6Ci0gICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRj
aGVzUGFzdEN1ZVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1h
dGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6
U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKQEAgLTEyMTYsNyArMTIxNiw3IEBAIHZv
aWQgY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW4KICAgICB9CiB9CiAKLWlubGlu
ZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGls
ZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZikKK2lubGluZSBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGlsZShKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0clRhZz4mIGNvZGVSZWYpCiB7CiAgICAgc3dp
dGNoIChtX2Z1bmN0aW9uVHlwZSkgewogICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxl
Y3RvckNoZWNrZXI6CkBAIC0xMjQ0LDExICsxMjQ0LDEwIEBAIGlubGluZSBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mdW5j
dGlvbkNhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9mdW5jdGlv
bkNhbGxzW2ldLmZpcnN0LCBtX2Z1bmN0aW9uQ2FsbHNbaV0uc2Vjb25kKTsKIAotICAgIEpTQzo6
UHRyVGFnIHRhZyA9IHB0clRhZygmY29kZVJlZiwgbV9zZWxlY3RvckNvbnRleHQpOwogI2lmIENT
U19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCi0gICAgY29kZVJlZiA9IGxpbmtCdWZmZXIuZmluYWxp
emVDb2RlV2l0aERpc2Fzc2VtYmx5KHRhZywgIkNTUyBTZWxlY3RvciBKSVQgZm9yIFwiJXNcIiIs
IG1fb3JpZ2luYWxTZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCkudXRmOCgpLmRhdGEoKSk7CisgICAg
Y29kZVJlZiA9IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KENTU1NlbGVj
dG9yUHRyVGFnLCAiQ1NTIFNlbGVjdG9yIEpJVCBmb3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVj
dG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCi0gICAgY29kZVJlZiA9
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFnLCAiQ1NTIFNlbGVjdG9yIEpJVCIpOworICAg
IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIENTU1NlbGVjdG9yUHRyVGFnLCAi
Q1NTIFNlbGVjdG9yIEpJVCIpOwogI2VuZGlmCiAKICAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgfHwgbV9mdW5jdGlvblR5cGUgPT0g
RnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtMzAxOSw3ICszMDE4LDcgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIH0KIH0KIAotdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9u
Q2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0
cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNl
bnNpdGl2aXR5LCBKU0M6OkZ1bmN0aW9uUHRyIGNhc2VTZW5zaXRpdmVUZXN0LCBKU0M6OkZ1bmN0
aW9uUHRyIGNhc2VJbnNlbnNpdGl2ZVRlc3QpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50
QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRy
aWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIEpTQzo6RnVuY3Rpb25Q
dHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNpdGl2ZVRlc3QpCiB7CiAgICAgTG9jYWxS
ZWdpc3RlcldpdGhQcmVmZXJlbmNlIGV4cGVjdGVkVmFsdWVSZWdpc3RlcihtX3JlZ2lzdGVyQWxs
b2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgbV9hc3NlbWJsZXIubW92
ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRWYWx1ZS5pbXBsKCkpLCBleHBlY3Rl
ZFZhbHVlUmVnaXN0ZXIpOwpAQCAtMzA3NSw3ICszMDc0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyIHRlc3RGdW5jdGlvbikKK3ZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRp
b25QdHJUYWc+IHRlc3RGdW5jdGlvbikKIHsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxl
bWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwogICAgIEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxv
Y2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CkBAIC0zMDg0LDcgKzMwODMsNyBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChm
dW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6
WmVybykpOwogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0
RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6
RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gdGVzdEZ1bmN0aW9u
KQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lz
dGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKICAgICBsb2FkQ2hlY2tpbmdDb250ZXh0
KGNoZWNraW5nQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNv
bXBpbGVyLmgJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxl
Y3RvckNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDM0ICs1MywzMCBAQCB0eXBlZGVm
IHVuc2lnbmVkICgqUXVlcnlTZWxlY3RvclNpbXBsZVNlCiB0eXBlZGVmIHVuc2lnbmVkICgqUnVs
ZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpKGNvbnN0IEVsZW1l
bnQqLCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCosIHVuc2lnbmVkKik7CiB0eXBl
ZGVmIHVuc2lnbmVkICgqUXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0Nv
bnRleHQpKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dCopOwogCi1TZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGVTZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3RvciosIFNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIG91dHB1dENvZGVSZWYpOworU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBTZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiYgb3V0cHV0Q29kZVJlZik7CiAKLWlubGlu
ZSBSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyIHJ1bGVDb2xsZWN0b3JTaW1wbGVT
ZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb25zdCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZVJlZiwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXMgY29tcGlsYXRpb25TdGF0dXMpCitpbmxpbmUgUnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9y
Q2hlY2tlciBydWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24odm9pZCog
ZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25T
dGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxhdGlvblN0YXR1cywgY29tcGlsYXRp
b25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVj
a2VyKTsKLSAgICBKU0M6OlB0clRhZyB0YWcgPSBKU0M6OnB0clRhZygmY29kZVJlZiwgU2VsZWN0
b3JDb250ZXh0OjpSdWxlQ29sbGVjdG9yKTsKLSAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlv
blB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyPihleGVjdXRhYmxlQWRkcmVz
cywgdGFnKTsKKyAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9y
U2ltcGxlU2VsZWN0b3JDaGVja2VyLCBDU1NTZWxlY3RvclB0clRhZz4oZXhlY3V0YWJsZUFkZHJl
c3MpOwogfQogCi1pbmxpbmUgUXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBxdWVy
eVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29uc3QgSlNDOjpNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQoraW5saW5lIFF1ZXJ5U2VsZWN0
b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgcXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
ckZ1bmN0aW9uKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29tcGlsYXRpb25T
dGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgSlNDOjpQdHJUYWcgdGFnID0gSlNDOjpwdHJUYWco
JmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcik7Ci0gICAgcmV0dXJuIEpT
Qzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlcj4o
ZXhlY3V0YWJsZUFkZHJlc3MsIHRhZyk7CisgICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25Q
dHI8UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgQ1NTU2VsZWN0b3JQdHJUYWc+
KGV4ZWN1dGFibGVBZGRyZXNzKTsKIH0KIAotaW5saW5lIFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5j
dGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IGNvZGVSZWYsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIGNvbXBpbGF0aW9uU3RhdHVzKQoraW5saW5lIFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlv
bldpdGhDaGVja2luZ0NvbnRleHQodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChj
b21waWxhdGlvblN0YXR1cywgY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7Ci0gICAgSlNDOjpQ
dHJUYWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6UnVsZUNv
bGxlY3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxlY3Rv
clNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQ+KGV4ZWN1dGFibGVBZGRyZXNzLCB0
YWcpOworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTZWxl
Y3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0LCBDU1NTZWxlY3RvclB0clRhZz4oZXhlY3V0
YWJsZUFkZHJlc3MpOwogfQogCi1pbmxpbmUgUXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQgcXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0
aENoZWNraW5nQ29udGV4dChjb25zdCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJl
Ziwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsYXRpb25TdGF0dXMpCitpbmxpbmUgUXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQgcXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENo
ZWNraW5nQ29udGV4dCh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGF0
aW9uU3RhdHVzLCBjb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
OjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKLSAgICBKU0M6OlB0clRhZyB0
YWcgPSBKU0M6OnB0clRhZygmY29kZVJlZiwgU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9y
KTsKLSAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dD4oZXhlY3V0YWJsZUFkZHJlc3MsIHRhZyk7Cisg
ICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hl
Y2tlcldpdGhDaGVja2luZ0NvbnRleHQsIENTU1NlbGVjdG9yUHRyVGFnPihleGVjdXRhYmxlQWRk
cmVzcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9uIDIzMDcyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDExICs0
NTEsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgICAg
ICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBjb21waWxlZFNl
bGVjdG9yQ2hlY2tlciA9IHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmNvbXBpbGF0aW9u
U3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cikgewotICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21w
aWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHNlbGVjdG9y
LmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0
b3IuY29tcGlsYXRpb25TdGF0dXMpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVj
a2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
ckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0
YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVu
dCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rv
ci5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbGVj
dG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNr
ZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoc2VsZWN0b3IuY29tcGlsZWRTZWxlY3RvckNv
ZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1
cyk7CisgICAgICAgICAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBp
bGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250
ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7
CiAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVudCwgJmNo
ZWNraW5nQ29udGV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobWF0Y2hlZCkg
ewpAQCAtNTQzLDExICs1NDMsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxp
c3Q6OmV4ZQogICAgICAgICBjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSA9IG1fc2Vs
ZWN0b3JzLmZpcnN0KCk7CiAgICAgICAgIHZvaWQqIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyID0g
c2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAg
ICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
ciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2ltcGxl
U2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JDb2Rl
UmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3Rh
dHVzKTsKKyAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1wbGVT
ZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlT
ZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVj
a2VyLCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMpOwogICAgICAgICAgICAgZXhlY3V0
ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyPFNlbGVjdG9yUXVlcnlUcmFpdD4oKnNlYXJj
aFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIsIG91dHB1dCwgc2VsZWN0b3JEYXRhKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3RvckRhdGEuY29tcGlsYXRpb25T
dGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVj
dG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBT
ZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRo
Q2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZiwgY29t
cGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyk7Cisg
ICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpx
dWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMpOwog
ICAgICAgICAgICAgZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29u
dGV4dDxTZWxlY3RvclF1ZXJ5VHJhaXQ+KHJvb3ROb2RlLCAqc2VhcmNoUm9vdE5vZGUsIHNlbGVj
dG9yQ2hlY2tlciwgb3V0cHV0LCBzZWxlY3RvckRhdGEpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCShyZXZpc2lvbiAyMzA3Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3I7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCi0gICAgICAgIG11
dGFibGUgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29tcGlsZWRTZWxlY3RvckNvZGVSZWY7
CisgICAgICAgIG11dGFibGUgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQ
dHJUYWc+IGNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmOwogICAgICAgICBtdXRhYmxlIFNlbGVjdG9y
Q29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXM7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJ
VF9QUk9GSUxJTkcKICAgICAgICAgflNlbGVjdG9yRGF0YSgpCg==
</data>
<flag name="review"
          id="356456"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338157</attachid>
            <date>2018-04-17 16:17:39 -0700</date>
            <delta_ts>2018-04-17 17:38:53 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-184702.patch</filename>
            <type>text/plain</type>
            <size>627155</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyMCBA
QAorMjAxOC0wNC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGVtcGxhdGl6ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAg
UGl6bG8uCisKKyAgICAgICAgMS4gVGVtcGxhdGl6ZWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyL1Jl
ZiwgRnVuY3Rpb25QdHIsIGFuZCBDb2RlTG9jYXRpb24gdmFyaWFudHMKKyAgICAgICAgICAgdG8g
dGFrZSBhIFB0clRhZyB0ZW1wbGF0ZSBhcmd1bWVudC4KKyAgICAgICAgMi4gUmVwbGFjZWQgc29t
ZSB1c2VzIG9mIHJhdyBwb2ludGVycyB3aXRoIHRoZSBlcXVpdmFsZW50IENvZGVQdHIgLyBGdW5j
dGlvblB0ci4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmxpbmtKdW1w
KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXApOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3QpOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlYWRQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhMb2FkKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24p
OgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uQ29tbW9uOjogY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21t
b246OkNvZGVMb2NhdGlvbkNvbW1vbik6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkluc3Ry
dWN0aW9uOjpDb2RlTG9jYXRpb25JbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVMb2Nh
dGlvbkxhYmVsOjpDb2RlTG9jYXRpb25MYWJlbCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkxhYmVsOjpyZXRhZ2dlZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkxhYmVsOjogY29u
c3QpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25KdW1wOjpDb2RlTG9jYXRpb25KdW1wKToK
KyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uSnVtcDo6cmV0YWdnZWQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25DYWxsOjpDb2RlTG9jYXRpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uQ2FsbDo6cmV0YWdnZWQpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25OZWFy
Q2FsbDo6Q29kZUxvY2F0aW9uTmVhckNhbGwpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25E
YXRhTGFiZWwzMjo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIpOgorICAgICAgICAoSlNDOjpDb2Rl
TG9jYXRpb25EYXRhTGFiZWxDb21wYWN0OjpDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KToK
KyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOjpDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHIpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ6OkNv
ZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uPHRhZz46OmxhYmVsQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRp
b25Db21tb248dGFnPjo6anVtcEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz46OmNhbGxBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+OjpuZWFyQ2FsbEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz46OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbDMyQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjppbnN0cnVjdGlvbkF0T2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpsYWJlbEF0T2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpqdW1wQXRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21tb246OmNhbGxB
dE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6bmVh
ckNhbGxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1v
bjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25Db21tb246OmRhdGFMYWJlbDMyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6Y29udmVydGlibGVMb2FkQXRPZmZz
ZXQpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUlt
cGwpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVX
aXRoRGlzYXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
Lmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpwYXRjaCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmVudHJ5cG9pbnQpOgor
ICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsb2NhdGlvbk9mKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6dHJhbXBvbGluZUF0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0u
aDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlYWRDYWxsVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0
Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRPZlBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5j
aFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxpbmtDYWxsKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNNjQ6OnJlcGxhY2VXaXRoVk1IYWx0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3Rh
cnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXBhdGNo
Q2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTXY3OjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTXY3OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTXY3OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVwYXRj
aENhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpsaW5rQ2FsbCk6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseSk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXAg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZUxMSW50Q29kZVJlZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6dHJ5VG9EaXNhc3NlbWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZGlzYXNzZW1ibHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmR1bXAgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6
OnJldGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OnJldGFnZ2VkRXhl
Y3V0YWJsZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpvcGVyYXRvciE9IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6UmV0dXJuQWRkcmVzc1B0cjo6UmV0dXJuQWRkcmVzc1B0cik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJldGFn
Z2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjogY29uc3Qp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6Omhhc2gpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkQ29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6cmV0YWdnZWQgY29uc3QpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1ibGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkdW1wIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmVw
bGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlck1JUFM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3Rh
cnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJNSVBTOjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZWFkQ2FsbFRh
cmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Ojpz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODY6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9u
QWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODY6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6
OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGF0Y2hDb21wYWN0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VXaXRoVk1I
YWx0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnJlcGxhY2VXaXRo
SnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mQnJh
bmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6
OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2VtYmxl
ci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpp
bnZva2UpOgorICAgICAgICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKToK
KyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBp
bGF0aW9uOjpDb21waWxhdGlvbik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5oOgorICAg
ICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpC
Mzo6Q29tcGlsYXRpb246OmNvZGVSZWYgY29uc3QpOgorICAgICAgICAqIGIzL0IzQ29tcGlsZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFj
cm9zLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvdGVz
dGFpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Omlu
dm9rZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdEVudHJ5U3dpdGNoU2ltcGxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRy
eVN3aXRjaE5vRW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEVudHJ5U3dpdGNo
V2l0aENvbW1vblBhdGhzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFdpdGhD
b21tb25QYXRoc0FuZE5vblRyaXZpYWxFbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RFbnRyeVN3aXRjaExvb3ApOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhD
YWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRl
Y29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6QnlWYWxJbmZvOjpCeVZhbEluZm8pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6Y2FsbFJldHVybkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjpwYXRjaGFibGVKdW1wKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpob3RQYXRoQmVn
aW4pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OnNldENhbGxMb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmhvdFBhdGhP
dGhlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5m
b1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlk
VmFyaWFudDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
OjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6ZHVtcEltcGwgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Vz
dG9tQWNjZXNzb3IgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpIYW5kbGVySW5mbzo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
bGlua0NvZGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0p1bXBUYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aUZv
clZhbHVlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJ
bnRDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBs
aWNpdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6QWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OmNvZGUgY29uc3QpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVN0dWJJbmZvOjpzbG93UGF0aENhbGxMb2NhdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVN0dWJJbmZvOjpkb25lTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6c2xvd1BhdGhTdGFydExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnBhdGNoYWJsZUp1bXBGb3JJbik6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRh
dGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphcHBlbmRDYXRjaEVudHJ5cG9p
bnQpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KToKKyAgICAgICAgKiBkZmcvREZHRHJp
dmVyLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZUNhdGNo
RW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbExpbmtSZWNvcmQ6OkNhbGxMaW5rUmVjb3JkKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OkpTQ2FsbFJlY29yZDo6SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6SlNEaXJlY3RDYWxsUmVjb3JkOjpKU0RpcmVjdENhbGxSZWNvcmQpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpKU0Rp
cmVjdFRhaWxDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcik6CisgICAgICAg
IChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklURmlu
YWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oOgorICAgICAgICAo
SlNDOjpERkc6Okp1bXBSZXBsYWNlbWVudDo6SnVtcFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ2F0
Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVz
dEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29kZUxvY2F0
aW9uRm9yUmVwYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJl
c3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVPU1JF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3Vu
dHMpOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAg
ICAoSlNDOjpERkc6Om9zcldyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2Fs
bFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRB
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6dW5wYWNrQW5kR2VuZXJhdGUpOgorICAgICAgICAo
SlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0pOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVj
dFBuYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJ
ZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YXBwZW5kQ2FsbFNldFJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdp
dGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhpdFRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0FSTTY0
RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAg
ICAgICogZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6ZGlzYXNzZW1i
bGVBc3luY2hyb25vdXNseSk6CisgICAgICAgICogZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkaXNhc3NlbWJs
ZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJs
ZVdpdGhVRGlzODYpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIu
aDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYpOgorICAgICAgICAq
IGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjp0cnlUb0Rp
c2Fzc2VtYmxlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpsYWJlbCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyk6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlv
blRhcmdldC5oOgorICAgICAgICAqIGZ0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oOgorICAgICAg
ICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjppbml0
aWFsaXplQjNDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjppbml0aWFsaXplQWRk
cmVzc0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVBcml0
eUNoZWNrRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6YWRkcmVzc0Zv
ckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzQXRP
ZmZzZXQpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
SklUQ29kZTo6YjNDb2RlIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToKKyAg
ICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5
U2xvd1BhdGg6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6
Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguaDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpMYXp5U2xvd1BhdGg6OnBhdGNoYWJsZUp1bXAgY29uc3QpOgorICAgICAgICAoSlND
OjpGVEw6OkxhenlTbG93UGF0aDo6ZG9uZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6TGF6
eVNsb3dQYXRoOjpzdHViIGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVEaXJlY3RDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVhZCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25z
dHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCBjb25zdCk6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0SGFu
ZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5r
KToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKiBmdGwvRlRM
U2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250ZXh0
OjprZXlXaXRoVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxD
b250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAg
ICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0
aENhbGxLZXkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6ZHVtcCBj
b25zdCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6U2xvd1BhdGhDYWxsS2V5KToKKyAgICAgICAgKEpTQzo6
RlRMOjpTbG93UGF0aENhbGxLZXk6OmNhbGxUYXJnZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpGVEw6
OlNsb3dQYXRoQ2FsbEtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1Bh
dGhDYWxsS2V5OjpjYWxsUHRyVGFnIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRM
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICog
ZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAoSlNDOjpGVEw6Omdl
bmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6OmtleUZvclRodW5rKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmdldFNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAgICAg
KEpTQzo6RlRMOjpUaHVua3M6OmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmdldE9wY29kZUlEKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eik6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVNlcGFyYXRl
ZFdYSGVhcHMpOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGppdC9H
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAg
ICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpjcmVh
dGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
OgorICAgICAgICAoSlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OmN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklU
OjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNh
bGxSZWNvcmQpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Ns
b3cpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJ
VENvZGUuY3BwOgorICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRo
Q29kZVJlZik6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFk
ZHJlc3NBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6Cisg
ICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJ
VENvZGU6OmluaXRpYWxpemVDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29kZTo6
YWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgICogaml0
L0pJVENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToK
KyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmNvZGVMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpJVENvZGVNYXA6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6OmZp
bmQgY29uc3QpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAo
SlNDOjpKSVREaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseSk6CisgICAgICAgICogaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKSVRCeUlk
R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TmFrZWRDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmFr
ZWRUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0Fu
ZFNsb3dQYXRoUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZSk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjppc1Byb2ZpbGVF
bXB0eSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5
VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6
OkpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNl
bGZNYW5hZ2VkUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cik6CisgICAgICAg
ICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZl
Q2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3RpbmdD
VElTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAg
ICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICogaml0L1BDVG9Db2RlT3JpZ2luTWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFw
KToKKyAgICAgICAgKiBqaXQvUENUb0NvZGVPcmlnaW5NYXAuaDoKKyAgICAgICAgKiBqaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAqIGpp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVhZFB1dElDQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OmZ0
bFRodW5rQXdhcmVSZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1p
emluZ0dldEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2V0QnlJZEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6
cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW4pOgorICAg
ICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAg
ICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRGlyZWN0Rm9yKToKKyAgICAg
ICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtWaXJ0dWFsRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2Fs
bCk6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnlJRCk6CisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBqaXQvU2xvd1BhdGhD
YWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6CisgICAgICAgICog
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpjYWxs
RG91YmxlVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpjYWxs
RG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hh
YmxlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Y2hhckF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmcm9t
Q2hhckNvZGVUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNsejMyVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpm
bG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dHJ1bmNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnJvdW5k
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpleHBUaHVua0dlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjppbXVsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpyYW5kb21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJnc0Z1
bmN0aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgor
ICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojppbml0
aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENvZGVQ
dHIpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxM
SW50OjpnZXRDb2RlRnVuY3Rpb25QdHIpOgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlwb2lu
dC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRGdW5jdGlvbkVudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0TW9kdWxl
UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGludC9M
TEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OnZtRW50cnlUb1dhc20pOgorICAgICAgICAo
SlNDOjpMTEludDo6Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8pOgorICAgICAgICAoSlNDOjpMTElu
dDo6ZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxM
SW50OjpmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6TExJbnQ6OnByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6Om1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBw
cm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OkNvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmls
ZXJDb21waWxhdGlvbi5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUu
Y3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdFNpdGU6OnRvSlMgY29uc3QpOgor
ICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDoKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjpPU1JFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpPU1JFeGl0U2l0ZTo6Y29kZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9m
aWxlcjo6T1NSRXhpdFNpdGU6OiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNv
ZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUJhc2U6OmVudHJ5cG9pbnRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmg6CisgICAgICAgIChK
U0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpUYWdnZWROYXRpdmVGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uOjpvcGVyYXRvciBOYXRpdmVGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9QdHJUYWcuaDoKKyAgICAgICAgKEpTQzo6dGFnQ29kZVB0cik6Cisg
ICAgICAgIChKU0M6OnVudGFnQ29kZVB0cik6CisgICAgICAgIChKU0M6OnJldGFnQ29kZVB0cik6
CisgICAgICAgIChKU0M6OnRhZ0NGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6OnVudGFnQ0Z1
bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6bmV4dFB0clRhZ0lEKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6
c2V0Q3VzdG9tVmFsdWUpOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3Rv
bUFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpjdXN0b21TZXR0ZXIg
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldEhvc3RGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcik6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJU3R1Yik6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0RXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBs
ZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNt
QmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAq
IHdhc20vV2FzbUJpbmRpbmcuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjplbnRyeXBvaW50IGNvbnN0KToKKyAgICAgICAgKiB3YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29u
dmVudGlvbjo6c2V0dXBGcmFtZUluUHJvbG9ndWUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2Fz
bUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxlcik6
CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFu
Y2UuaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6Oldhc206
OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRl
SlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6aGFuZGxlQmFkSTY0VXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAg
ICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaDoKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpsb2FkRnJvbUZyYW1lQW5kSnVtcCk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJHZW5lcmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjpsaW5rRGF0YUxhYmVscyk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICAq
IHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQ4
Qml0Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2Qml0Q29k
ZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlTWF0Y2hP
bmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2RlTWF0
Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmNsZWFyKToKKwogMjAxOC0wNC0xNyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PD46OnZpc2l0Q2hpbGRyZW4gaGFzIGEgcmFjZSBjb25kaXRpb24gcmVhZGluZyBt
X21vZGUgYW5kIG1fdmVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjMwNzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDggQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyVHlwZTsKICAgICB0eXBlZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwog
Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKLSAgICB0eXBlZGVm
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz47
CiAKICAgICBjbGFzcyBKdW1wOwogCkBAIC0zOTQsNyArMzk0LDcgQEAgcHVibGljOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPjsKICAg
ICAgICAgZnJpZW5kIHN0cnVjdCBERkc6Ok9TUkV4aXQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
dW1wOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOworICAgICAg
ICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgICAgICBmcmllbmQgY2xhc3MgV2F0
Y2hwb2ludDsKIApAQCAtODQzLDkgKzg0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBB
c3NlbWJsZXJUeXBlOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhmcm9tLm1fbGFiZWwsIHRv
Lm1fbGFiZWwpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYSwgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBiKQorICAgIHRlbXBsYXRlPFB0clRhZyBhVGFnLCBQdHJUYWcgYlRhZz4K
KyAgICBzdGF0aWMgcHRyZGlmZl90IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8YVRhZz4mIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxi
VGFnPiYgYikKICAgICB7Ci0gICAgICAgIHJldHVybiBiLmV4ZWN1dGFibGVBZGRyZXNzPHB0cmRp
ZmZfdD4oKSAtIGEuZXhlY3V0YWJsZUFkZHJlc3M8cHRyZGlmZl90PigpOworICAgICAgICByZXR1
cm4gYi50ZW1wbGF0ZSBkYXRhTG9jYXRpb248cHRyZGlmZl90PigpIC0gYS50ZW1wbGF0ZSBkYXRh
TG9jYXRpb248cHRyZGlmZl90PigpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGRlYnVnT2Zmc2V0
KCkgeyByZXR1cm4gbV9hc3NlbWJsZXIuZGVidWdPZmZzZXQoKTsgfQpAQCAtODU3LDcgKzg1OCw4
IEBAIHB1YmxpYzoKIAogICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CiAgICAgCi0gICAg
c3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25M
YWJlbCB0YXJnZXQpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBs
aW5rSnVtcCh2b2lkKiBjb2RlLCBKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gdGFy
Z2V0KQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua0p1bXAoY29kZSwganVtcC5t
X2xhYmVsLCB0YXJnZXQuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KQEAgLTg2NywxMiArODY5LDE0
IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFi
ZWwsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBj
b2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHZhbHVlKQor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9p
ZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IHZhbHVlKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwg
bGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkKiBnZXRMaW5rZXJBZGRyZXNzKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCBQ
dHJUYWcgdGFnID0gTm9QdHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0
aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJl
bCkKICAgICB7CiAgICAgICAgIHJldHVybiB0YWdDb2RlUHRyKEFzc2VtYmxlclR5cGU6OmdldFJl
bG9jYXRlZEFkZHJlc3MoY29kZSwgbGFiZWwpLCB0YWcpOwogICAgIH0KQEAgLTg4Miw1NiArODg2
LDY0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldENhbGxSZXR1
cm5PZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNo
SnVtcChDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9u
KQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoSnVtcChDb2RlTG9jYXRpb25KdW1wPGp1bXBUYWc+IGp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQXNzZW1i
bGVyVHlwZTo6cmVsaW5rSnVtcChqdW1wLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRh
TG9jYXRpb24oKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wVG9O
b3AoQ29kZUxvY2F0aW9uSnVtcCBqdW1wKQorICAgIHRlbXBsYXRlPFB0clRhZyBqdW1wVGFnPgor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wVG9Ob3AoQ29kZUxvY2F0aW9uSnVtcDxqdW1wVGFn
PiBqdW1wKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rSnVtcFRvTm9wKGp1
bXAuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hOZWFy
Q2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVz
dGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hOZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbDxjYWxs
VGFnPiBuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZGVzdGluYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgTmVhckNvZGVQdHJUYWcpOwogICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNhbGxN
b2RlKCkpIHsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CiAgICAgICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZWxpbmtKdW1wKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2Ug
TmVhckNhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5r
Q2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3QoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVl
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBh
Y3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+IGRhdGFMYWJlbENvbXBhY3QsIGlu
dDMyX3QgdmFsdWUpCiAgICAgewotICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoQ29tcGFj
dChkYXRhTGFiZWxDb21wYWN0LmRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7CisgICAgICAgIEFzc2Vt
YmxlclR5cGU6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QudGVtcGxhdGUgZGF0YUxv
Y2F0aW9uKCksIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaElu
dDMyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyLCBpbnQzMl90IHZhbHVlKQor
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBkYXRhTGFiZWwzMiwgaW50MzJfdCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hJbnQzMihkYXRhTGFiZWwzMi5k
YXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQ
b2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIsIHZvaWQqIHZhbHVl
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50
ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFMYWJl
bFB0ci5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9p
ZCogcmVhZFBvaW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0cikKKwor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVyKENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGRhdGFMYWJlbFB0cikKICAgICB7CiAgICAgICAg
IHJldHVybiBBc3NlbWJsZXJUeXBlOjpyZWFkUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxvY2F0
aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aExvYWQoQ29k
ZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxl
TG9hZDx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwbGFjZVdp
dGhMb2FkKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZv
aWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29udmVydGlibGVM
b2FkIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbihDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8
dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoQWRk
cmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ZW51bSBOZWFyQ2FsbE1vZGUgeyBSZWd1bGFyLCBUYWlsIH07CiAKLWNsYXNzIENvZGVMb2NhdGlv
bkluc3RydWN0aW9uOwotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWw7Ci1jbGFzcyBDb2RlTG9jYXRp
b25KdW1wOwotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbDsKLWNsYXNzIENvZGVMb2NhdGlvbk5lYXJD
YWxsOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDsKLWNsYXNzIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyOwotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwotY2xhc3Mg
Q29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2Rl
TG9jYXRpb25JbnN0cnVjdGlvbjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9u
TGFiZWw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkp1bXA7Cit0ZW1wbGF0
ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNhbGw7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNz
IENvZGVMb2NhdGlvbk5lYXJDYWxsOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25EYXRhTGFiZWxDb21wYWN0OwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25E
YXRhTGFiZWwzMjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ7
CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwgcHJldHR5IG11Y2ggZG8tbm90
aGluZyB3cmFwcGVycyBhcm91bmQKIC8vIENvZGVQdHIgKG9yIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCkBAIC01NCwxNjkgKzU0LDIxMiBA
QCBjbGFzcyBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ7CiAvLyBvZmZzZXRzIGFwYXJ0LiAg
VG8gcmVkdWNlIG1lbW9yeSBvdmVyaGVhZCB3ZSB3aWxsIG9ubHkgcmV0YWluIGEgcG9pbnRlciB0
bwogLy8gb25lIG9mIHRoZSBpbnN0cnVjdGlvbnMsIGFuZCB3ZSB3aWxsIHVzZSB0aGUgKkF0T2Zm
c2V0IG1ldGhvZHMgcHJvdmlkZWQgYnkKIC8vIENvZGVMb2NhdGlvbkNvbW1vbiB0byBmaW5kIHRo
ZSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGUgdG8gbW9kaWZ5LgotY2xhc3MgQ29kZUxvY2F0aW9u
Q29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB7Ci1wdWJsaWM6Ci0gICAgQ29k
ZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbkNh
bGwgY2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIG5l
YXJDYWxsQXRPZmZzZXQoaW50IG9mZnNldCwgTmVhckNhbGxNb2RlKTsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChp
bnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgY29udmVydGlibGVM
b2FkQXRPZmZzZXQoaW50IG9mZnNldCk7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29k
ZUxvY2F0aW9uQ29tbW9uIDogcHVibGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHsKKyAg
ICB1c2luZyBCYXNlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CitwdWJsaWM6CisgICAg
dGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248
cmVzdWx0VGFnPiBpbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRl
PFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4gbGFi
ZWxBdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnID0g
dGFnPiBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4ganVtcEF0T2Zmc2V0KGludCBvZmZzZXQp
OworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkNhbGw8
cmVzdWx0VGFnPiBjYWxsQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFn
IHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uTmVhckNhbGw8cmVzdWx0VGFnPiBuZWFyQ2Fs
bEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSk7CisgICAgdGVtcGxhdGU8UHRyVGFn
IHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4gZGF0
YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3Vs
dFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8cmVzdWx0VGFnPiBkYXRhTGFiZWwz
MkF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0
YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8cmVzdWx0VGFnPiBkYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZyA9
IHRhZz4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkPHJlc3VsdFRhZz4gY29udmVydGlibGVM
b2FkQXRPZmZzZXQoaW50IG9mZnNldCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9p
ZCo+CisgICAgVCBkYXRhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBk
YXRhTG9jYXRpb248VD4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQ29kZUxvY2F0aW9uQ29tbW9u
KCkKICAgICB7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRp
b24pCisgICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKQog
ICAgIHsKICAgICB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1Ymxp
YyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVM
b2NhdGlvbkluc3RydWN0aW9uIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1
YmxpYzoKLSAgICBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbigpIHt9Ci0gICAgZXhwbGljaXQgQ29k
ZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25J
bnN0cnVjdGlvbigpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkluc3RydWN0aW9uKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0
cnVjdGlvbih2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRpb25D
b21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsK
IAotY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsK
K3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25MYWJlbCA6IHB1YmxpYyBD
b2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwo
KSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwoKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9u
TGFiZWwodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKworICAg
IHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8bmV3VGFnPiBy
ZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPG5ld1RhZz4oQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIAotICAgIENvZGVM
b2NhdGlvbkxhYmVsIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIHsgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6cmV0YWdnZWQob2xk
VGFnLCBuZXdUYWcpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBU
IHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBDb2RlTG9jYXRpb25D
b21tb248dGFnPjo6dGVtcGxhdGUgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxUPigpOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUgZGF0YUxvY2F0
aW9uPFQ+KCk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkp1bXAgOiBwdWJsaWMgQ29kZUxv
Y2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25K
dW1wIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBDb2Rl
TG9jYXRpb25KdW1wKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9j
YXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uSnVtcCgpIHsgfQorICAgIGV4cGxpY2l0IENvZGVM
b2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbkp1bXAodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7
IH0KIAotICAgIENvZGVMb2NhdGlvbkp1bXAgcmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRyVGFn
IG5ld1RhZykgeyByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KKyAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFn
PgorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVM
b2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6dGVtcGxhdGUg
cmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ2FsbCA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENv
ZGVMb2NhdGlvbkNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGlj
OgotICAgIENvZGVMb2NhdGlvbkNhbGwoKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNh
bGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlv
bkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9CisgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlv
bikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2RlTG9j
YXRpb25DYWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxsPG5l
d1RhZz4oQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4o
KSk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsIDogcHVibGljIENvZGVMb2Nh
dGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uTmVh
ckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgotICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25OZWFyQ2Fs
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24sIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkK
LSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pLCBtX2NhbGxNb2RlKGNhbGxN
b2RlKSB7IH0KKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCgpIHsgfQorICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uLCBO
ZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
bG9jYXRpb24pLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9j
YXRpb25OZWFyQ2FsbCh2b2lkKiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQotICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24p
KSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
PHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwgbV9jYWxsTW9kZShj
YWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyByZXR1cm4gbV9jYWxs
TW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9kZSA9IE5lYXJDYWxs
TW9kZTo6UmVndWxhcjsKIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVi
bGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewog
cHVibGljOgotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KLSAgICBleHBsaWNpdCBD
b2RlTG9jYXRpb25EYXRhTGFiZWwzMihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24pCi0g
ICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbDMyKCkgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0
aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihN
YWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9
OwogCi1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDogcHVibGljIENvZGVMb2Nh
dGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsQ29tcGFjdCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6
CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCgpIHsgfQotICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9u
KQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikgeyB9CisgICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikg
eyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBsb2Nh
dGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8
UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2Rl
TG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2Nh
dGlvbikge30KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoKSB7IH0KKyAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9j
YXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQog
ICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlvbikKLSAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9u
KSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVy
dGlibGVMb2FkIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIDogcHVibGljIENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihs
b2NhdGlvbikgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25Db252
ZXJ0aWJsZUxvYWQodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9
CiB9OwogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gQ29kZUxvY2F0aW9uQ29tbW9u
OjppbnN0cnVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
dGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25JbnN0cnVjdGlv
bjxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjppbnN0cnVjdGlvbkF0T2Zmc2V0
KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0g
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSAr
IG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkluc3RydWN0aW9uPHJlc3VsdFRhZz4o
dGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwog
fQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgQ29kZUxvY2F0aW9uQ29tbW9uOjpsYWJlbEF0
T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFn
IHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25MYWJlbDxyZXN1bHRUYWc+IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+OjpsYWJlbEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJU
X1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVs
KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkxhYmVsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFy
Kj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uSnVtcCBDb2RlTG9jYXRp
b25Db21tb246Omp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4K
K3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uSnVtcDxyZXN1
bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpqdW1wQXRPZmZzZXQoaW50IG9mZnNldCkK
IHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uSnVtcChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJldHVy
biBDb2RlTG9jYXRpb25KdW1wPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFM
b2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uQ2Fs
bCBDb2RlTG9jYXRpb25Db21tb246OmNhbGxBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8
UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0
aW9uQ2FsbDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpjYWxsQXRPZmZzZXQo
aW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQp
OworICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1
bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29k
ZUxvY2F0aW9uTmVhckNhbGwgQ29kZUxvY2F0aW9uQ29tbW9uOjpuZWFyQ2FsbEF0T2Zmc2V0KGlu
dCBvZmZzZXQsIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0
ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbk5lYXJDYWxsPHJl
c3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46Om5lYXJDYWxsQXRPZmZzZXQoaW50IG9m
ZnNldCwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09G
RlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChkYXRhTG9jYXRp
b248Y2hhcio+KCkgKyBvZmZzZXQsIGNhbGxNb2RlKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9u
TmVhckNhbGw8cmVzdWx0VGFnPih0YWdDb2RlUHRyPHJlc3VsdFRhZz4oZGF0YUxvY2F0aW9uPGNo
YXIqPigpICsgb2Zmc2V0KSwgY2FsbE1vZGUpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIENvZGVMb2NhdGlvbkNvbW1vbjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9m
ZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgor
aW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+OjpkYXRhTGFiZWxQdHJBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VS
VF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHIoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIgQ29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGludCBv
ZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4K
K2lubGluZSBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+OjpkYXRhTGFiZWwzMkF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJU
X1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFM
YWJlbDMyKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbDMyPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFM
b2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwogfQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsQ29tcGFjdCBDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1
bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDxyZXN1bHRUYWc+IENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoaW50IG9mZnNl
dCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZz
ZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHJlc3VsdFRhZz4o
dGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCkpOwog
fQogCi1pbmxpbmUgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIENvZGVMb2NhdGlvbkNvbW1v
bjo6Y29udmVydGlibGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0
YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0aWJs
ZUxvYWRBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNF
VChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQoZGF0YUxv
Y2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVy
dGlibGVMb2FkPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxj
aGFyKj4oKSArIG9mZnNldCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjAgKzQ0LDIwIEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKENvZGVCbG9jayoKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCk7CiB9CiAKLUxpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0
aG91dERpc2Fzc2VtYmx5KFB0clRhZyB0YWcpCitMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZm
ZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwo
KQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKICAgICAKICAgICBBU1NFUlQobV9kaWRB
bGxvY2F0ZSk7CiAgICAgaWYgKG1fZXhlY3V0YWJsZU1lbW9yeSkKLSAgICAgICAgcmV0dXJuIENv
ZGVSZWYoKm1fZXhlY3V0YWJsZU1lbW9yeSwgdGFnKTsKKyAgICAgICAgcmV0dXJuIENvZGVSZWY8
TGlua0J1ZmZlclB0clRhZz4oKm1fZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgCi0gICAgcmV0dXJu
IENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
dGFnQ29kZVB0cihtX2NvZGUsIHRhZykpKTsKKyAgICByZXR1cm4gQ29kZVJlZjxMaW5rQnVmZmVy
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxM
aW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fY29kZSkpKTsK
IH0KIAotTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlz
YXNzZW1ibHkoUHRyVGFnIHRhZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCitMaW5rQnVmZmVy
OjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhE
aXNhc3NlbWJseUltcGwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7Ci0gICAgQ29kZVJlZiBy
ZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkodGFnKTsKKyAgICBDb2RlUmVm
PExpbmtCdWZmZXJQdHJUYWc+IHJlc3VsdCA9IGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJs
eUltcGwoKTsKIAogICAgIGlmIChtX2FscmVhZHlEaXNhc3NlbWJsZWQpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC03MCwxOCArNzAsMTkgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVm
ZmVyOjpmaW5hbGl6ZQogICAgIHZhX2VuZChhcmdMaXN0KTsKICAgICBvdXQucHJpbnRmKCI6XG4i
KTsKIAotICAgIHVpbnQ4X3QqIGV4ZWN1dGFibGVBZGRyZXNzID0gcmVtb3ZlQ29kZVB0clRhZzx1
aW50OF90Kj4ocmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50OF90
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzczx1aW50OF90Kj4oKTsKICAgICBvdXQucHJpbnRmKCIgICAgQ29kZSBhdCBbJXAsICVwKTpc
biIsIGV4ZWN1dGFibGVBZGRyZXNzLCBleGVjdXRhYmxlQWRkcmVzcyArIHJlc3VsdC5zaXplKCkp
OwogICAgIAogICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwogICAgIAogICAg
IGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGlzYXNzZW1ibGVB
c3luY2hyb25vdXNseShoZWFkZXIsIHJlc3VsdCwgbV9zaXplLCAiICAgICIpOworICAgICAgICBD
b2RlUmVmPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUmVmRm9yRGlzYXNzZW1ibHkgPSByZXN1bHQu
cmV0YWdnZWQ8RGlzYXNzZW1ibHlQdHJUYWc+KCk7CisgICAgICAgIGRpc2Fzc2VtYmxlQXN5bmNo
cm9ub3VzbHkoaGVhZGVyLCBXVEZNb3ZlKGNvZGVSZWZGb3JEaXNhc3NlbWJseSksIG1fc2l6ZSwg
IiAgICAiKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgZGF0YUxv
ZyhoZWFkZXIpOwotICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5jb2RlKCksIG1fc2l6ZSwgIiAgICAi
LCBXVEY6OmRhdGFGaWxlKCkpOworICAgIGRpc2Fzc2VtYmxlKHJlc3VsdC5yZXRhZ2dlZENvZGU8
RGlzYXNzZW1ibHlQdHJUYWc+KCksIG1fc2l6ZSwgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCkpOwog
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDggKzYxLDggQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgTGlua0J1ZmZlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0
YWc+OwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIExhYmVsOwogICAgIHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgSnVtcDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIFBhdGNoYWJsZUp1bXA7CkBAIC0xMjEsMzIgKzEyMSwzNiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNldCB2
YWx1ZXMgYXQgY29kZSBnZW5lcmF0aW9uIHRpbWUuCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9wb2ludGVyPEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgotICAgIHZvaWQgbGlu
ayhDYWxsIGNhbGwsIEZ1bmMgZnVuY05hbWUsIFB0clRhZyB0YWcpCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZywgdHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jPjo6dHlwZT46OnZh
bHVlPj4KKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jIGZ1bmNOYW1lKQogICAgIHsKLSAg
ICAgICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24oZnVuY05hbWUsIHRhZyk7CisgICAgICAgIEZ1bmN0
aW9uUHRyPHRhZz4gZnVuY3Rpb24oZnVuY05hbWUpOwogICAgICAgICBsaW5rKGNhbGwsIGZ1bmN0
aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5j
dGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoY2FsbC5p
c0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKICAgICAgICAgY2FsbC5tX2xhYmVsID0gYXBwbHlP
ZmZzZXQoY2FsbC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtDYWxsKGNv
ZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGxpbmsoQ2FsbCBj
YWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAg
ICAgewotICAgICAgICBsaW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxhYmVsKSk7CisgICAgICAgIGxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8dGFnPihsYWJlbCkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHZvaWQgbGluayhKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPHRh
Zz4gbGFiZWwpCiAgICAgewogICAgICAgICBqdW1wLm1fbGFiZWwgPSBhcHBseU9mZnNldChqdW1w
Lm1fbGFiZWwpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSgpLCBqdW1w
LCBsYWJlbCk7CiAgICAgfQogCi0gICAgdm9pZCBsaW5rKGNvbnN0IEp1bXBMaXN0JiBsaXN0LCBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHZv
aWQgbGluayhjb25zdCBKdW1wTGlzdCYgbGlzdCwgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBsYWJl
bCkKICAgICB7CiAgICAgICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGxpc3QuanVtcHMoKSkK
ICAgICAgICAgICAgIGxpbmsoanVtcCwgbGFiZWwpOwpAQCAtMTU4LDcgKzE2Miw4IEBAIHB1Ymxp
YzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgdGFyZ2V0LCB2
YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgdm9pZCBw
YXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gdmFsdWUpCiAg
ICAgewogICAgICAgICBBc3NlbWJsZXJMYWJlbCB0YXJnZXQgPSBhcHBseU9mZnNldChsYWJlbC5t
X2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgdGFy
Z2V0LCB2YWx1ZSk7CkBAIC0xNjYsNTQgKzE3MSw2MyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVz
ZSBtZXRob2RzIGFyZSB1c2VkIHRvIG9idGFpbiBoYW5kbGVzIHRvIGFsbG93IHRoZSBjb2RlIHRv
IGJlIHJlbGlua2VkIC8gcmVwYXRjaGVkIGxhdGVyLgogICAgIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGVudHJ5cG9pbnQoKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8dGFnPiBlbnRyeXBvaW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9j
YXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFn
Pih0YWdDb2RlUHRyPHRhZz4oY29kZSgpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uQ2Fs
bCBsb2NhdGlvbk9mKENhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENv
ZGVMb2NhdGlvbkNhbGw8dGFnPiBsb2NhdGlvbk9mKENhbGwgY2FsbCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NFUlQo
IWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNl
dChjYWxsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsPHRhZz4o
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0
KGNhbGwubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBsb2Nh
dGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGw8dGFnPiBsb2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxsKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7CiAg
ICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgIHJldHVy
biBDb2RlTG9jYXRpb25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhj
b2RlKCksIGFwcGx5T2Zmc2V0KGNhbGwubV9sYWJlbCkpLAorICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTmVhckNhbGw8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+
KGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSksCiAgICAgICAgICAgICBjYWxsLmlz
RmxhZ1NldChDYWxsOjpUYWlsKSA/IE5lYXJDYWxsTW9kZTo6VGFpbCA6IE5lYXJDYWxsTW9kZTo6
UmVndWxhcik7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQYXRj
aGFibGVKdW1wIGp1bXAsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25PZihQYXRjaGFibGVK
dW1wIGp1bXApCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9B
c3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChqdW1wLm1fanVt
cC5tX2xhYmVsKSwgdGFnKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNl
dChqdW1wLm1fanVtcC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbG9jYXRpb25PZihM
YWJlbCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1f
bGFiZWwpLCB0YWcpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oTWFj
cm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0KGxh
YmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxv
Y2F0aW9uT2YoRGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbG9jYXRpb25PZihEYXRhTGFiZWxQdHIg
bGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1h
Y3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwu
bV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+
KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNl
dChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMy
IGxvY2F0aW9uT2YoRGF0YUxhYmVsMzIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxvY2F0aW9uT2YoRGF0YUxhYmVsMzIg
bGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoTWFj
cm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5t
X2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPihN
YWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQo
bGFiZWwubV9sYWJlbCkpKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
Q29tcGFjdCBsb2NhdGlvbk9mKERhdGFMYWJlbENvbXBhY3QgbGFiZWwpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHRhZz4gbG9jYXRp
b25PZihEYXRhTGFiZWxDb21wYWN0IGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3Mo
Y29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJB
ZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0K
IAotICAgIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsb2NhdGlvbk9mKENvbnZlcnRpYmxl
TG9hZExhYmVsIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxvY2F0
aW9uQ29udmVydGlibGVMb2FkPHRhZz4gbG9jYXRpb25PZihDb252ZXJ0aWJsZUxvYWRMYWJlbCBs
YWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQo
TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2Fk
PHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5
T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2Qgb2J0
YWlucyB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGNhbGwsIGdpdmVuIGFzIGFuIG9mZnNldCBm
cm9tCkBAIC0yMzgsMTMgKzI1MiwzMSBAQCBwdWJsaWM6CiAgICAgLy8gY29tcGxldGUgZ2VuZXJh
dGlvbiBvZiB0aGUgY29kZS4gQWx0ZXJuYXRpdmVseSwgY2FsbAogICAgIC8vIGZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseSgpIGRpcmVjdGx5IGlmIHlvdSBoYXZlIHlvdXIgb3duIHdheSBv
ZgogICAgIC8vIGRpc3BsYXlpbmcgZGlzYXNzZW1ibHkuCi0gICAgCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29kZVJlZiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoUHRyVGFnKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmIGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShQ
dHJUYWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigzLCA0
KTsKIAotICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQorICAgIHRlbXBsYXRl
PFB0clRhZyB0YWc+CisgICAgQ29kZVJlZjx0YWc+IGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5SW1wbCgpLnRlbXBsYXRlIHJldGFnZ2VkPHRhZz4oKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIENvZGVSZWY8dGFnPiBmaW5hbGl6
ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgeworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LXNlY3VyaXR5IgorI2Vu
ZGlmCisgICAgICAgIHJldHVybiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGZvcm1h
dCwgYXJncy4uLikudGVtcGxhdGUgcmV0YWdnZWQ8dGFnPigpOworI2lmIENPTVBJTEVSKENMQU5H
KQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgfQorCisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlUHRyPHRhZz4gdHJhbXBvbGluZUF0KExhYmVsIGxh
YmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVQdHIoTWFjcm9Bc3NlbWJsZXI6OkFzc2Vt
YmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVs
Lm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHRhZz4oTWFjcm9Bc3NlbWJsZXI6
OkFzc2VtYmxlclR5cGVfVDo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0
KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogCiAgICAgdm9pZCogZGVidWdBZGRyZXNzKCkKQEAg
LTI1OCw2ICsyOTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1ibGUo
KSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdpdGhv
dXREaXNhc3NlbWJseUltcGwoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExpbmtC
dWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUltcGwoY29uc3QgY2hhciog
Zm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpOworCiAjaWYgRU5BQkxFKEJS
QU5DSF9DT01QQUNUSU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlv
bikKICAgICB7CkBAIC0zMTYsOCArMzUxLDggQEAgcHJpdmF0ZToKIAogI2RlZmluZSBGSU5BTEla
RV9DT0RFX0lGKGNvbmRpdGlvbiwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAu
Li4pICBcCiAgICAgKFVOTElLRUxZKChjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgID8gKGxpbmtCdWZmZXJSZWZlcmVuY2Up
LmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShyZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19fKSBc
Ci0gICAgICAgIDogKGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXREaXNh
c3NlbWJseShyZXN1bHRQdHJUYWcpKQorICAgICAgICA/IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5m
aW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPihfX1ZBX0FSR1NfXykgXAor
ICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihD
b2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzcyLDE3ICszNzcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
IAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
IGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFn
PgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQo
Y2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3Vs
dFRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHJlc3VsdFRhZz4oQXNzZW1ibGVyOjpyZWFkQ2Fs
bFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFs
dChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQpCiAgICAgewotICAgICAg
ICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRoVk1IYWx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhWTUhhbHQoaW5zdHJ1
Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVw
bGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2Nh
dGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBzdGFydFRhZywgUHRy
VGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlv
bkxhYmVsPHN0YXJ0VGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0
VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhK
dW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CkBAIC0zODA2LDQ1ICszODA5LDUzIEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJy
YW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIpCisKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRh
Zz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25M
YWJlbDx0YWc+KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0
YUxhYmVsMzIpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9j
YXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVz
cyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOwor
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0
aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJl
dmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQog
ICAgIHsKICAgICAgICAgcmVlbWl0SW5pdGlhbE1vdmVXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25TdGFy
dC5kYXRhTG9jYXRpb24oKSwgaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2go
Q29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lkKikK
ICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGlu
dDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENv
ZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFn
LCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0
aW9uKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4g
Y2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRD
SF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtNDQzOCwxNyArNDQ0OSwxNSBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQogICAgICAgICAgICAgQXNzZW1ibGVyOjps
aW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09GRlNF
VF9DQUxMX1RPX1BPSU5URVIpLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpIHsKLSAgICAgICAgICAgIGFz
c2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0SXNO
b3RUYWdnZWQoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBBc3Nl
bWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6VGFpbCkpCisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9s
YWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0clRh
Zz4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwoY29k
ZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIgbV9kYXRh
TWVtb3J5VGVtcFJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTA1LDEyICsxNTA1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIuZG1iSVNIU1QoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRU
YWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFn
PiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPHRhZz4gY2FsbCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNQXNz
ZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJUYWcp
OworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0
PHZvaWQoKikoKT4oQVJNQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlv
bigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9j
YXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlv
bikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5z
dHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQpA
QCAtMTUyOCw0NCArMTUzMCw1MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwz
MikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBy
ZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2Rl
TG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNz
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAg
IHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pCiAgICAgewog
ICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7
CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJX
aXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKyAgICB0
ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0
YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQo
MCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0
ZXJJRCByZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNo
KENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCByZWcs
IHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmV2ZXJ0
QnJhbmNoUHRyV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIHJlZywg
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSkgJiAweGZmZmYpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFk
ZHJlc3MsIGludDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgdm9pZCop
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0
YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlv
bkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8
UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hD
YWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlbGlua0Nh
bGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRh
ZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikK
ICAgICB7CiAgICAgICAgIEFSTUFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0xNjE5LDcg
KzE2MjksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wKEFSTVJlZ2lz
dGVyczo6UzEsIG1fYXNzZW1ibGVyLmdldEltbShyaWdodC5tX3ZhbHVlLCBBUk1SZWdpc3RlcnM6
OlMwKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25Q
dHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxhZ1NldChDYWxs
OjpUYWlsKSkKICAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5t
X2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw3ICsxMzgyLDggQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5kbWJJU0hTVCgpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0
LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3Rh
cnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChD
b2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9u
TGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3Rp
bmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC0xOTkzLDIyICsxOTk0LDI0IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgfQogCi0gICAg
Ci0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwg
Y2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+
CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxv
Y2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5j
dGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJlYWRD
YWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihB
Uk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBib29sIGNhbkp1bXBS
ZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJh
bmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBs
YWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHR3b1dvcmRPcFNpemUgPSA0Owog
ICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdHdvV29yZE9wU2l6ZSAqIDIpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5j
aFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3Rl
cklEIHJkLCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmQsIHZv
aWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAjaWYgT1MoTElOVVgpCiAgICAgICAgIEFSTXY3QXNz
ZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92VDNtb3Z0Y21wVDIoaW5zdHJ1Y3Rpb25TdGFydC5kYXRh
TG9jYXRpb24oKSwgcmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihpbml0aWFsVmFsdWUpKTsKQEAgLTIwMTcsMzUgKzIwMjAsNDEgQEAgcHVibGljOgogICAg
ICAgICBBUk12N0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdlQzKGluc3RydWN0aW9uU3RhcnQu
ZGF0YUxvY2F0aW9uKCksIGRhdGFUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtl
VUludDE2KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUpICYgMHhmZmZm
KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0
YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0
Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8
dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkxhYmVsPHRhZz4oKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWws
IEFkZHJlc3MsIHZvaWQqKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
dm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVy
dEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGludDMyX3QpCiAgICAgewogICAg
ICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRl
c3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4K
KyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAg
ICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlv
blB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFSTXY3QXNzZW1ibGVy
OjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgIH0KQEAgLTIxNDQsNyArMjE1Myw4IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5r
Q2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwg
Q2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYg
KGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgQVJNdjdBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYyICsyOCw0MSBAQAogCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1
ZGUgIlB0clRhZy5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2Rl
UHRyKE9wY29kZUlEIG9wY29kZUlEKQordm9pZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpk
dW1wV2l0aE5hbWUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlvbiwg
Y29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBBU1NFUlQob3Bjb2Rl
SUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihvcGNvZGVJRCkpOwotfQotCi12b2lkIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgaWYgKCFleGVj
dXRhYmxlQWRkcmVzcykgewogICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFM
b2NhdGlvbigpKSB7Ci0gICAgICAgIG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIoZXhl
Y3V0YWJsZUFkZHJlc3MoKSksICIpIik7CisgICAgaWYgKGV4ZWN1dGFibGVBZGRyZXNzID09IGRh
dGFMb2NhdGlvbikgeworICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4
ZWN1dGFibGVBZGRyZXNzKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQu
cHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVz
cygpKSwgIiwgZGF0YUxvY2F0aW9uID0gIiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24oKSksICIp
Iik7Ci19Ci0KLXZvaWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsKKyAgICBvdXQu
cHJpbnQobmFtZSwgIihleGVjdXRhYmxlID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVz
cyksICIsIGRhdGFMb2NhdGlvbiA9ICIsIFJhd1BvaW50ZXIoZGF0YUxvY2F0aW9uKSwgIikiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
TExJbnRDb2RlUmVmKE9wY29kZUlEIG9wY29kZUlEKQorYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlOjp0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJs
eVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKG9wY29kZUlEKSk7CisgICAgcmV0
dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCk7CiB9
CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2VtYmxlKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKK2Jvb2wgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNz
ZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCiB7
Ci0gICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShtX2NvZGVQdHIsIHNpemUoKSwgcHJl
Zml4LCBvdXQpOworICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIHBy
ZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKIH0KIAotYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OnRyeVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4KSBjb25zdAotewotICAgIHJldHVy
biB0cnlUb0Rpc2Fzc2VtYmxlKFdURjo6ZGF0YUZpbGUoKSwgcHJlZml4KTsKLX0KLQotQ1N0cmlu
ZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5KCkgY29uc3QKK0NTdHJpbmcgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBTdHJpbmdQ
cmludFN0cmVhbSBvdXQ7Ci0gICAgaWYgKCF0cnlUb0Rpc2Fzc2VtYmxlKG91dCwgIiIpKQorICAg
IGlmICghdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCAiIiwgb3V0KSkKICAgICAgICAg
cmV0dXJuIENTdHJpbmcoKTsKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCi12b2lk
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIG1fY29kZVB0ci5kdW1wV2l0aE5hbWUoIkNvZGVSZWYiLCBvdXQpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTQgQEAKIC8vIGludG8gdGhlIHByb2Nlc3NvciBh
cmUgZGVjb3JhdGVkIHdpdGggdGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRpb25hbCBB
Uk0gaGFzCiAvLyB0aGUgbG93ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQg
a2luZCBvZiBwb2ludGVyLCB3ZSBjaGVjayBmb3IgYm90aAogLy8gZGVjb3JhdGVkIGFuZCB1bmRl
Y29yYXRlZCBudWxsLgorI2RlZmluZSBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5URVIo
cHRyKSBcCisgICAgQVNTRVJUKCFwdHIgfHwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRy
KSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAogICAgIEFT
U0VSVChyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCiAjZGVmaW5lIEFTU0VS
VF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpIFwKICAgICBBU1NFUlQoIShvZmZzZXQgJiAxKSkg
Ly8gTXVzdCBiZSBtdWx0aXBsZSBvZiAyLgogI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX05VTExfT1Jf
VkFMSURfQ09ERV9QT0lOVEVSKHB0cikgLy8gQW55dGhpbmcgZ29lcyEKICNkZWZpbmUgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKICAgICBBU1NFUlQocHRyKQogI2RlZmluZSBBU1NF
UlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KSAvLyBBbnl0aGluZyBnb2VzIQpAQCAtNTIsNyAr
NTUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIApAQCAtNjAsMTcgKzYzLDE5IEBAIGVudW0gT3Bjb2RlSUQg
OiB1bnNpZ25lZDsKIC8vCiAvLyBGdW5jdGlvblB0ciBzaG91bGQgYmUgdXNlZCB0byB3cmFwIHBv
aW50ZXJzIHRvIEMvQysrIGZ1bmN0aW9ucyBpbiBKU0MKIC8vIChwYXJ0aWN1bGFybHksIHRoZSBz
dHViIGZ1bmN0aW9ucykuCit0ZW1wbGF0ZTxQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnPgog
Y2xhc3MgRnVuY3Rpb25QdHIgewogcHVibGljOgogICAgIEZ1bmN0aW9uUHRyKCkgeyB9CisgICAg
RnVuY3Rpb25QdHIoc3RkOjpudWxscHRyX3QpIHsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVy
blR5cGUoKnZhbHVlKShBcmd1bWVudHMuLi4pLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFn
KQotICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkK
KyAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSkKKyAgICAg
ICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFnPih2YWx1ZSkpCiAgICAgewot
ICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CisgICAgICAgIGFzc2VydElzTnVs
bE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJ
c05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5URVIobV92
YWx1ZSk7CiAgICAgfQogCiAvLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVhdCBmdW5jdGlvbnMg
d2l0aCBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwpAQCAtNzgsMTIgKzgzLDEyIEBA
IHB1YmxpYzoKICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9X
UykKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KLSAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKENERUNMICp2YWx1ZSkoQXJndW1lbnRz
Li4uKSwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKLSAgICAgICAgOiBtX3ZhbHVlKHRh
Z0NGdW5jdGlvblB0cjx2b2lkKj4odmFsdWUsIHRhZykpCisgICAgRnVuY3Rpb25QdHIoUmV0dXJu
VHlwZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4uLikpCisgICAgICAgIDogbV92YWx1ZSh0YWdD
RnVuY3Rpb25QdHI8dm9pZCosIHRhZz4odmFsdWUpKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
RnVuY3Rpb25QdHIodmFsdWUpOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cih2
YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3Zh
bHVlKTsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICAg
ICAgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAog
I2VuZGlmIC8vIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQpA
QCAtOTEsNTQgKzk2LDc0IEBAIHB1YmxpYzoKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FM
TF9DQUxMSU5HX0NPTlZFTlRJT04pCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShGQVNU
Q0FMTCAqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcp
Ci0gICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQor
ICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoRkFTVENBTEwgKnZhbHVlKShBcmd1bWVudHMuLi4p
KQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCB0YWc+KHZhbHVlKSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKKyAgICAgICAgYXNz
ZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIodmFsdWUpOwogICAgICAgICBQb2lzb25lZE1hc21QdHI6
OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKICAgICB9CiAKICNlbmRpZiAvLyBDT01QSUxFUl9TVVBQT1JUUyhGQVNU
Q0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZSAmJiAhc3RkOjppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFB0
clR5cGU+Ojp0eXBlPjo6dmFsdWU+PgotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKFB0clR5cGUg
dmFsdWUsIFB0clRhZyB0YWcpCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoUHRyVHlwZSB2YWx1
ZSkKICAgICAgICAgLy8gVXNpbmcgYSBDLWN0eWxlIGNhc3QgaGVyZSB0byBhdm9pZCBjb21waWxl
ciBlcnJvciBvbiBSVlRDOgogICAgICAgICAvLyBFcnJvcjogICM2OTQ6IHJlaW50ZXJwcmV0X2Nh
c3QgY2Fubm90IGNhc3QgYXdheSBjb25zdCBvciBvdGhlciB0eXBlIHF1YWxpZmllcnMKICAgICAg
ICAgLy8gKEkgZ3Vlc3Mgb24gUlZUQyBmdW5jdGlvbiBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50
IGNvbnN0bmVzcyB0byBHQ0MvTVNWQz8pCi0gICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqLCB0YWc+KHZhbHVlKSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRy
KHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIodmFsdWUpOwogICAg
ICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9O
VUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICBleHBsaWNp
dCBGdW5jdGlvblB0cihGdW5jdGlvblB0ciBvdGhlciwgUHRyVGFnIHRhZykKLSAgICAgICAgOiBt
X3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob3RoZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
dGFnKSkKKyAgICBleHBsaWNpdCBGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
Pik7CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+CisgICAgRnVuY3Rpb25QdHI8b3Ro
ZXJUYWc+IHJldGFnZ2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1bmN0aW9u
UHRyKG90aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBQb2lzb25lZE1hc21QdHI6
OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CisgICAgICAgIGlmICghbV92YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cjxvdGhlclRhZz4oKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRy
PG90aGVyVGFnPigqdGhpcyk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKTsKLQogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgY29u
c3QKICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZCht
X3ZhbHVlKTsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
UHRyVGFnIG5ld1RhZz4KKyAgICB2b2lkKiByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZCht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjx0YWcsIG5ld1RhZz4obV92YWx1
ZSk7CisgICAgfQorCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV92YWx1ZTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFs
dWU7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGdW5jdGlvblB0ciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBGdW5jdGlvblB0ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgIT0g
b3RoZXIubV92YWx1ZTsgfQorCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRh
Zz4KKyAgICBleHBsaWNpdCBGdW5jdGlvblB0cihjb25zdCBGdW5jdGlvblB0cjxvdGhlclRhZz4m
IG90aGVyKQorICAgICAgICA6IG1fdmFsdWUocmV0YWdDb2RlUHRyPG90aGVyVGFnLCB0YWc+KG90
aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKQorICAgIHsKKyAgICAgICAgUG9pc29uZWRNYXNtUHRy
Ojphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9W
QUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCogbV92YWx1ZSB7
IG51bGxwdHIgfTsKKworICAgIHRlbXBsYXRlPFB0clRhZz4gZnJpZW5kIGNsYXNzIEZ1bmN0aW9u
UHRyOwogfTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YoRnVuY3Rpb25QdHIpID09IHNpemVvZih2
b2lkKiksICIiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4pID09IHNpemVvZih2b2lkKiksICIiKTsKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhCVUlM
VElOX0lTX1RSSVZJQUxMWV9DT1BZQUJMRSkKLXN0YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlf
Y29weWFibGUoRnVuY3Rpb25QdHIpLCAiIik7CitzdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5
X2NvcHlhYmxlKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pLCAiIik7CiAjZW5kaWYKIAog
Ly8gUmV0dXJuQWRkcmVzc1B0cjoKQEAgLTE1OCw4ICsxODMsOSBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgZXhwbGlj
aXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0ciBmdW5jdGlvbikKLSAgICAgICAgOiBtX3Zh
bHVlKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rp
b24pCisgICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKSkKICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNO
b3RQb2lzb25lZChtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiht
X3ZhbHVlKTsKQEAgLTE4Myw5ICsyMDksMTYgQEAgcHJpdmF0ZToKIC8vIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjoKIC8vCiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc2hvdWxkIGJlIHVzZWQgdG8g
d3JhcCBwb2ludGVycyB0byBKSVQgZ2VuZXJhdGVkIGNvZGUuCi1jbGFzcyBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgeworY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZSB7Citwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIHZvaWQgZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2
b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpOwor
fTsKKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZSB7CiBwdWJsaWM6Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCkgeyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkgPSBkZWZh
dWx0OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3ZhbHVl
KG51bGxwdHIpIHsgfQogCiAgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHZvaWQq
IHZhbHVlKQogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtMTk1LDYgKzIyOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogI2VuZGlmCiAgICAgeworICAgICAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgodmFsdWUsIHRhZyk7CiAgICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25l
ZCgpOwogICAgICAgICBBU1NFUlQodmFsdWUpOwogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtMjA3
LDE3ICsyNDEsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAg
ICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUih2YWx1ZSk7CisgICAgICAgIGFzc2VydElz
VGFnZ2VkV2l0aCh2YWx1ZSwgdGFnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
c3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBQb2lzb25lZE1hc21QdHIodmFsdWUpOwog
ICAgICAgICByZXN1bHQubV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjcmVh
dGVMTEludENvZGVQdHIoT3Bjb2RlSUQgY29kZUlkKTsKLQogICAgIGV4cGxpY2l0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihSZXR1cm5BZGRyZXNzUHRyIHJhKQotICAgICAgICA6IG1fdmFsdWUocmEu
dmFsdWUoKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NvZGVQdHI8dGFnPihyYS52YWx1ZSgpKSkK
ICAgICB7CisgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHJhLnZhbHVlKCkpOwogICAgICAgICBB
U1NFUlQocmEudmFsdWUoKSk7CiAgICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgpOwog
ICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUudW5wb2lzb25lZCgpKTsK
QEAgLTIyNSw5ICsyNTksMTIgQEAgcHVibGljOgogCiAgICAgUG9pc29uZWRNYXNtUHRyIHBvaXNv
bmVkUHRyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIGNvbnN0CisgICAg
dGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFn
PiByZXRhZ2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyKGV4ZWN1dGFi
bGVBZGRyZXNzKCksIG9sZFRhZywgbmV3VGFnKSk7CisgICAgICAgIGlmICghbV92YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPigpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz46OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPG5ld1RhZz4oKSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgpAQCAtMjM2LDYgKzI3MywyMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgpOwogICAgICAgICByZXR1
cm4gbV92YWx1ZS51bnBvaXNvbmVkPFQ+KCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCA9IHZvaWQqPgorICAgIFQgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKKyAgICAgICAgcmV0dXJu
IHVudGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUudW5wb2lzb25lZCgpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCByZXRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fdmFsdWUuYXNz
ZXJ0SXNQb2lzb25lZCgpOworICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPFQsIHRhZywgbmV3
VGFnPihtX3ZhbHVlLnVucG9pc29uZWQoKSk7CisgICAgfQorCiAjaWYgQ1BVKEFSTV9USFVNQjIp
CiAgICAgLy8gVG8gdXNlIHRoaXMgcG9pbnRlciBhcyBhIGRhdGEgYWRkcmVzcyByZW1vdmUgdGhl
IGRlY29yYXRpb24uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgpAQCAtMjUxLDcg
KzMwMyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fdmFsdWUuYXNzZXJ0SXNQb2lzb25l
ZCgpOwogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUgPyByZW1vdmVDb2RlUHRyVGFnKG1fdmFs
dWUudW5wb2lzb25lZCgpKSA6IG51bGxwdHIpOworICAgICAgICByZXR1cm4gdW50YWdDb2RlUHRy
PFQsIHRhZz4obV92YWx1ZS51bnBvaXNvbmVkKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yODEs
MTAgKzMzMywxMyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
PSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlPj4KICAgICBv
cGVyYXRvciBUKCkgPSBkZWxldGU7CiAKLSAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFy
KiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCisgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3Qg
Y2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBk
YXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9CisKICAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CiAgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKICAgICAKQEAgLTMxMCw5ICszNjUsMTAgQEAgcHJpdmF0
ZToKICAgICBQb2lzb25lZE1hc21QdHIgbV92YWx1ZTsKIH07CiAKK3RlbXBsYXRlPFB0clRhZyB0
YWc+CiBzdHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaCB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBwdHIpIHsgcmV0dXJuIHB0ci5o
YXNoKCk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYikKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiYgcHRyKSB7IHJldHVybiBw
dHIuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4mIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBiKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9CkBAIC0zMjQsMjMgKzM4MCwyOSBAQCBz
dHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaCB7CiAvLyBBIHJlZmVyZW5jZSB0byBhIHNl
Y3Rpb24gb2YgSklUIGdlbmVyYXRlZCBjb2RlLiAgQSBDb2RlUmVmIGNvbnNpc3RzIG9mIGEKIC8v
IHBvaW50ZXIgdG8gdGhlIGNvZGUsIGFuZCBhIHJlZiBwb2ludGVyIHRvIHRoZSBwb29sIGZyb20g
d2l0aGluIHdoaWNoIGl0CiAvLyB3YXMgYWxsb2NhdGVkLgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2UgeworcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERp
c2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFt
JiBvdXQpOworICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5nIGRpc2Fzc2VtYmx5KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCk7Cit9OworCit0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWZCYXNlIHsKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBwcml2YXRl
IGJlY2F1c2UgaXQncyBkYW5nZXJvdXMgZW5vdWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9mIGl0CiAg
ICAgLy8gdG8gYmUgZWFzeSB0byBmaW5kIC0gaGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUgbWV0aG9k
IGJlbG93LgotICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cikKKyAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZVB0cikKICAgICAgICAgOiBtX2NvZGVQdHIoY29k
ZVB0cikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NvZGVQdHIpOwogICAgIH0KIAogcHVibGlj
OgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpCi0gICAgewotICAgIH0KKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKSA9IGRlZmF1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYo
UmVmPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+JiYgZXhlY3V0YWJsZU1lbW9yeSwgUHRyVGFnIHRh
ZykKLSAgICAgICAgOiBtX2NvZGVQdHIodGFnQ29kZVB0cihleGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpLCB0YWcpKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihSZWY8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4mJiBleGVjdXRhYmxlTWVtb3J5KQorICAgICAgICA6IG1fY29kZVB0cih0YWdDb2Rl
UHRyPHRhZz4oZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSkpCiAgICAgICAgICwgbV9leGVjdXRh
YmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9yeSkpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CkBAIC0zNTEsMjcgKzQxMywzMSBA
QCBwdWJsaWM6CiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNv
ZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBh
bGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCiAgICAg
Ly8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyKQorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGVQdHIpCiAgICAgewogICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvZGVQdHIpOwogICAgIH0KICAgICAKLSAg
ICAvLyBIZWxwZXIgZm9yIGNyZWF0aW5nIHNlbGYtbWFuYWdlZCBjb2RlIHJlZnMgZnJvbSBMTElu
dC4KLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZUxMSW50Q29kZVJlZihP
cGNvZGVJRCBjb2RlSWQpOwotCiAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJs
ZU1lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5
LmdldCgpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNv
bnN0CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jb2RlUHRyOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciByZXRhZ2dlZENvZGUoUHRyVGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZykgY29uc3QKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdU
YWc+IHJldGFnZ2VkQ29kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlUHRy
LnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxuZXdUYWc+IHJldGFnZ2VkKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVQdHIucmV0YWdnZWQob2xkVGFnLCBu
ZXdUYWcpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG5ld1RhZz4oKnRo
aXMpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKQEAgLTM4MSwyMiArNDQ3LDQz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2l6ZUluQnl0
ZXMoKTsKICAgICB9CiAKLSAgICBib29sIHRyeVRvRGlzYXNzZW1ibGUoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0OworICAgIGJvb2wgdHJ5VG9EaXNhc3Nl
bWJsZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKHJldGFnZ2VkQ29kZTxEaXNhc3Nl
bWJseVB0clRhZz4oKSwgc2l6ZSgpLCBwcmVmaXgsIG91dCk7CisgICAgfQogICAgIAotICAgIGJv
b2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CisgICAg
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGUocmV0YWdnZWRDb2RlPERpc2Fzc2Vt
Ymx5UHRyVGFnPigpLCBzaXplKCksIHByZWZpeCk7CisgICAgfQogICAgIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIENTdHJpbmcgZGlzYXNzZW1ibHkoKSBjb25zdDsKKyAgICBDU3RyaW5nIGRpc2Fz
c2VtYmx5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlOjpkaXNhc3NlbWJseShyZXRhZ2dlZENvZGU8RGlzYXNzZW1ibHlQdHJUYWc+KCksIHNp
emUoKSk7CisgICAgfQogICAgIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fY29kZVB0cjsgfQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIG1fY29kZVB0ci5kdW1wV2l0aE5hbWUoIkNvZGVSZWYiLCBvdXQpOworICAgIH0K
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jb2RlUHRyOworICAgIHRl
bXBsYXRlPFB0clRhZyBvdGhlclRhZz4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQorICAgICAgICA6
IG1fY29kZVB0cihvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3M8dGFnPigpKQorICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShvdGhlckNvZGVS
ZWYubV9leGVjdXRhYmxlTWVtb3J5KQorICAgIHsgfQorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBt
X2V4ZWN1dGFibGVNZW1vcnk7CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY7CiB9OwogCi1pbmxpbmUgRnVuY3Rpb25QdHI6OkZ1bmN0aW9u
UHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgoraW5s
aW5lIEZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IHB0cikKICAgICA6IG1fdmFsdWUocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpCiB7CiAgICAg
UG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwpAQCAtNDA3LDEx
ICs0OTQsMTEgQEAgaW5saW5lIEZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0cihNYWNyb0FzcwogbmFt
ZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
LXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PiB7Ci0gICAgdHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2ggSGFzaDsKK3Rl
bXBsYXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4+IHsKKyAgICB0eXBlZGVmIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRySGFzaDx0YWc+IEhhc2g7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI+IHsgfTsKK3RlbXBsYXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IEhhc2hUcmFpdHM8
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0
czxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+PiB7IH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Mzk1LDEyICszMzk1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKHJlYXNv
bik7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkNhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcg
bG9jYXRpb25UYWc+CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2Vt
Ymxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpLCBDb2RlUHRyVGFnKTsK
KyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4ocmVpbnRlcnByZXRfY2FzdDx2
b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9u
KCkpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2Nh
dGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9u
KQorICAgIHRlbXBsYXRlPFB0clRhZyBzdGFydFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3Rh
dGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsPHN0YXJ0VGFnPiBpbnN0
cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAg
ICB7CiAgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQpA
QCAtMzQxOSw0NCArMzQyMSw1MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwz
MikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBy
ZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2Rl
TG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBz
dGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlv
bkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1
Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAg
ICAgTUlQU0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvTW92ZShpbnN0cnVjdGlvblN0YXJ0LmRhdGFM
b2NhdGlvbigpLCBpbW1UZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihpbml0aWFs
VmFsdWUpICYgMHhmZmZmKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwg
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIGludDMyX3QpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGlu
dDMyX3QpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCwgQWRkcmVzcywgdm9pZCopCisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRy
ZXNzLCB2b2lkKikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNh
bGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVz
dGluYXRpb24pCiAgICAgewogICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRh
ZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8
Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewog
ICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KQEAgLTM0NjgsNyArMzQ3OCw4
IEBAIHByaXZhdGU6CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRp
YyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rp
b24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2
b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewog
ICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCiAgICAgICAgICAgICBNSVBT
QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsMTcgKzI5OCwxOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNG
bG9hdGluZ1BvaW50VHJ1bmNhdGUoKSB7IHJldHVybiBpc1NTRTJQcmVzZW50KCk7IH0KICAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgeyByZXR1cm4gaXNTU0UyUHJl
c2VudCgpOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkgeyBy
ZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9Ci0gICAgCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJl
YWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKworICAgIHRlbXBsYXRlPFB0clRh
ZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8
cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBj
YWxsKQogICAgIHsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQzMl90Kj4oY2FsbC5kYXRhTG9jYXRpb24oKSlbLTFdOwotICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGNhbGwuZGF0YUxvY2F0aW9uKCkpICsgb2Zmc2V0KSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYWxsLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBs
YWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0g
ICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFi
ZWwpCiAgICAgewogICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwogICAgICAgICBj
b25zdCBpbnQgbW9kUk1CeXRlcyA9IDE7CkBAIC0zMTcsOCArMzE5LDkgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAg
ICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAg
IAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIGNvbnN0IGludCBvcGNvZGVC
eXRlcyA9IDE7CiAgICAgICAgIGNvbnN0IGludCBtb2RSTUJ5dGVzID0gMTsKQEAgLTMyOCw4ICsz
MzEsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBs
YWNlbWVudFNpemUoKSk7CiAgICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3Rh
bEJ5dGVzKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMiBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBj
b25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwogICAgICAgICBjb25zdCBpbnQgbW9kUk1CeXRlcyA9
IDE7CkBAIC0zMzksMzAgKzM0MywzNSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0b3RhbEJ5
dGVzID49IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CiAgICAgICAgIHJldHVybiBsYWJlbC5s
YWJlbEF0T2Zmc2V0KC10b3RhbEJ5dGVzKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQg
cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCByZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0
cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIHJlZywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsK
ICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fY21wbF9pcl9mb3JjZTMyKGluc3Ry
dWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5pdGlhbFZhbHVlKSwgcmVnKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25M
YWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1
ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBS
ZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFs
dWUpCiAgICAgewogICAgICAgICBBU1NFUlQoIWFkZHJlc3Mub2Zmc2V0KTsKICAgICAgICAgWDg2
QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fY21wbF9pbV9mb3JjZTMyKGluc3RydWN0aW9uU3RhcnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZh
bHVlKSwgMCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxh
YmVsIGluc3RydWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFs
dWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCBpbnQzMl90IGluaXRpYWxW
YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghYWRkcmVzcy5vZmZzZXQpOwogICAgICAgICBY
ODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFy
dC5leGVjdXRhYmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIDAsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxs
LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2Fs
bFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0
aW5hdGlvbikKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0
aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcg
ZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNh
bGxUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgWDg2QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3Rp
bmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KQEAgLTM3MCw3ICszNzksOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCi0gICAgc3Rh
dGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5j
dGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxs
KHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7
CiAgICAgICAgIGlmIChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKICAgICAgICAgICAgIFg4
NkFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIzMDczNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMTIwMyw4ICsxMjAzLDkgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsX21yX2Rpc3A4KGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Us
IGRlc3QpOwogICAgICAgICByZXR1cm4gRGF0YUxhYmVsQ29tcGFjdCh0aGlzKTsKICAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVs
Q29tcGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQorCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25E
YXRhTGFiZWxDb21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCh2YWx1
ZSkpOwogICAgICAgICBBc3NlbWJsZXJUeXBlX1Q6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENv
bXBhY3QuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKQEAgLTM4NzksMTIgKzM4ODAsMTQgQEAgcHVi
bGljOgogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQo
Q29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCkKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhIbHQoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5z
dHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9uU3RhcnQs
IENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAg
WDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxl
QWRkcmVzcygpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4ODQs
OSArMTg4NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1Bv
aW50U3FydCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0
aW5nUG9pbnRBYnMoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgc3RhdGljIEZ1bmN0aW9u
UHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+CisgICAgc3RhdGljIEZ1bmN0aW9u
UHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRh
Zz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihYODZBc3NlbWJsZXI6
OnJlYWRQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NB
TExfUjExKS5kYXRhTG9jYXRpb24oKSksIENvZGVQdHJUYWcpOworICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHI8cmVzdWx0VGFnPihYODZBc3NlbWJsZXI6OnJlYWRQb2ludGVyKGNhbGwuZGF0YUxh
YmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSkp
OwogICAgIH0KIAogICAgIGJvb2wgaGF2ZVNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCkgeyBy
ZXR1cm4gbV9hbGxvd1NjcmF0Y2hSZWdpc3RlcjsgfQpAQCAtMTg5NCw4ICsxODk1LDkgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxh
Y2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVn
aXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJl
bCkKICAgICB7CiAgICAgICAgIGNvbnN0IGludCByZXhCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0
IGludCBvcGNvZGVCeXRlcyA9IDE7CkBAIC0xOTA0LDggKzE5MDYsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CiAgICAg
ICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3RhbEJ5dGVzKTsKICAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2gzMldpdGhQYXRjaE9u
UmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFu
Y2gzMldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsYWJl
bCkKICAgICB7CiAgICAgICAgIGNvbnN0IGludCByZXhCeXRlcyA9IDE7CiAgICAgICAgIGNvbnN0
IGludCBvcGNvZGVCeXRlcyA9IDE7CkBAIC0xOTE0LDM4ICsxOTE3LDQ1IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAg
ICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIobGFiZWwpOwogICAgIH0KIAotICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJl
c3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsYWJl
bCkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGFydE9mQnJhbmNoMzJXaXRoUGF0Y2hPblJlZ2lz
dGVyKGxhYmVsKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5z
dHJ1Y3Rpb25TdGFydCwgQWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQorCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0
aW9uU3RhcnQsIEFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIFg4
NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSks
IHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVs
IGluc3RydWN0aW9uU3RhcnQsIEFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3Ry
dWN0aW9uU3RhcnQsIEFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAg
ICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92bF9pMzJyKGluc3RydWN0aW9uU3RhcnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgaW5pdGlhbFZhbHVlLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJX
aXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwg
dm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0
aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFs
VmFsdWUpCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2
NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRy
VGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikK
ICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFi
ZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBk
ZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0
aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1
bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgWDg2QXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09G
RlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogICAgIH0KQEAgLTE5NjYsNyArMTk3Niw4IEBAIHByaXZhdGU6CiAKICAgICBmcmll
bmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoIWNhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKQogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihj
b2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEp
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDE4ICsxNDQsMTggQEAgYm9vbCBpc1NwZWNpYWxHUFIoTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdAogfQogI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29tcGlsZShHZW5lcmF0b3ImJiBnZW5lcmF0ZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBjb21waWxlKEdlbmVyYXRvciYmIGdlbmVyYXRlKQogewogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUoaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBudWxscHRyKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBKSVRDb2RlUHRyVGFnLCAidGVzdG1hc20gY29tcGlsYXRpb24iKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAidGVzdG1hc20gY29tcGlsYXRp
b24iKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgot
VCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCitUIGludm9rZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9
IHVudGFnQ0Z1bmN0aW9uUHRyKGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENv
ZGVQdHJUYWcpOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25Q
dHI8SlNFbnRyeVB0clRhZz4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAg
VCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRz
Li4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMu
Li4pOwogfQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgdGVzdFByb2JlTW9kaWZpZXNQcm9ncmFt
Q291bnRlcigpCiAgICAgdW5zaWduZWQgcHJvYmVDYWxsQ291bnQgPSAwOwogICAgIGJvb2wgY29u
dGludWF0aW9uV2FzUmVhY2hlZCA9IGZhbHNlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvbnRpbnVhdGlvbiA9IGNvbXBpbGUoWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb250aW51YXRpb24gPSBjb21waWxl
KFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB3ZSBy
ZWFjaGVkIHRoZSBjb250aW51YXRpb24uCiAgICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlOjpD
b250ZXh0JikgewogICAgICAgICAgICAgcHJvYmVDYWxsQ291bnQrKzsKQEAgLTYxMCw3ICs2MTAs
NyBAQCB2b2lkIHRlc3RQcm9iZU1vZGlmaWVzUHJvZ3JhbUNvdW50ZXIoKQogICAgICAgICAvLyBX
cml0ZSBleHBlY3RlZCB2YWx1ZXMgaW50byB0aGUgcmVnaXN0ZXJzLgogICAgICAgICBqaXQucHJv
YmUoWyZdIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgcHJvYmVDYWxs
Q291bnQrKzsKLSAgICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSB1bnRhZ0NvZGVQdHIoY29u
dGludWF0aW9uLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSB1bnRhZ0NvZGVQdHIoY29udGludWF0aW9uLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfSk7CiAK
ICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAotQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gYnlwcm9kdWN0
cykKK0NvbXBpbGF0aW9uOjpDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21w
aWxhdGlvblB0clRhZz4gY29kZVJlZiwgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+
IGJ5cHJvZHVjdHMpCiAgICAgOiBtX2NvZGVSZWYoY29kZVJlZikKICAgICAsIG1fYnlwcm9kdWN0
cyhXVEZNb3ZlKGJ5cHJvZHVjdHMpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21waWxhdGlvbi5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21waWxhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsMTcgKzQ4LDE3IEBA
IGNsYXNzIENvbXBpbGF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVi
bGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21waWxhdGlvblB0
clRhZz4sIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29tcGlsYXRpb24oQ29tcGlsYXRpb24mJik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfkNvbXBpbGF0aW9uKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2RlKCk7IH0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZjsgfQorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlUmVmLmNvZGUoKTsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9u
UHRyVGFnPiBjb2RlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CiAgICAgCiAgICAg
Q1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5kaXNhc3NlbWJs
eSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZVJlZjsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21waWxhdGlvblB0clRhZz4gbV9jb2RlUmVm
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBtX2J5cHJvZHVjdHM7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUm
IHByb2MpCiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBudWxscHRyKTsKIAotICAgIHJldHVybiBDb21waWxhdGlvbihGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEpJVENvZGVQdHJUYWcsICJCMzo6Q29tcGlsYXRpb24iKSwgcHJvYy5yZWxl
YXNlQnlwcm9kdWN0cygpKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiQjM6OkNvbXBpbGF0aW9uIiksIHByb2Mu
cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OTksMjAgKzQ5OSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqdW1wVGFibGUgPSBzdGF0aWNf
Y2FzdDxNYWNyb0Fzc2VtYmxlckNvZGVQdHIqPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIpICogdGFibGVTaXplKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAg
ICAgICAgICAgICAgICAgdXNpbmcgSnVtcFRhYmxlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU1N3aXRjaFB0clRhZz47CisgICAgICAgICAgICAgICAgICAgICAgICBKdW1wVGFibGVD
b2RlUHRyKiBqdW1wVGFibGUgPSBzdGF0aWNfY2FzdDxKdW1wVGFibGVDb2RlUHRyKj4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXpl
b2YoSnVtcFRhYmxlQ29kZVB0cikgKiB0YWJsZVNpemUpKTsKKwogICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIGluZGV4ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIHBvaXNvblNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hU
YWJsZVB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKSVRDb2RlUG9pc29uOjprZXkoKSks
IHBvaXNvblNjcmF0Y2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYWJsZSksIHNjcmF0Y2gpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoLCBp
bmRleCwgQ0NhbGxIZWxwZXJzOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQueG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgSlNTd2l0Y2hQdHJUYWcpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBsYWJlbHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcG9w
dWxhdGVkIGJlZm9yZSBlaXRoZXIgbGF0ZSBwYXRocyBvcgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbGluayB0YXNrcyBydW4uCkBAIC01MjEsMTQgKzUyMSwxNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzVW5oYW5kbGVkSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsVGhyb3VnaCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzLmxhc3QoKSwgc3dpdGNoVGFnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBUYWJsZUNvZGVQdHIgZmFsbFRocm91
Z2ggPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KCpsYWJlbHMubGFzdCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHRhYmxlU2l6ZTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqdW1wVGFibGVbaV0gPSBmYWxsVGhyb3VnaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGFiZWxJbmRleCA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdGFibGVJbmRleCA6IGhhbmRsZWRJbmRp
Y2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW3RhYmxl
SW5kZXhdID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHNbbGFiZWxJbmRleCsrXSwgc3dp
dGNoVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVt0
YWJsZUluZGV4XSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4oKmxhYmVs
c1tsYWJlbEluZGV4KytdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1LDkg
QEAgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjb21waWxlUHJvYwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci1UIGludm9rZShNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcHRyLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorVCBpbnZva2UoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEIzQ29tcGlsYXRpb25QdHJUYWc+IHB0ciwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9u
UHRyKHB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsKKyAgICB2b2lkKiBl
eGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEIzQ29tcGlsYXRpb25QdHJUYWc+
KHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4u
LikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRkcmVzcyk7
CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CkBAIC0xMzAzMyw4ICsxMzAz
Myw4IEBAIHZvaWQgdGVzdEludGVycHJldGVyKCkKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIFZlY3RvcjxC
b3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGxhYmVscyA9IHBhcmFtcy5zdWNjZXNzb3JMYWJlbHMo
KTsKIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqdW1wVGFibGUgPSBiaXR3
aXNlX2Nhc3Q8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKj4oCi0gICAgICAgICAgICAgICAgcGFyYW1z
LnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKSAqIGxh
YmVscy5zaXplKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCM0NvbXBp
bGF0aW9uUHRyVGFnPioganVtcFRhYmxlID0gYml0d2lzZV9jYXN0PE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxCM0NvbXBpbGF0aW9uUHRyVGFnPio+KAorICAgICAgICAgICAgICAgIHBhcmFtcy5wcm9j
KCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCM0NvbXBpbGF0
aW9uUHRyVGFnPikgKiBsYWJlbHMuc2l6ZSgpKSk7CiAKICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgIEdQUlJlZyBwb2lzb25TY3Jh
dGNoID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKQEAgLTEzMDQzLDEzICsxMzA0MywxMiBAQCB2b2lk
IHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NChKSVRDb2RlUG9pc29uOjprZXkoKSksIHBvaXNvblNjcmF0Y2gpOwogICAgICAg
ICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoLCBwYXJhbXNb
MF0uZ3ByKCksIENDYWxsSGVscGVyczo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwogICAgICAgICAg
ICAgaml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gpOwotICAgICAgICAgICAgUHRyVGFn
IHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgc3dpdGNoVGFnKTsKKyAgICAgICAgICAgIGpp
dC5qdW1wKHNjcmF0Y2gsIEIzQ29tcGlsYXRpb25QdHJUYWcpOwogCiAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgWyYsIGp1bXBUYWJsZSwgbGFiZWxzXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsYWJlbHMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICAgICAganVtcFRh
YmxlW2ldID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHNbaV0sIHN3aXRjaFRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbaV0gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8QjNDb21waWxhdGlvblB0clRhZz4oKmxhYmVsc1tpXSk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwogICAgIApAQCAtMTMyOTgsMTEgKzEzMjk3LDExIEBAIHZvaWQgdGVzdEVu
dHJ5U3dpdGNoU2ltcGxlKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHBy
b2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5l
bnRyeXBvaW50TGFiZWwoMCksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEp
LCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpLCBKSVRDb2RlUHRyVGFn
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbE9uZSA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgwKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4g
bGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJv
Yy5lbnRyeXBvaW50TGFiZWwoMSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRp
b25QdHJUYWc+IGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlv
blB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQdHJUYWcs
ICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21w
aWxhdGlvblB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21w
aWxhdGlvblB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOwogCiAgICAgQ0hFQ0soaW52b2tl
PGludD4obGFiZWxPbmUsIDEsIDIpID09IDMpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVs
VHdvLCAxLCAyKSA9PSAtMSk7CkBAIC0xMzMzMSwxMSArMTMzMzAsMTEgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVy
YXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cHJvYy5lbnRyeXBvaW50TGFiZWwoMCksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDEpLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpLCBKSVRDb2Rl
UHRyVGFnKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJl
bE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgwKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0
clRhZz4gbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRh
Zz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29t
cGlsYXRpb25QdHJUYWc+IGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21w
aWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQ
dHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
QjNDb21waWxhdGlvblB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
QjNDb21waWxhdGlvblB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOwogCiAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4obGFiZWxPbmUsIDEsIDIpLCAzKTsKICAgICBDSEVDS19FUShpbnZva2U8
aW50PihsYWJlbFR3bywgMSwgMiksIDMpOwpAQCAtMTM0MTgsMTEgKzEzNDE3LDExIEBAIHZvaWQg
dGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
ICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
bnVsbHB0cik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCksIEpJVENvZGVQdHJUYWcpOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50
cnlwb2ludExhYmVsKDEpLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIp
LCBKSVRDb2RlUHRyVGFnKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRy
VGFnPiBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFn
Pihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21w
aWxhdGlvblB0clRhZz4gbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxh
dGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IEpJVENvZGVQdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8QjNDb21waWxhdGlvblB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOwogCiAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxPbmUsIDEsIDIsIDEwKSwgMyk7CiAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4obGFiZWxUd28sIDEsIDIsIDEwKSwgLTEpOwpAQCAtMTM1MzUsMTEg
KzEzNTM0LDExIEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzQW5kTm8KICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFi
ZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCksIEpJ
VENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpLCBKSVRDb2RlUHRyVGFnKTsKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b2MuZW50cnlwb2ludExhYmVsKDIpLCBKSVRDb2RlUHRyVGFnKTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxUd28gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVGhyZWUg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBv
aW50TGFiZWwoMikpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24i
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21waWxhdGlvblB0clRhZz4gY29kZVJl
ZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgInRlc3Ri
MyBjb21waWxhdGlvbiIpOwogCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxPbmUsIDEs
IDIsIDEwLCBmYWxzZSksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsVHdvLCAx
LCAyLCAxMCwgZmFsc2UpLCAtMSk7CkBAIC0xMzYxMywxMCArMTM2MTIsMTAgQEAgdm9pZCB0ZXN0
RW50cnlTd2l0Y2hMb29wKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHBy
b2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5l
bnRyeXBvaW50TGFiZWwoMCksIEpJVENvZGVQdHJUYWcpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEp
LCBKSVRDb2RlUHRyVGFnKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRy
VGFnPiBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxCM0NvbXBpbGF0aW9uUHRyVGFn
Pihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21w
aWxhdGlvblB0clRhZz4gbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxh
dGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQdHJU
YWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjND
b21waWxhdGlvblB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjND
b21waWxhdGlvblB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOwogCiAgICAgQ0hFQ0soaW52
b2tlPGludD4obGFiZWxPbmUsIDApID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVs
T25lLCA0MikgPT0gNDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDEw
ICs3NCwxMCBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcChDb2RlJiBjb2RlLCBQcmluCiAgICAg
YXV0byBkdW1wQXNtUmFuZ2UgPSBbJl0gKENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnRMYWJlbCwg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBlbmRMYWJlbCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGFydExhYmVsLmlzU2V0KCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbmRMYWJlbC5pc1Nl
dCgpKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc3RhcnRMYWJlbCk7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihlbmRMYWJlbCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKSA+PSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIGRpc2Fz
c2VtYmxlKHN0YXJ0LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJl
c3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygp
KSwgYXNtUHJlZml4LCBvdXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJs
eVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+
KHN0YXJ0TGFiZWwpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRh
Zz4gZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPihlbmRMYWJl
bCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZC5kYXRhTG9jYXRpb248dWludHB0cl90Pigp
ID49IHN0YXJ0LmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkpOworICAgICAgICBkaXNhc3NlbWJs
ZShzdGFydCwgZW5kLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkgLSBzdGFydC5kYXRhTG9jYXRp
b248dWludHB0cl90PigpLCBhc21QcmVmaXgsIG91dCk7CiAgICAgfTsKIAogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2Jsb2NrcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTMg
QEAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29tcGlsZQogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBK
SVRDb2RlUHRyVGFnLCAidGVzdGFpciBjb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXByb2R1
Y3RzKCkpOworICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25Q
dHJUYWcsICJ0ZXN0YWlyIGNvbXBpbGF0aW9uIiksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KIFQgaW52
b2tlKGNvbnN0IEIzOjpDb21waWxhdGlvbiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
IHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyKGNvZGUu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIoY29kZS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgQjNDb21waWxhdGlvblB0clRhZyk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1
bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFk
ZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MTgsMTQgKzgxOCwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHRoaXMtPmFz
PEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENhbGxMb2NhdGlv
bnMoCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9u
Q2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdFBhdGhDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJU
YWc+KHNsb3dQYXRoQ2FsbCkpLAorICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYWRk
cmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oZmFzdFBhdGhDYWxsKSk7CiAKLSAg
ICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZt
KTsKICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBB
U1NFUlQobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nl
c3NvckdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1
c3RvbUFjY2Vzc29yU2V0dGVyKTsKQEAgLTg1NSwxMCArODU0LDkgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaml0
LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsK
IAotICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoR2V0dGVyU2V0dGVyUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwo
Y2FsbFRhZyk7CisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2Fs
bCwgRnVuY3Rpb25QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5tX2N1c3Rv
bUFjY2Vzc29yLm9wYXF1ZSwgY2FsbFRhZykpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhvcGVyYXRpb25DYWxsLCB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1f
Y3VzdG9tQWNjZXNzb3IpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVy
KQpAQCAtMTAwMCwxMiArOTk4LDExIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewogICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpPihiYXNl
R1BSKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFB0clRhZyBj
YWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5j
YWxsKGNhbGxUYWcpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25DYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0
aW9uUHRyKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBjYWxsVGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0
aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKQEAgLTEwMTMsMTIgKzEwMTAsMTEgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRv
R3Jvd1Byb3BlcnR5U3RvcmFnZSk+KAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHIo
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgY2FsbFRh
ZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSkp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNu
aXBwZXRQYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPEZ1bmN0aW9uVHlwZT4oc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1f
YXJndW1lbnRzKS4uLik7CiAKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRp
b25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9w
ZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGF1dG8g
ZnVuY3Rpb24gPSBtX2Z1bmN0aW9uOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykpOworICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oZnVu
Y3Rpb24pKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaml0LnNldHVwUmVzdWx0cyhtX3Jlc3Vs
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmxpbmUgSklUQXJyYXlN
b2RlIGppdEFycmF5TW9kZUZvclN0cnVjCiBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICBCeVZhbElu
Zm8oKSB7IH0KIAotICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9j
YXRpb25KdW1wIG5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlciwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb05leHRIb3RQYXRoLCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKQorICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25KdW1wPEpTRW50cnlQdHJUYWc+IG5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0Vu
dHJ5UHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3Qg
YmFkVHlwZUp1bXBUb05leHRIb3RQYXRoLCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
KQogICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBub3RJ
bmRleEp1bXAobm90SW5kZXhKdW1wKQogICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1w
KQpAQCAtMjQ0LDkgKzI0NCw5IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgIH0KIAogICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCBub3RJbmRleEp1bXA7
Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBleGNlcHRpb25IYW5kbGVyOworICAgIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4g
bm90SW5kZXhKdW1wOworICAgIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gYmFkVHlw
ZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhj
ZXB0aW9uSGFuZGxlcjsKICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkg
bW9kZSB0aGF0IHdhcyBiYWtlZCBpbnRvIHRoZSBpbmxpbmUgSklUIGNvZGUuCiAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDI1ICs5NywyNSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNP
bkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbk5lYXJDYWxsIENhbGxMaW5rSW5mbzo6Y2FsbFJl
dHVybkxvY2F0aW9uKCkKK0NvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IENhbGxM
aW5rSW5mbzo6Y2FsbFJldHVybkxvY2F0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNE
aXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKG1fY2FsbFJldHVybkxv
Y2F0aW9uT3JQYXRjaGFibGVKdW1wLCBSZWd1bGFyKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9u
TmVhckNhbGw8SlNFbnRyeVB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1
bXAsIFJlZ3VsYXIpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wIENhbGxMaW5rSW5mbzo6cGF0Y2hh
YmxlSnVtcCgpCitDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJUYWc+IENhbGxMaW5rSW5mbzo6
cGF0Y2hhYmxlSnVtcCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUoKSA9PSBEaXJl
Y3RUYWlsQ2FsbCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAobV9jYWxsUmV0dXJuTG9j
YXRpb25PclBhdGNoYWJsZUp1bXApOworICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wPEpTRW50
cnlQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKIH0KIAotQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIENhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkKK0NvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0VudHJ5UHRyVGFnPiBDYWxsTGlua0luZm86OmhvdFBhdGhC
ZWdpbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwotICAgIHJldHVybiBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIobV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQpOwor
ICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNFbnRyeVB0clRhZz4obV9ob3RQ
YXRoQmVnaW5PclNsb3dQYXRoU3RhcnQpOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbCBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Q2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc0Rp
cmVjdCgpKTsKICAgICByZXR1cm4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjUsOSArMTY1LDkgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHZvaWQgc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQsCi0gICAgICAgIENvZGVMb2Nh
dGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcikKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLAorICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3Rh
cnQsCisgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhP
dGhlcikKICAgICB7CiAgICAgICAgIG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1w
ID0gY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwogICAgICAgICBtX2hvdFBhdGhC
ZWdpbk9yU2xvd1BhdGhTdGFydCA9IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKQEAgLTE4
MSwxMiArMTgxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAg
ICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbFJldHVybkxvY2F0aW9uKCk7Ci0g
ICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wKCk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIGhvdFBhdGhCZWdpbigpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRo
U3RhcnQoKTsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBjYWxsUmV0
dXJuTG9jYXRpb24oKTsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJUYWc+IHBhdGNo
YWJsZUp1bXAoKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNFbnRyeVB0clRhZz4g
aG90UGF0aEJlZ2luKCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gc2xv
d1BhdGhTdGFydCgpOwogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyKCkK
KyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBob3RQYXRoT3RoZXIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1faG90UGF0aE90aGVyOwogICAgIH0KQEAgLTMyNyw5ICsz
MjcsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLSAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbCBtX2hvdFBhdGhPdGhlcjsKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHRhZ2dl
ZCB3aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5zdGVhZCBvZiBKU0VudHJ5VGFnLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3MTIKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxl
SnVtcDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2hvdFBhdGhCZWdp
bk9yU2xvd1BhdGhTdGFydDsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFn
PiBtX2hvdFBhdGhPdGhlcjsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29k
ZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1
dGFibGU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRI
YW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7CiAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
ICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
TExJbnQ6OmdldENvZGVQdHIob3BfY2F0Y2gpKSkpOworICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KExMSW50OjpnZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCku
cmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKSkpOwogI2Vsc2UKICAgICAgICAgICAg
ICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyKTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1czsKICAgICAgICAgICAgICAgICBKU0Z1bmN0
aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgUHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JH
ZXR0ZXI7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0
aW9uPiBkb21BdHRyaWJ1dGU7CiAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBl
KCkpIHsKQEAgLTI3OCw3ICsyNzgsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYml0d2lzZV9jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5jdXN0b21BY2Nlc3NvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tQWNj
ZXNzb3JHZXR0ZXIgPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jdXN0b21B
Y2Nlc3NvcigpOwogICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBhY2Nlc3MuYXM8
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21BdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkb21BdHRyaWJ1dGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjMw
NzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIEdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCgKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMsCiAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sCi0gICAgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tQWNjZXNzb3JHZXR0ZXIsCisgICAgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlciwKICAgICBzdGQ6Om9wdGlvbmFsPERP
TUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZSkKICAgICA6IG1fc3RydWN0dXJlU2V0
KHN0cnVjdHVyZVNldCkKICAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKQEAgLTE1
NSw3ICsxNTUsNyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAg
ICAgaWYgKG1faW50cmluc2ljRnVuY3Rpb24pCiAgICAgICAgIG91dC5wcmludCgiLCBpbnRyaW5z
aWMgPSAiLCAqbV9pbnRyaW5zaWNGdW5jdGlvbik7CiAgICAgaWYgKG1fY3VzdG9tQWNjZXNzb3JH
ZXR0ZXIpCi0gICAgICAgIG91dC5wcmludCgiLCBjdXN0b21hY2Nlc3NvcmdldHRlciA9ICIsIFJh
d1BvaW50ZXIoYml0d2lzZV9jYXN0PGNvbnN0IHZvaWQqPihtX2N1c3RvbUFjY2Vzc29yR2V0dGVy
KSkpOworICAgICAgICBvdXQucHJpbnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQ
b2ludGVyKG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAg
IGlmIChtX2RvbUF0dHJpYnV0ZSkgewogICAgICAgICBvdXQucHJpbnQoIiwgZG9tY2xhc3MgPSAi
LCBSYXdQb2ludGVyKG1fZG9tQXR0cmlidXRlLT5jbGFzc0luZm8pKTsKICAgICAgICAgaWYgKG1f
ZG9tQXR0cmlidXRlLT5kb21KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gPSBudWxscHRyLAogICAgICAgICBKU0Z1bmN0aW9u
KiA9IG51bGxwdHIsCi0gICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0
ciwKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3Nvckdl
dHRlciA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3Rh
dGlvbj4gPSBzdGQ6Om51bGxvcHQpOwogCiAgICAgfkdldEJ5SWRWYXJpYW50KCk7CkBAIC02Niw3
ICs2Niw3IEBAIHB1YmxpYzoKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAgICAgSlNGdW5jdGlvbiog
aW50cmluc2ljRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY0Z1bmN0aW9uOyB9
CiAgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljRnVu
Y3Rpb24gPyBtX2ludHJpbnNpY0Z1bmN0aW9uLT5pbnRyaW5zaWMoKSA6IE5vSW50cmluc2ljOyB9
Ci0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CisgICAgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7IH0KICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFu
bm90YXRpb24+IGRvbUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tQXR0cmlidXRlOyB9
CiAKICAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldCgpID09
IGludmFsaWRPZmZzZXQ7IH0KQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiAgICAgSlNGdW5jdGlvbiogbV9pbnRyaW5zaWNGdW5jdGlvbjsKLSAg
ICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOworICAg
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsKICAg
ICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0
dGVyQWNjZQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6Y3JlYXRlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIGJvb2wgdmlhUHJveHks
IFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAorICAgIGJvb2wgdmlhUHJv
eHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsCiAgICAgc3RkOjpv
cHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUsIHN0ZDo6dW5pcXVl
X3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CkBAIC02NSwxNyArNjUsMTcgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEdldHRlclNldHRlcgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5
cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFs
U2V0LCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAg
ICByZXN1bHQtPm1fZG9tQXR0cmlidXRlID0gZG9tQXR0cmlidXRlOwotICAgIHJlc3VsdC0+bV9j
dXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7CisgICAgcmVzdWx0LT5tX2N1c3Rv
bUFjY2Vzc29yID0gY3VzdG9tR2V0dGVyID8gRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihj
dXN0b21HZXR0ZXIpIDogbnVsbHB0cjsKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Jl
YXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jIGN1c3RvbVNldHRlciwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRl
ciwKICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCiB7CiAgICAgQVNTRVJUKHR5cGUgPT0g
U2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21BY2Nl
c3NvclNldHRlcik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIG9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGZhbHNlLCBudWxscHRyLCBjdXN0b21TbG90QmFz
ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKLSAgICByZXN1bHQtPm1fY3VzdG9t
QWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nl
c3NvciA9IGN1c3RvbVNldHRlciA/IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY3VzdG9t
U2V0dGVyKSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIApAQCAt
ODksNyArODksNyBAQCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2NlCiAg
ICAgOiBCYXNlKG90aGVyKQogICAgICwgbV9jdXN0b21TbG90QmFzZShvdGhlci5tX2N1c3RvbVNs
b3RCYXNlKQogewotICAgIG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gb3RoZXIubV9jdXN0b21B
Y2Nlc3Nvci5vcGFxdWU7CisgICAgbV9jdXN0b21BY2Nlc3NvciA9IG90aGVyLm1fY3VzdG9tQWNj
ZXNzb3I7CiAgICAgbV9kb21BdHRyaWJ1dGUgPSBvdGhlci5tX2RvbUF0dHJpYnV0ZTsKIH0KIApA
QCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZHVtcEltcGwo
UHIKICAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21TbG90QmFzZSA9ICIsIFJhd1BvaW50ZXIo
Y3VzdG9tU2xvdEJhc2UoKSkpOwogICAgIGlmIChjYWxsTGlua0luZm8oKSkKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihjYWxsTGlua0luZm8o
KSkpOwotICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRl
cihtX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgIG91dC5wcmludChjb21tYSwgImN1c3Rv
bUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKIH0KIAogdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0
dGVyKiBkb21KSVQsIEdQUlJlZyBiYXNlRm9yR2V0R1BSKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShKSVQpCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRl
ICJQcm94eWFibGVBY2Nlc3NDYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsMTkgKzQ5
LDE5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
Y3JlYXRlKAogICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tR2V0dGVyLAogICAgICAgICBKU09iamVj
dCogY3VzdG9tU2xvdEJhc2UsIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4s
IHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOwogCiAgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hh
aW4+LAotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyA9IG51bGxwdHIsIEpT
T2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworICAgICAgICBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRlciA9IG51bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSA9IG51bGxwdHIpOwogCiAgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYsIENv
bW1hUHJpbnRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgfkdldHRlclNldHRlckFjY2Vzc0Nh
c2UoKTsKIAotICAgIHZvaWQqIGN1c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0
b21BY2Nlc3Nvci5vcGFxdWU7IH0KKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1
c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21BY2Nlc3NvcjsgfQogCiBwcml2
YXRlOgogICAgIEdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBl
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09i
amVjdCogY3VzdG9tU2xvdEJhc2UsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFp
bj4pOwpAQCAtNjksMTEgKzcwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4gbV9jdXN0b21TbG90QmFzZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mbzsKLSAgICB1bmlvbiB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jIHNldHRlcjsKLSAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMg
Z2V0dGVyOwotICAgICAgICB2b2lkKiBvcGFxdWU7Ci0gICAgfSBtX2N1c3RvbUFjY2Vzc29yOwor
ICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9jdXN0b21BY2Nlc3NvcjsKICAgICBz
dGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5k
bGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTQgKzEwOSwxMyBAQCBzdHJ1Y3QgSGFu
ZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CCiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3Qg
VW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUodW5s
aW5rZWRJbmZvKTsKICAgICAgICAgbmF0aXZlQ29kZSA9IGxhYmVsOwotICAgICAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgobmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBuYXRpdmVDb2RlOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG5hdGl2ZUNvZGU7
CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcg
KzEzNSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUKICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxv
Y2F0aW9uKCksIHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUsIEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CiAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVy
LmlzVmFsaWQoKSk7CiAgICAgICAgIGZ1bmN0aW9uKGxpbmtCdWZmZXIpOwotICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvZGVQdHJUYWcsICJJbmxpbmVBY2Nlc3NUeXBlOiAn
JXMnIiwgbmFtZSk7CisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcs
ICJJbmxpbmVBY2Nlc3NUeXBlOiAnJXMnIiwgbmFtZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMjc4LDcgKzI3OCw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFy
cmF5TGVuZ3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCit2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAt
MjkwLDcgKzI5MCw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFN0cnUK
ICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXAsIHRhcmdldCk7CiAKLSAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5l
YXJDb2RlUHRyVGFnLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKKyAg
ICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSW5saW5lQWNjZXNzOiBsaW5r
aW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBn
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKICAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyB2
b2lkIHJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bCk7CisgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYs
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAKICAgICAvLyBUaGlz
IGlzIGhlbHBmdWwgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiBhbiBJQyBvbgogICAgIC8v
IHZhcmlvdXMgcGxhdGZvcm1zLiBXaGVuIGFkZGluZyBhIG5ldyB0eXBlIG9mIElDLCBpbXBsZW1l
bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3Ry
dWN0IE9mZnNldExvY2F0aW9uIHsKICAgICAgICAgaW50MzJfdCBicmFuY2hPZmZzZXQ7CiAjaWYg
RU5BQkxFKEpJVCkKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY3RpT2Zmc2V0OworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4gY3RpT2Zmc2V0OwogI2VuZGlmCiAg
ICAgfTsKIApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgT2Zmc2V0TG9jYXRpb24+IFN0cmluZ09mZnNl
dFRhYmxlOwogICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjdGlEZWZhdWx0OyAvLyBGSVhNRTog
aXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gc3RvcmUgdGhpcy4KKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0aURlZmF1bHQ7IC8vIEZJWE1FOiBpdCBzaG91
bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBzdG9yZSB0aGlzLgogI2VuZGlmCiAKICAgICAgICAgaW5s
aW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUsIGludDMyX3QgZGVm
YXVsdE9mZnNldCkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBjdGlG
b3JWYWx1ZShTdHJpbmdJbXBsKiB2YWx1ZSkKKyAgICAgICAgaW5saW5lIENvZGVMb2NhdGlvbkxh
YmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlGb3JWYWx1ZShTdHJpbmdJbXBsKiB2YWx1ZSkKICAgICAg
ICAgewogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwpAQCAtODEsOCArODEsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7
CiAgICAgICAgIGludDMyX3QgbWluOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbD4gY3RpT2Zmc2V0czsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
Y3RpRGVmYXVsdDsKKyAgICAgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRy
VGFnPj4gY3RpT2Zmc2V0czsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJU
YWc+IGN0aURlZmF1bHQ7CiAjZW5kaWYKIAogICAgICAgICBpbnQzMl90IG9mZnNldEZvclZhbHVl
KGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7CkBAIC05OSw3ICs5OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY3RpT2Zmc2V0cy5ncm93KGJyYW5jaE9mZnNl
dHMuc2l6ZSgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5saW5lIENvZGVMb2Nh
dGlvbkxhYmVsIGN0aUZvclZhbHVlKGludDMyX3QgdmFsdWUpCisgICAgICAgIGlubGluZSBDb2Rl
TG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4gY3RpRm9yVmFsdWUoaW50MzJfdCB2YWx1ZSkK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKHZhbHVlID49IG1pbiAmJiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4odmFsdWUgLSBtaW4pIDwgY3RpT2Zmc2V0cy5zaXplKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN0aU9mZnNldHNbdmFsdWUgLSBtaW5dOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNCArNTAsMTQgQEAgc3RydWN0IExMSW50Q2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUgogICAgIHZvaWQgdW5saW5rKCkKICAgICB7CiAgICAgICAg
IGNhbGxlZS5jbGVhcigpOwotICAgICAgICBtYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOworICAgICAgICBtYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICBpZiAoaXNPbkxpc3QoKSkKICAgICAg
ICAgICAgIHJlbW92ZSgpOwogICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IGNhbGxlZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IGxhc3RTZWVuQ2FsbGVlOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtYWNoaW5lQ29kZVRhcmdldDsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbWFjaGluZUNvZGVUYXJnZXQ7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk5LDExICsxOTksMTAgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVt
aXRFeHBsaWNpdAogICAgICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaml0LT5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShsb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZtX3ZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9uSGFuZGxl
ckNhbGwgPSBqaXQtPmNhbGwodGFnKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAg
ICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9u
SGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpOwor
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgaml0LT5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKG1f
dm0pOwogICAgIH0KQEAgLTUzOSw3ICs1MzgsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBv
bHltb3JwaGljQWNjZXNzCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb09T
UkV4aXRFeGNlcHRpb25IYW5kbGVyLCBvbGRIYW5kbGVyLm5hdGl2ZUNvZGUpOwogCiAgICAgICAg
ICAgICAgICAgSGFuZGxlckluZm8gaGFuZGxlclRvUmVnaXN0ZXIgPSBvbGRIYW5kbGVyOwotICAg
ICAgICAgICAgICAgIGhhbmRsZXJUb1JlZ2lzdGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobWFrZXNoaWZ0Q2F0Y2hIYW5kbGVyLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
KyAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG1ha2VzaGlmdENhdGNoSGFuZGxl
cik7CiAgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIuc3RhcnQgPSBuZXdFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdp
c3Rlci5lbmQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKSArIDE7CiAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKGhhbmRsZXJUb1Jl
Z2lzdGVyKTsKQEAgLTU1OSw4ICs1NTgsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHYXZl
VXA7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0gc3R1Yklu
Zm8uZG9uZUxvY2F0aW9uKCk7Ci0gICAgICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigpOworCiAgICAg
bGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CiAKICAgICBsaW5r
QnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwpA
QCAtNTY4LDggKzU2Nyw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nl
c3MKICAgICBpZiAoUG9seW1vcnBoaWNBY2Nlc3NJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZyhGdWxsQ29kZU9yaWdpbihjb2RlQmxvY2ssIHN0dWJJbmZvLmNvZGVPcmlnaW4pLCAi
OiBHZW5lcmF0aW5nIHBvbHltb3JwaGljIGFjY2VzcyBzdHViIGZvciAiLCBsaXN0RHVtcChjYXNl
cyksICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9D
T0RFX0ZPUigKLSAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGUgPSBG
SU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHVi
Um91dGluZVB0clRhZywKICAgICAgICAgIiVzIiwgdG9DU3RyaW5nKCJBY2Nlc3Mgc3R1YiBmb3Ig
IiwgKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBv
aW50ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgbGlzdER1bXAoY2FzZXMpKS5kYXRhKCkpOwogCiAg
ICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVChraW5kICE9IEdlbmVyYXRlZEZpbmFsQ29kZSk7CiAgICAgfQogICAgIAotICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQoS2luZCBraW5kLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSkK
KyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQogICAgICAgICA6IG1fa2luZChraW5kKQog
ICAgICAgICAsIG1fY29kZShjb2RlKQogICAgIHsKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAotICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZTsgfQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKICAgICBib29sIG1hZGVO
b0NoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gTWFkZU5vQ2hhbmdlczsgfQogICAg
IGJvb2wgZ2F2ZVVwKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEdhdmVVcDsgfQpAQCAtMTIz
LDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgS2luZCBtX2tpbmQ7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29kZTsKICAgICBWZWN0b3I8c3RkOjpwYWlyPElu
bGluZVdhdGNocG9pbnRTZXQmLCBTdHJpbmdGaXJlRGV0YWlsPj4gbV93YXRjaHBvaW50c1RvRmly
ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2
OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0IGJ1ZmZlcmVkU3RydWN0dXJl
czsKICAgICAKICAgICBzdHJ1Y3QgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4K
KyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAv
LyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2Fj
aGVzLCBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbicgY2FjaGVzLgog
ICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwogICAgICAgICB1aW50MzJfdCBpbmxp
bmVTaXplOwogICAgICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2Nh
dGlvbjsKQEAgLTE4NSwxMyArMTg1LDEzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0gcGF0Y2g7
CiAKLSAgICBDb2RlTG9jYXRpb25DYWxsIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCkgeyByZXR1cm4g
cGF0Y2guc3RhcnQuY2FsbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENh
bGxMb2NhdGlvbik7IH0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lTG9jYXRpb24oKSB7IHJl
dHVybiBwYXRjaC5zdGFydC5sYWJlbEF0T2Zmc2V0KHBhdGNoLmlubGluZVNpemUpOyB9Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2gu
c3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7
IH0KLSAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXBGb3JJbigpCisgICAgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0
dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldDxKU0ludGVybmFsUHRyVGFnPihwYXRjaC5kZWx0
YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9CisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFi
ZWxBdE9mZnNldDxKU0VudHJ5UHRyVGFnPihwYXRjaC5pbmxpbmVTaXplKTsgfQorICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb24o
KSB7IHJldHVybiBwYXRjaC5zdGFydC5sYWJlbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0
VG9TbG93UGF0aFN0YXJ0KTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRh
Zz4gcGF0Y2hhYmxlSnVtcEZvckluKCkKICAgICB7IAogICAgICAgICBBU1NFUlQoYWNjZXNzVHlw
ZSA9PSBBY2Nlc3NUeXBlOjpJbik7Ci0gICAgICAgIHJldHVybiBwYXRjaC5zdGFydC5qdW1wQXRP
ZmZzZXQoMCk7CisgICAgICAgIHJldHVybiBwYXRjaC5zdGFydC5qdW1wQXRPZmZzZXQ8SlNJbnRl
cm5hbFB0clRhZz4oMCk7CiAgICAgfQogCiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
W10gKGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmJ5dGVj
b2RlSW5kZXg7IH0pOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHZvaWQqIG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3Jt
YXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPiBtYWNoaW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9y
bWF0cykKICAgICB7CiAgICAgICAgIGNhdGNoRW50cnlwb2ludHMuYXBwZW5kKENhdGNoRW50cnlw
b2ludERhdGEgeyBtYWNoaW5lQ29kZSwgIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSwgYnl0ZWNv
ZGVJbmRleCB9KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rp
c2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjUsMTEg
KzE2NSwxMSBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50CiAgICAg
ICAgIHByZWZpeEJ1ZmZlcltpICsgcHJlZml4TGVuZ3RoXSA9ICcgJzsKICAgICBwcmVmaXhCdWZm
ZXJbcHJlZml4TGVuZ3RoICsgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZV0gPSAwOwogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByZXZpb3Vz
TGFiZWwpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihjdXJyZW50TGFiZWwpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFn
PiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4ocHJldmlv
dXNMYWJlbCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IGVuZCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4oY3VycmVudExhYmVsKTsK
ICAgICBwcmV2aW91c0xhYmVsID0gY3VycmVudExhYmVsOwotICAgIEFTU0VSVChlbmQuZXhlY3V0
YWJsZUFkZHJlc3M8dWludHB0cl90PigpID49IHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRw
dHJfdD4oKSk7Ci0gICAgZGlzYXNzZW1ibGUoc3RhcnQsIGVuZC5leGVjdXRhYmxlQWRkcmVzczx1
aW50cHRyX3Q+KCkgLSBzdGFydC5leGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCksIHByZWZp
eEJ1ZmZlci5kYXRhKCksIG91dCk7CisgICAgQVNTRVJUKGVuZC5kYXRhTG9jYXRpb248dWludHB0
cl90PigpID49IHN0YXJ0LmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkpOworICAgIGRpc2Fzc2Vt
YmxlKHN0YXJ0LCBlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSAtIHN0YXJ0LmRhdGFMb2Nh
dGlvbjx1aW50cHRyX3Q+KCksIHByZWZpeEJ1ZmZlci5kYXRhKCksIG91dCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKSVRDb2RlOwotY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JF
eGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsK
LSAgICBQdHJUYWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZt
KCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0
aW9uTGFiZWwob3NyRXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJD
b2RlUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
c3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Cisg
ICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBM
aXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtMTYyLDggKzE2MSw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgcG9r
ZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3Bl
cmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxMaW5rUmVjb3JkKGNhbGwoY2FsbFRhZyksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGNhbGxUYWcpKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxMaW5rUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOwogCiAg
ICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0KQEAgLTE4Miw4ICsx
ODAsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgICAg
IHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1
bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKERG
R09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsTGlua1JlY29yZChjYWxsKGNhbGxUYWcpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRp
b25IYW5kbGVyLCBjYWxsVGFnKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1Jl
Y29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSgpKTsKICAgICB9CkBAIC0yMTcsMTUgKzIxNCwxNCBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIAogICAgICAgICB1c2VkSnVtcFRhYmxl
cy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KTsKLSAgICAgICAgUHRyVGFnIHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywg
JnRhYmxlKTsKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdLCBzd2l0Y2hUYWcp
OworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgdGFibGUuY3RpT2Zmc2V0cy5ncm93KHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgp
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdGFibGUuY3RpT2Zmc2V0cy5zaXplKCk7IGot
LTspCiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZzZXRzW2pdID0gdGFibGUuY3RpRGVmYXVsdDsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZGF0YS5jYXNlcy5zaXplKCk7IGotLTspIHsKICAg
ICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAg
ICB0YWJsZS5jdGlPZmZzZXRzW215Q2FzZS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1ZShkYXRhLmtp
bmQpIC0gdGFibGUubWluXSA9Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LmJsb2NrLT5pbmRleF0sIHN3aXRjaFRhZyk7Cisg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Js
b2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTI0OCw5ICsyNDQsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZm
ZXImIGxpbmtCCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBwdHJUYWco
U3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CiAKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9j
ay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhy
b3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZz
ZXRUYWJsZTo6aXRlcmF0b3IgaXRlcjsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdP
ZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAg
ICAgIGZvciAoaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCkBAIC0yNTksNyArMjU0LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICAgICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0gZGF0YS5jYXNlc1tq
XTsKICAgICAgICAgICAgIGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5maW5kKG15Q2FzZS52YWx1
ZS5zdHJpbmdJbXBsKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBlbmQp
OwotICAgICAgICAgICAgaXRlci0+dmFsdWUuY3RpT2Zmc2V0ID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LmJsb2NrLT5pbmRleF0sIHN3aXRjaFRhZyk7
CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LmJsb2NrLT5pbmRl
eF0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzcsNTIgKzI3Miw1MCBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZv
ID0gKm1faW5zW2ldLm1fc3R1YkluZm87CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3Rh
cnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9qdW1wKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX2luc1tpXS5tX2p1bXApOwogICAgICAg
ICBpbmZvLnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CiAKICAgICAgICAgcHRyZGlmZl90IGlubGluZVNp
emUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAg
ICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUpKTsKKyAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9p
bnNbaV0ubV9kb25lKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPj0gMCk7
CiAgICAgICAgIGluZm8ucGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CiAKICAgICAgICAg
aW5mby5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgc3RhcnQsIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkp
KTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4obV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CiAKICAgICAgICAg
aW5mby5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKKyAg
ICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
bV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKLSAg
ICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0oKSk7Ci0gICAgYXV0
byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKTsKKyAg
ICBhdXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0cjxOb1B0clRhZz4odm0oKS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5z
bG93Q2FsbCwgbGlua0NhbGxUaHVuayk7CiAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygK
LSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKHJlY29yZC5zbG93Q2FsbCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC50YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuZmFzdENhbGwpKTsKKyAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHJlY29yZC5zbG93Q2FsbCkpLAorICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHJlY29yZC50YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihyZWNvcmQuZmFzdENhbGwpKTsK
ICAgICB9CiAgICAgCiAgICAgZm9yIChKU0RpcmVjdENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNE
aXJlY3RDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87
Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHJlY29yZC5zbG93UGF0aCwgTmVhckNvZGVQdHJUYWcpKTsKKyAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHJlY29yZC5jYWxsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29y
ZC5zbG93UGF0aCkpOwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCgpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHJlY29yZC5zbG93UGF0aCwgTmVhckNvZGVQdHJUYWcpLAotICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLmNhbGwpKTsKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHJlY29yZC5jYWxsKSk7CiAg
ICAgfQogICAgIAogICAgIGZvciAoSlNEaXJlY3RUYWlsQ2FsbFJlY29yZCYgcmVjb3JkIDogbV9q
c0RpcmVjdFRhaWxDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3Jk
LmluZm87CiAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRoLCBOZWFyQ29kZVB0clRhZyksCi0gICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuY2FsbCkpOworICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHJlY29yZC5wYXRj
aGFibGVKdW1wKSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihyZWNvcmQuc2xvd1BhdGgpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNFbnRyeVB0clRhZz4ocmVjb3JkLmNhbGwpKTsKICAgICB9CiAgICAgCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7Ci0gICAgUHRyVGFnIG9zckV4aXRUaHVua1Rh
ZyA9IHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsucmV0YWdnZWRDb2RlKG9z
ckV4aXRUaHVua1RhZywgTmVhckNvZGVQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAg
ICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZv
W2ldOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7CkBAIC0zMzIs
OCArMzI1LDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
ICAgICB9CiAgICAgICAgIGlmIChpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgewog
ICAgICAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVt
cFJlcGxhY2VtZW50KAotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZv
Lm1fcmVwbGFjZW1lbnRTb3VyY2UsIE5lYXJDb2RlUHRyVGFnKSwKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5lYXJD
b2RlUHRyVGFnKSkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UpLAorICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxPU1JFeGl0UHRyVGFnPihpbmZvLm1fcmVwbGFjZW1lbnRE
ZXN0aW5hdGlvbikpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTM0MSw5ICszMzQsOSBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIEFTU0VS
VChtX2V4aXRTaXRlTGFiZWxzLnNpemUoKSA9PSBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4mIGxhYmVscyA9IG1fZXhpdFNpdGVM
YWJlbHNbaV07Ci0gICAgICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IGFkZHJlc3NlczsKKyAg
ICAgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+
IGFkZHJlc3NlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsYWJlbHMu
c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobGFiZWxzW2pdLCBERkdPU1JFeGl0UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzZXMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihsYWJlbHNbal0pKTsKICAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+YWRkT1NSRXhpdFNpdGUoYWRkcmVzc2VzKTsKICAgICAgICAgfQogICAg
IH0gZWxzZQpAQCAtMzYwLDcgKzM1Myw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgICAgIC8vIGkuZSwgd2UgZXhwbGljaXRseSBlbWl0dGVkIGFu
IGV4Y2VwdGlvbkNoZWNrIHRoYXQgd2Uga25vdyB3aWxsIGJlIGNhdWdodCBpbiB0aGlzIG1hY2hp
bmUgZnJhbWUuCiAgICAgICAgICAgICAvLyBJZiB0aGlzICppcyBzZXQqLCBpdCBtZWFucyB3ZSB3
aWxsIGJlIGxhbmRpbmcgYXQgdGhpcyBjb2RlIGxvY2F0aW9uIGZyb20gZ2VuZXJpY1Vud2luZCBm
cm9tIGFuCiAgICAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2hpbGQgY2FsbCBm
cmFtZS4KLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhdGNoTGFiZWwgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWcpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gY2F0Y2hMYWJlbCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPihpbmZvLm1fcmVwbGFjZW1lbnREZXN0aW5hdGlvbik7CiAgICAgICAgICAg
ICBIYW5kbGVySW5mbyBuZXdFeGNlcHRpb25IYW5kbGVyID0gbV9leGNlcHRpb25IYW5kbGVyT1NS
RXhpdENhbGxTaXRlc1tpXS5iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXI7CiAgICAgICAgICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9leGNlcHRpb25IYW5kbGVyT1NSRXhpdENhbGxTaXRl
c1tpXS5jYWxsU2l0ZUluZGV4OwogICAgICAgICAgICAgbmV3RXhjZXB0aW9uSGFuZGxlci5zdGFy
dCA9IGNhbGxTaXRlLmJpdHMoKTsKQEAgLTUzOSwxMSArNTMyLDExIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAg
IGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCi0gICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJ
U3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQ
dHJUYWcsIHZtKCkpLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICBsaW5rQnVmZmVyLT5saW5rKGNh
bGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS0+Z2V0Q1RJU3R1
Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpKTsKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5r
QnVmZmVyKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrLCBDb2RlUHRyVGFnKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7CiAKICAgICBtX2dy
YXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCiAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92
ZShsaW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spOwpAQCAtNTgzLDcgKzU3Niw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNp
Y0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMg
cmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0
Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGJsb2NrSGVhZCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpKTsKKyAgICBtX2ppdENvZGUtPmNvbW1vbi5hcHBl
bmRDYXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oYmxvY2tIZWFkKSwgV1RGTW92ZShhcmd1
bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFz
aWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTQgKzY2LDE0IEBAIHN0
cnVjdCBPU1JFeGl0OwogLy8gRXZlcnkgQ2FsbExpbmtSZWNvcmQgY29udGFpbnMgYSByZWZlcmVu
Y2UgdG8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24gJiB0aGUgZnVuY3Rpb24KIC8vIHRoYXQgaXQgbmVl
ZHMgdG8gYmUgbGlua2VkIHRvLgogc3RydWN0IENhbGxMaW5rUmVjb3JkIHsKLSAgICBDYWxsTGlu
a1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikK
KyAgICBDYWxsTGlua1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAg
ICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIG1fY2FsbDsKLSAgICBGdW5jdGlvblB0ciBtX2Z1bmN0aW9uOworICAgIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbjsKIH07CiAKIHN0cnVjdCBJblJl
Y29yZCB7CkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWRk
IGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0g
ICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFn
ID0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgQ2FsbCBmdW5jdGlv
bkNhbGwgPSBjYWxsKHRhZyk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3Jk
KGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykpKTsKKyAgICAgICAgQ2Fs
bCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQog
ICAgIApAQCAtMzEwLDYgKzMxMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIHRhcmdldFRv
Q2hlY2sodGFyZ2V0VG9DaGVjaykKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoZmFzdENhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzbG93Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBDYWxsIGZhc3RDYWxsOwpAQCAtMzI0LDYgKzMyNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAgICAgICAg
LCBpbmZvKGluZm8pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpOZWFyKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIENhbGwgY2FsbDsK
QEAgLTMzOCw2ICszNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBzbG93UGF0aChzbG93
UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikgJiYgY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6
VGFpbCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZUp1bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1KSVRGaW5hbGl6ZXI6OkpJVEZpbmFs
aXplcihQbGFuJiBwbGFuLCBSZWY8SklUQ29kZT4mJiBqaXRDb2RlLCBzdGQ6OnVuaXF1ZV9wdHI8
TGlua0J1ZmZlcj4gbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNo
ZWNrKQorSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+
JiYgaml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKICAgICA6IEZp
bmFsaXplcihwbGFuKQogICAgICwgbV9qaXRDb2RlKFdURk1vdmUoaml0Q29kZSkpCiAgICAgLCBt
X2xpbmtCdWZmZXIoV1RGTW92ZShsaW5rQnVmZmVyKSkKQEAgLTU2LDcgKzU2LDcgQEAgc2l6ZV90
IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUo
KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfREZHX0NP
REUoKm1fbGlua0J1ZmZlciwgQ29kZVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZH
SklUKSkuZGF0YSgpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Y29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcs
ICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CiAgICAgbV9qaXRDb2Rl
LT5pbml0aWFsaXplQ29kZVJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7CiAgICAgCiAgICAg
bV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKQEAgLTcw
LDcgKzcwLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKICAgICBt
X2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgq
bV9saW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
KS5kYXRhKCkpLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0Vu
dHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpLAogICAg
ICAgICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KG1faml0Q29kZS5jb3B5UmVmKCkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRGaW5hbGl6
ZXIgOiBwdWJsaWMgRmluYWxpemVyIHsKIHB1YmxpYzoKLSAgICBKSVRGaW5hbGl6ZXIoUGxhbiYs
IFJlZjxKSVRDb2RlPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4sIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OkVtcHR5VmFsdWUpKTsKKyAgICBKSVRGaW5hbGl6ZXIoUGxhbiYsIFJl
ZjxKSVRDb2RlPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4sIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46
OkVtcHR5VmFsdWUpKTsKICAgICB2aXJ0dWFsIH5KSVRGaW5hbGl6ZXIoKTsKICAgICAKICAgICBz
aXplX3QgY29kZVNpemUoKSBvdmVycmlkZTsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWY8SklUQ29kZT4gbV9qaXRDb2RlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPiBtX2xpbmtCdWZmZXI7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fd2l0aEFy
aXR5Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0
aEFyaXR5Q2hlY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogY2xhc3MgSnVtcFJlcGxhY2VtZW50IHsKIHB1YmxpYzoKLSAgICBKdW1w
UmVwbGFjZW1lbnQoQ29kZUxvY2F0aW9uTGFiZWwgc291cmNlLCBDb2RlTG9jYXRpb25MYWJlbCBk
ZXN0aW5hdGlvbikKKyAgICBKdW1wUmVwbGFjZW1lbnQoQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc291cmNlLCBDb2RlTG9jYXRpb25MYWJlbDxPU1JFeGl0UHRyVGFnPiBkZXN0
aW5hdGlvbikKICAgICAgICAgOiBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICwgbV9kZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKICAgICB7CkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5kYXRhTG9jYXRpb24o
KTsgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fc291cmNlOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIG1fZGVzdGluYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9zb3VyY2U7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0
clRhZz4gbV9kZXN0aW5hdGlvbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0
Nyw3ICsyNDcsNyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKIH07CiAKIHN0cnVjdCBDYWxs
RE9NR2V0dGVyRGF0YSB7Ci0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tQWNj
ZXNzb3JHZXR0ZXIgeyBudWxscHRyIH07CisgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBjdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciog
ZG9tSklUIHsgbnVsbHB0ciB9OwogICAgIERPTUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQqIHNu
aXBwZXQgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciB7IDAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIEMKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAg
ICBkYXRhTG9nRigiICAgIE9TUiB1c2luZyB0YXJnZXQgUEMgJXAuXG4iLCB0YXJnZXRQQyk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0UEMpOwotICAgICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihz
Y3JhdGNoICsgMSkgPSByZXRhZ0NvZGVQdHIodGFyZ2V0UEMsIENvZGVQdHJUYWcsIGJpdHdpc2Vf
Y2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCAr
IDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8
UHRyVGFnPihleGVjKSk7CiAKICAgICBSZWdpc3RlciogcGl2b3QgPSBzY3JhdGNoICsgMiArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgIApAQCAtMzM3LDcgKzMzNyw3IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICByZXR1cm4gc2Ny
YXRjaDsKIH0KIAotdm9pZCogcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK01hY3JvQXNzZW1i
bGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQogeyAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUIHx8IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDIzMDczNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVl
LmgiCiAjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KIApAQCAtNzMsNyArNzQsNyBAQCBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRh
Qnl0ZWNvZGVJCiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiAgICAgLy8gV2UgdXNlIHRo
aXMgd2hlbiBkb2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1bWVudHMK
ICAgICAvLyBhcmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0IGEgY2F0
Y2ggYmxvY2suCi0gICAgdm9pZCogbWFjaGluZUNvZGU7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlOwogICAgIFZlY3RvcjxGbHVz
aEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CiB9
OwpAQCAtODMsOSArODQsOSBAQCBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CiAKIC8vIElmIG51bGwgaXMgcmV0dXJuZWQsIHdlIGNhbid0IE9TUiBlbnRlci4gSWYg
aXQncyBub3QgbnVsbCwgaXQncyB0aGUgUEMgdG8ganVtcCB0by4KLXZvaWQqIHByZXBhcmVDYXRj
aE9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
OworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVD
YXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpOwogI2Vsc2UKLWlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KK2lubGluZSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSos
IENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsMTEgKzM5MCwxMCBAQCB2
b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvCiAKICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwogICAg
ICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29k
ZU1hcCgpOwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24gPSBjb2RlTWFw
LmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlv
bik7CiAKLSAgICAgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVQdHJUYWcsIGNv
ZGVCbG9ja0ZvckV4aXQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAg
ICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBD
b2RlUHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0
ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KICAgICAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4g
b3BlcmFuZHM7CkBAIC03OTEsNyArNzkwLDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyhDb250ZQogCiAjaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQogICAgICAgICAgICAg
dm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQ
KSk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIEpT
RW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKICNlbmRpZgog
ICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCksIGp1bXBUYXJnZXQpOwogICAgICAgICB9CkBAIC04NjYsNyArODY1LDcgQEAgc3RhdGlj
IHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleAogICAgIH0KIAogICAgIHZtLnRvcENh
bGxGcmFtZSA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLSAgICBjb250ZXh0LnBjKCkgPSB1
bnRhZ0NvZGVQdHIoanVtcFRhcmdldCwgQ29kZVB0clRhZyk7CisgICAgY29udGV4dC5wYygpID0g
dW50YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwogfQogCiBzdGF0aWMgdm9p
ZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBj
b25zdCBPU1JFeGl0JiBleGl0KQpAQCAtOTMxLDkgKzkzMCw5IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIE9TUkV4aXQ6OmdldFBhdGNoYWIKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXAo
QXNzZW1ibGVyTGFiZWwobV9wYXRjaGFibGVDb2RlT2Zmc2V0KSk7CiB9CiAKLUNvZGVMb2NhdGlv
bkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGRmZ0NvZGVC
bG9jaykgY29uc3QKK0NvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6
Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaykgY29uc3QKIHsK
LSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGF0
YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKTsKKyAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPih0YWdDb2RlUHRyPEpTSW50ZXJuYWxQdHJU
YWc+KGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kYXRhQWRkcmVzc0F0T2Zmc2V0KG1fcGF0Y2hh
YmxlQ29kZU9mZnNldCkpKTsKIH0KIAogdm9pZCBPU1JFeGl0Ojpjb3JyZWN0SnVtcChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQpAQCAtOTk1LDE5ICs5OTQsMTggQEAgdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbAogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KSwgZGVj
bHR5cGUob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCk+Ojp2YWx1ZSwg
IldlIGFzc3VtZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYmVsb3cu
Iik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DcmVhdGVE
aXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KT4oCiAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnJlZ1QxKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
ewogICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAg
ICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rp
b25QdHIob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCwgdGFnKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1
cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
dGFnKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRy
VGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBhbHJlYWR5QWxs
b2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CkBAIC0xMDQ2LDcgKzEwNDQsNiBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAgICAgaWYgKGV4aXQubV9y
ZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQogICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2st
PmppdENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5k
ZXhdOwogCi0gICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0p
OwogICAgIHsKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogCkBAIC0xMDc3
LDE0ICsxMDc0LDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXgK
ICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAg
IGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBE
aXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
REZHT1NSRXhpdCgpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIGV4aXRUYWcsCisgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwgT1NSRXhpdFB0clRhZywKICAgICAgICAgICAgICJERkcgT1NSIGV4
aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCiAgICAgICAgICAg
ICAgICAgZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKICAg
ICAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpj
b2RlQmxvY2spLmRhdGEoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250
ZXh0PER1bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxv
Y2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUoZXhpdFRhZywg
TmVhckNvZGVQdHJUYWcpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4aXQu
Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbDxPU1JF
eGl0UHRyVGFnPihleGl0Lm1fY29kZS5jb2RlKCkpKTsKIAogICAgIHZtLT5vc3JFeGl0SnVtcERl
c3RpbmF0aW9uID0gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMjMwNzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDUsOSArMTQ1LDkgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJh
c2UgewogICAgIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gY29tcGlsZU9TUkV4aXQoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwogICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2Jl
OjpDb250ZXh0Jik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDk4MjQ0Pi4K
ICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgeyAwIH07Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NS
RXhpdFB0clRhZz4gbV9jb2RlOwogCiAgICAgUmVmUHRyPE9TUkV4aXRTdGF0ZT4gZXhpdFN0YXRl
OwogICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4
aXRCYXNlIHsKIAogICAgIHZvaWQgc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxl
Q29kZU9mZnNldEFzSnVtcCgpIGNvbnN0OwotICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0
aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25zdDsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpT
SW50ZXJuYWxQdHJUYWc+IGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7
CiAgICAgdm9pZCBjb3JyZWN0SnVtcChMaW5rQnVmZmVyJik7CiAKICAgICB1bnNpZ25lZCBtX3N0
cmVhbUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksOSArMTA5LDggQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVs
cGVycyYgaml0LAogICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cigmZXhp
dCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0gcHRy
VGFnKERGR09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIGppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIodHJpZ2dlclJlb3B0
aW1pemF0aW9uTm93LCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsKKyAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odHJpZ2dlclJl
b3B0aW1pemF0aW9uTm93KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIGRvbmVBZGp1c3RpbmcgPSBqaXQuanVtcCgpOwogICAgIAogICAgIHRvb0Zld0ZhaWxz
LmxpbmsoJmppdCk7CkBAIC0xODgsNyArMTg3LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKIAotICAg
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
cygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xOTgsNyAr
MTk3LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENv
ZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzdHViSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1YkluZm8t
PmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAganVt
cFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTI3Niw5
ICsyNzUsOCBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAjZW5k
aWYKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpPihvd25lcik7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyLCB0YWcpKSwg
c2NyYXRjaCk7Ci0gICAgaml0LmNhbGwoc2NyYXRjaCwgdGFnKTsKKyAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgc2NyYXRjaCk7CisgICAgaml0LmNhbGwoc2Ny
YXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsKIAogI2lmIENQVShYODYpCiAgICAgaml0LmFkZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikgKiA0KSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTMxOSwxMiArMzE3LDEwIEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9ja0ZvckV4aXQgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4p
OwogICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2Vs
aW5lVmVyc2lvbigpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRp
b24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBj
b2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAot
ICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tGb3JF
eGl0LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICBQdHJUYWcgZXhpdFRh
ZyA9IHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgdm9pZCog
anVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgZXhpdFRhZyku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9u
LnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBqaXQu
YWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewogICAgICAgICAvLyBTaW5jZSB3
ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRj
aC4KQEAgLTMzMiw3ICszMjgsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0s
IENDYWxsCiAgICAgfQogICAgIAogICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5qdW1wKEdQUklu
Zm86OnJlZ1QyLCBleGl0VGFnKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhp
dFB0clRhZyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjMwNzM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA0NCw3ICszMDQ0LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVj
U3RhdGUqIGV4ZQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJvbSAiLCBS
YXdQb2ludGVyKGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGVudHJ5
QmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVw
YXJlT1NSRW50cnkoZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBvcmlnaW5CeXRlY29kZUlu
ZGV4LCBzdHJlYW1JbmRleCkpIHsKICAgICAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkp
OwotICAgICAgICAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIENv
ZGVQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNl
X2Nhc3Q8UHRyVGFnPihleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMTY2LDcgKzMxNjYsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCBv
cmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CiAgICAgaWYgKCFhZGRyZXNzKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRy
ZXNzLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgcmV0dXJu
IHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0
PFB0clRhZz4oZXhlYykpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5v
d0luTG9vcChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MiwxMiArMTYyLDExIEBAIGNsYXNzIENh
bGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmUKICAgICA6IHB1YmxpYyBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4gewogcHVibGlj
OgogICAgIENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
SnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9u
LCBQdHJUYWcgY2FsbFRhZywKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQq
IGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAogICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUg
c3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LCBSZXN1bHRU
eXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICAgICAgOiBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCiAgICAgICAg
ICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50LCByZXN1bHQp
CiAgICAgICAgICwgbV9hcmd1bWVudHMoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLikKLSAgICAgICAgLCBtX2NhbGxUYWcoY2FsbFRhZykKICAgICB7CiAgICAgfQogCkBAIC0x
NzYsNyArMTc1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdW5wYWNrQW5kR2VuZXJhdGUoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgc3RkOjppbmRleF9zZXF1ZW5jZTxBcmd1bWVudHNJbmRleC4uLj4p
CiAgICAgewogICAgICAgICB0aGlzLT5zZXRVcChqaXQpOwotICAgICAgICB0aGlzLT5yZWNvcmRD
YWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCBtX2NhbGxUYWcsIGV4dHJh
Y3RSZXN1bHQodGhpcy0+bV9yZXN1bHQpLCBzdGQ6OmdldDxBcmd1bWVudHNJbmRleD4obV9hcmd1
bWVudHMpLi4uKSk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9u
KHRoaXMtPm1fZnVuY3Rpb24sIGV4dHJhY3RSZXN1bHQodGhpcy0+bV9yZXN1bHQpLCBzdGQ6Omdl
dDxBcmd1bWVudHNJbmRleD4obV9hcmd1bWVudHMpLi4uKSk7CiAgICAgICAgIHRoaXMtPnRlYXJE
b3duKGppdCk7CiAgICAgfQogCkBAIC0xODYsMzYgKzE4NSwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
fQogCiAgICAgc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+IG1fYXJndW1lbnRzOwotICAgIFB0clRh
ZyBtX2NhbGxUYWc7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUg
RnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwo
Ci0gICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1
bmN0aW9uLCBQdHJUYWcgY2FsbFRhZywKLSAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
LCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LAotICAgIFJlc3VsdFR5cGUg
cmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotewotICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwg
RnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudHMuLi4+PigKLSAgICAgICAgZnJvbSwg
aml0LCBmdW5jdGlvbiwgY2FsbFRhZywgc3BpbGxNb2RlLCByZXF1aXJlbWVudCwgcmVzdWx0LCBh
cmd1bWVudHMuLi4pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUg
RnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
Ci1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwo
CiAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1
bmN0aW9uLAogICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNr
UmVxdWlyZW1lbnQgcmVxdWlyZW1lbnQsCiAgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbFJlc3Vs
dEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJl
c3VsdFR5cGUsIEFyZ3VtZW50cy4uLj4+KAotICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBD
RnVuY3Rpb25QdHJUYWcsIHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRz
Li4uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotaW5saW5l
IHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAotICAgIEp1
bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwg
UHRyVGFnIGNhbGxUYWcsCi0gICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCi17Ci0gICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgY2FsbFRhZywgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6
OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAgICAgIGZyb20sIGppdCwg
ZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwg
dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgpAQCAtMjI0LDcgKzIw
Myw3IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3IKICAgICBSZXN1
bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKICAgICByZXR1cm4gc2xv
d1BhdGhDYWxsKAotICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcs
IE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVz
dWx0LCBhcmd1bWVudHMuLi4pOworICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9T
cGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCwgYXJn
dW1lbnRzLi4uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERl
c3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZSwgdW5zaWduZWQgbnVtYmVyT2ZBc3Np
Z25tZW50cz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcg
KzE3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBz
bG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAKICAgICBhdXRvIHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAotICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5
cGUpLAogICAgICAgICBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNr
TmVlZGVkLAogICAgICAgICByZXN1bHRHUFIsIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBpZGVu
dGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAKQEAgLTIwNyw3ICsyMDcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLAogICAgICAgICBEb250U3BpbGwsIEV4
Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAogICAgICAgICByZXN1bHRHUFIs
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZp
ZXJOdW1iZXIpKTsKICAgICAKQEAgLTI1MDYsNyArMjUwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LCBH
ZXRQcm9wZXJ0eVB0clRhZywKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmdw
cigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjYxNCw3ICsy
NjE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIAog
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0SW50LCBHZXRQcm9wZXJ0eVB0clRhZywKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0yNzcz
LDcgKzI3NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgPyAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KQogICAgICAgICAgICAgICAgICAgICAgICAg
OiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlQdHJUYWcs
IE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwpAQCAtMjg1Nyw3ICsyODU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5vZGUtPm9wKCkg
PT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBv
cGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0IDogb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCksCi0gICAgICAgICAgICAgICAg
ICAgIFB1dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZh
bHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbm9SZXN1bHQo
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMzA3MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzkzMiw4ICszOTMyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU1hdGhJQyhOb2RlKgogCiAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7
CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKG1faml0
LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVtaXRQcm9maWxpbmcpOwotICAgIFB0clRh
ZyBtYXRoSUNUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBtYXRoSUMtPmluc3RydWN0aW9uKCkp
OwotCiAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICBBU1NFUlQoIWFkZElDR2Vu
ZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOwogCkBAIC0zOTYyLDkgKzM5NjAs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1Bh
dGhSZXBhdGNoKQotICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+
KHJlcGF0Y2hpbmdGdW5jdGlvbiksIG1hdGhJQ1RhZywgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVn
cywgaW5uZXJSaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICAg
ICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVz
dWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9u
U3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9u
LCBtYXRoSUNUYWcsIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJl
Z3MsIGlubmVyUmlnaHRSZWdzKTsKIAogICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxhbnMp
OwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTM5OTMsNyArMzk5MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAgfQog
CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24obm9uUmVw
YXRjaGluZ0Z1bmN0aW9uLCBtYXRoSUNUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAgICAgfQogCkBAIC00NjM4LDggKzQ2MzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWF0aElDKE5vZGUqCiAKICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKICAgICBib29sIGdlbmVyYXRlZElubGluZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUobV9q
aXQsICppY0dlbmVyYXRpb25TdGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7Ci0gICAgUHRyVGFn
IG1hdGhJQ1RhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIG1hdGhJQy0+aW5zdHJ1Y3Rpb24oKSk7
Ci0KICAgICBpZiAoZ2VuZXJhdGVkSW5saW5lKSB7CiAgICAgICAgIEFTU0VSVCghaWNHZW5lcmF0
aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMuZW1wdHkoKSk7CiAKQEAgLTQ2NTgsOSArNDY1NCw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAgICAgIHNp
bGVudFNwaWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAgIGlmIChpY0dlbmVyYXRpb25TdGF0
ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBj
aGlsZFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICAgICAgaWNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0VKTWljPihyZXBhdGNoaW5nRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBjaGls
ZFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgaWNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
bm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBtYXRoSUNUYWcsIHJlc3VsdFJlZ3MsIGNoaWxkUmVncyk7
CisgICAgICAgICAgICAgICAgaWNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOwog
CiAgICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAgICAgICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwpAQCAtNDY4MSw3ICs0Njc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAgICAgICB9KTsKICAgICB9IGVsc2UgewogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAKQEAgLTkwMDAsNiArODk5
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpZ25h
dHVyZS0+dW5zYWZlRnVuY3Rpb24pLCBDRnVuY3Rpb25QdHJUYWcpOwogICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50ICsgMTsK
ICAgICBzd2l0Y2ggKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgY2FzZSAxOgpA
QCAtOTAyNCw3ICs5MDIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01H
ZXR0ZQogewogICAgIERPTUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQqIHNuaXBwZXQgPSBub2Rl
LT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5zbmlwcGV0OwogICAgIGlmICghc25pcHBldCkgewotICAg
ICAgICBhdXRvKiBnZXR0ZXIgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nl
c3NvckdldHRlcjsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBnZXR0ZXIg
PSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtOTAzNSw3ICs5MDMy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZQogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9FSkk+KENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKGJhc2VHUFIpLCBpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCkt
PmlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZtX2ppdC52bSgpLT50b3BDYWxsRnJhbWUpOwogICAgICAgICBtX2pp
dC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIG1faml0LmFwcGVuZENhbGwoZ2V0dGVyKTsKKyAgICAgICAgbV9qaXQuYXBwZW5kQ2Fs
bChnZXR0ZXIucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpKTsKICAgICAgICAgbV9qaXQuc2V0
dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOwogCiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CkBAIC0xMDIyMiw4ICsxMDIxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJ
bnRKdW1wKAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgbV9qaXQueG9yNjQocG9pc29uU2NyYXRj
aCwgc2NyYXRjaCk7CiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxl
UHRyVGFnLCAmdGFibGUpOwotICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgdGFnKTsKKyAgICBtX2pp
dC5qdW1wKHNjcmF0Y2gsIEpTU3dpdGNoUHRyVGFnKTsKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFi
bGUgPSB0cnVlOwogfQogCkBAIC0xMDI0OSw4ICsxMDI0NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKIAogICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9qaXQuY29kZUJsb2NrKCktPnN3aXRjaEp1bXBU
YWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKICAgICAgICAgYXV0byBub3RJbnQzMiA9IG1f
aml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKICAgICAgICAgZW1pdFN3aXRjaEludEp1
bXAoZGF0YSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaCwgc2NyYXRjaDIpOwogICAg
ICAgICBub3RJbnQzMi5saW5rKCZtX2ppdCk7CkBAIC0xMDI1OSw3ICsxMDI1Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1ZVJl
Z3MsIGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKCk7CiAKLSAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCB0YWcpOworICAgICAgICBtX2pp
dC5qdW1wKHNjcmF0Y2gsIEpTU3dpdGNoUHRyVGFnKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MTA1MTYsMTYgKzEwNTEwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJp
bmdPblMKICAgICAgICAgfQogICAgICAgICB0b3RhbExlbmd0aCArPSBzdHJpbmctPmxlbmd0aCgp
OwogICAgIH0KLSAgICAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBtX2ppdC5jb2RlQmxvY2soKTsK
KwogICAgIGlmICghY2FuRG9CaW5hcnlTd2l0Y2ggfHwgdG90YWxMZW5ndGggPiBPcHRpb25zOjpt
YXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgoKSkgewotICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+
c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFi
bGVQdHJUYWcsICZ0YWJsZSk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24oCiAgICAgICAgICAgICBvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywg
c3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgbV9qaXQuanVtcChzdHJpbmcs
IHRhZyk7CisgICAgICAgIG1faml0Lmp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMDU1OCwxNSArMTA1NDksMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uUwogICAgIGVtaXRCaW5hcnlTd2l0Y2hT
dHJpbmdSZWN1cnNlKAogICAgICAgICBkYXRhLCBjYXNlcywgMCwgMCwgY2FzZXMuc2l6ZSgpLCBz
dHJpbmcsIGxlbmd0aEdQUiwgdGVtcEdQUiwgMCwgZmFsc2UpOwogICAgIAotICAgIFN0cmluZ0p1
bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5z
d2l0Y2hUYWJsZUluZGV4KTsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRy
VGFnLCAmdGFibGUpOwotCiAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhzdHJpbmcpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoU3RyaW5nLCBzdHJpbmcsIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJ
bmRleCksIHN0cmluZyk7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgbV9qaXQuanVtcChzdHJpbmcsIHRhZyk7CisgICAgbV9q
aXQuanVtcChzdHJpbmcsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdFN3aXRjaFN0cmluZyhOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhKQpAQCAtMTI3
MTMsNyArMTI3MDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFBy
CiAgICAgfQogICAgIH0KIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBIYXNQcm9w
ZXJ0eVB0clRhZywgcmVzdWx0R1BSLCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4obm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKSk7CisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQsIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSkpOwogCiAgICAgdW5ibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTI3ODEsNyArMTI3NjksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGlyZWN0UG5hCiAKICAgICBkb25lLmxpbmso
Jm1faml0KTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCBHZXRQcm9wZXJ0eVB0clRhZywgcmVzdWx0
UmVncywgYmFzZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpKSk7Cisg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIENDYWxsSGVscGVyczo6Q2Vs
bFZhbHVlKHByb3BlcnR5R1BSKSkpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKICNlbmRpZgpAQCAtMTI4ODksNyArMTI4NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhK
dW1wKCkpOwogCiAgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsCisgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2
YWx1ZVJlZ3MsCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBpZGVu
dGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKIAogICAgIG1faml0LmFkZFB1dEJ5SWQoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkzMSwzMCAr
OTMxLDEwIEBAIHB1YmxpYzoKICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICBGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAogICAgIEpJVENvbXBpbGVyOjpDYWxs
PgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcs
IFJlc3VsdFJlZ1R5cGUgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0UmVnVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICBzdGQ6OmVuYWJsZV9pZl90PAotICAgICAgICBGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENvbXBpbGVyOjpD
YWxsPgogICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFJlc3VsdFJl
Z1R5cGUgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0LCBhcmdzLi4uKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBBcmcs
IHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RkOjplbmFibGVfaWZfdDwKLSAgICAgICAgIUZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQKLSAgICAgICAgJiYgIXN0ZDo6aXNf
c2FtZTxBcmcsIE5vUmVzdWx0VGFnPjo6dmFsdWUsCi0gICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0g
ICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgQXJn
IGFyZywgQXJncy4uLiBhcmdzKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8
T3BlcmF0aW9uVHlwZT4oYXJnLCBhcmdzLi4uKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwo
b3BlcmF0aW9uLCB0YWcpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25U
eXBlPihhcmdzLi4uKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIEFyZywgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTk2NCwxNyArOTQ0LDggQEAg
cHVibGljOgogICAgIEpJVENvbXBpbGVyOjpDYWxsPgogICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKICAgICB7Ci0gICAgICAg
IHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBhcmcsIGFy
Z3MuLi4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RkOjplbmFibGVfaWZfdDwKLSAgICAgICAgIUZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCi0gICAgSklUQ29tcGlsZXI6OkNhbGw+
Ci0gICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywg
Tm9SZXN1bHRUYWcsIEFyZ3MuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24sIHRhZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9wZXJhdGlv
blR5cGU+KGFyZywgYXJncy4uLik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlv
bik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KQEAgLTk4MywxNyArOTU0LDggQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVy
OjpDYWxsPgogICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIE5vUmVz
dWx0VGFnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgTm9SZXN1bHQsIGFyZ3MuLi4pOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGU+Ci0gICAgc3RkOjplbmFibGVf
aWZfdDwKLSAgICAgICAgIUZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQs
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgUHRyVGFnIHRhZykKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KCk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlv
biwgdGFnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZT4KQEAgLTEwMDIsNyArOTY0LDggQEAg
cHVibGljOgogICAgIEpJVENvbXBpbGVyOjpDYWxsPgogICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIENGdW5jdGlvblB0clRhZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
PE9wZXJhdGlvblR5cGU+KCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7
CiAgICAgfQogCiAjdW5kZWYgRklSU1RfQVJHVU1FTlRfVFlQRQpAQCAtMTAzOSw2MiArMTAwMiw1
NiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGwgaW5z
dHJ1Y3Rpb25zLCBvcHRpb25hbGx5IHNldHRpbmcgcmVzdWx0cywgYW5kIG9wdGlvbmFsbHkgcm9s
bGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lIG9uIGFuIGV4Y2VwdGlvbi4KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFn
ID0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9y
aWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICByZXR1cm4gbV9q
aXQuYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmFwcGVu
ZENhbGwoZnVuY3Rpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rp
b24pCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
bikKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1
bmN0aW9uKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2soKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdChjb25z
dCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKKworICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVz
dWx0KQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihmdW5jdGlvbik7CiAgICAgICAgIGlmICgo
cmVzdWx0ICE9IEludmFsaWRHUFJSZWcpICYmIChyZXN1bHQgIT0gR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRh
ZyB0YWcsIEdQUlJlZyByZXN1bHQpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQ
UlJlZyByZXN1bHQpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
YXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJl
c3VsdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9u
LCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0
YWcsIEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKworICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdDEsIEdQUlJlZyByZXN1bHQyKQogICAgIHsKLSAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAg
ICAgICAgbV9qaXQuc2V0dXBSZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOwogICAgICAgICByZXR1
cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3Vs
dChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdDEsIEdQUlJlZyByZXN1
bHQyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24s
IENGdW5jdGlvblB0clRhZywgcmVzdWx0MSwgcmVzdWx0Mik7Ci0gICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IFB0clRhZyB0YWcsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MpCisKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCB0YWcs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChm
dW5jdGlvbiwgcmVzdWx0UmVncy5ncHIoKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVz
dWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1
bmN0aW9uLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAj
ZW5kaWYKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25Q
dHJUYWcsIHJlc3VsdFJlZ3MpOwotICAgIH0KKwogI2lmIENQVShYODYpCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwg
UHRyVGFnIHRhZywgRlBSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRD
YWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IEZQUlJlZyByZXN1bHQpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRG
UFJSZWcpIHsKICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsKQEAgLTExMDIsMjYg
KzEwNTksMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZWxpZiBD
UFUoQVJNKSAmJiAhQ1BVKEFSTV9IQVJERlApCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgRlBS
UmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQp
CiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5j
dGlvbiwgdGFnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwo
ZnVuY3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCiAgICAgICAg
ICAgICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAg
IH0KICNlbHNlIC8vIENQVShYODZfNjQpIHx8IChDUFUoQVJNKSAmJiBDUFUoQVJNX0hBUkRGUCkp
IHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgRlBS
UmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQp
CiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5j
dGlvbiwgdGFnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwo
ZnVuY3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZW5kaWYKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBGUFJSZWcg
cmVzdWx0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rp
b24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0KTsKLSAgICB9CiAKICAgICB2b2lkIGJyYW5jaERv
dWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0LCBGUFJS
ZWcgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTYgKzQwLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVj
dXRlT1NSRXhpdCwgdm0pOwotICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZH
T1NSRXhpdFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JF
eGl0VGh1bmtUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBNYWNyb0Fzc2VtYmxlciBq
aXQ7CiAKQEAgLTgzLDggKzgyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVAogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogI2VuZGlmCiAKLSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhE
RkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCiAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRk
cmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCkpOwpAQCAtMTAxLDE3ICs5OSwxNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAjZW5kaWYKICAgICB9CiAKLSAgICBqaXQu
anVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1bXBEZXN0
aW5hdGlvbiksIHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSkpOworICAgIGppdC5qdW1wKE1h
Y3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9u
KSwgT1NSRXhpdFB0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwg
RnVuY3Rpb25QdHIoT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQsIGNhbGxUYWcpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihP
U1JFeGl0Ojpjb21waWxlT1NSRXhpdCkpOwogCi0gICAgUHRyVGFnIG9zckV4aXRUaHVua1RhZyA9
IHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIG9zckV4aXRUaHVua1RhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRo
dW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiREZHIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogCkBAIC0xNDksOSArMTQ2LDggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcgogCiAgICAgaml0Lmp1bXAo
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgIFB0clRh
ZyBvc3JFbnRyeVRodW5rVGFnID0gcHRyVGFnKERGR09TUkVudHJ5UHRyVGFnLCB2bSk7CiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIG9zckVudHJ5VGh1bmtUYWcsICJERkcgT1NSIGVu
dHJ5IHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlz
aW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw5ICszNSw5IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZH
IHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0q
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0
ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jv
b2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1i
bHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmlu
dFN0cmVhbSYgb3V0KQogewogICAgIEE2NERPcGNvZGUgYXJtNjRPcGNvZGU7CiAKLSAgICB1aW50
MzJfdCogY3VycmVudFBDID0gcmVtb3ZlQ29kZVB0clRhZzx1aW50MzJfdCo+KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IGNvZGVQdHIudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50MzJfdCo+KCk7CiAgICAgc2l6ZV90IGJ5dGVDb3Vu
dCA9IHNpemU7CiAKICAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNw
cAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDExIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25z
dCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQVJNdjdET3Bjb2RlIGFy
bU9wY29kZTsKIAotICAgIHVpbnQxNl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkmfjEpOworICAgIHVpbnQxNl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0
PHVpbnQxNl90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVQdHIudW50YWdnZWRF
eGVjdXRhYmxlQWRkcmVzcygpKSZ+MSk7CiAgICAgdWludDE2X3QqIGVuZFBDID0gY3VycmVudFBD
ICsgKHNpemUgLyBzaXplb2YodWludDE2X3QpKTsKIAogICAgIHdoaWxlIChjdXJyZW50UEMgPCBl
bmRQQykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3Nl
bWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsMTIgKzM3LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIGRpc2Fzc2VtYmxlKGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNo
YXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNp
emUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBpZiAodHJ5
VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBvdXQucHJpbnRmKCIlc2Rpc2Fzc2VtYmx5IG5vdCBhdmFpbGFibGUgZm9y
IHJhbmdlICVwLi4uJXBcbiIsIHByZWZpeCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6ZSk7CisgICAgb3V0LnByaW50
ZigiJXNkaXNhc3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVm
aXgsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBjb2RlUHRyLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgKyBzaXplKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBjaGFyKiBoZWFkZXIgeyBu
dWxscHRyIH07Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWY7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUmVmOwogICAgIHNpemVfdCBz
aXplIHsgMCB9OwogICAgIGNvbnN0IGNoYXIqIHByZWZpeCB7IG51bGxwdHIgfTsKIH07CkBAIC0x
MjgsNyArMTI4LDcgQEAgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyJiBhc3luY2hyb25vdXNEaQog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hyb25vdXNs
eSgKLSAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiYgY29kZVJlZiwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCkKKyAgICBjb25zdCBD
U3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxEaXNhc3NlbWJseVB0
clRhZz4mIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCiB7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8
RGlzYXNzZW1ibHlUYXNrPigpOwogICAgIHRhc2stPmhlYWRlciA9IHN0cmR1cChoZWFkZXIuZGF0
YSgpKTsgLy8gWXVjayEgV2UgbmVlZCB0aGlzIGJlY2F1c2UgQ1N0cmluZyBkb2VzIHJhY3kgcmVm
Y291bnRpbmcuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsMTkgKzI2LDIwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTRXhwb3J0TWFj
cm9zLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7Ci1jbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwogCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJp
bnRTdHJlYW0mKTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFBy
aW50U3RyZWFtJik7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYp
CitpbmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxEaXNhc3NlbWJseVB0clRhZz4mLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDYsMTIgKzQ3LDEyIEBAIGlubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm8KIAogLy8gUHJpbnRzIGVpdGhlciB0aGUgZGlz
YXNzZW1ibHksIG9yIGEgbGluZSBvZiB0ZXh0IGluZGljYXRpbmcgdGhhdCBkaXNhc3NlbWJseSBm
YWlsZWQgYW5kCiAvLyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Nlcy4KLXZvaWQg
ZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBj
aGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwordm9pZCBkaXNhc3NlbWJsZShjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBj
aGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3luY2hyb25vdXMgZGlzYXNz
ZW1ibHkuIFRoaXMgaGFwcGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5kIGNhbGxzIHRoZSBwcm92
aWRlZAogLy8gY2FsbGJhY2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMgZG9uZS4KIHZvaWQgZGlz
YXNzZW1ibGVBc3luY2hyb25vdXNseSgKLSAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4KTsKKyAg
ICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxEaXNh
c3NlbWJseVB0clRhZz4mLCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CiAKIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4
NkRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDE3ICszMywxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNp
emVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRy
eVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNh
c3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgdWRfdCBkaXNhc3NlbWJsZXI7CiAgICAgdWRfaW5p
dCgmZGlzYXNzZW1ibGVyKTsKLSAgICB1ZF9zZXRfaW5wdXRfYnVmZmVyKCZkaXNhc3NlbWJsZXIs
IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3M8dW5zaWduZWQgY2hhcio+KCksIHNpemUpOworICAg
IHVkX3NldF9pbnB1dF9idWZmZXIoJmRpc2Fzc2VtYmxlciwgY29kZVB0ci51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHVuc2lnbmVkIGNoYXIqPigpLCBzaXplKTsKICNpZiBDUFUoWDg2XzY0KQog
ICAgIHVkX3NldF9tb2RlKCZkaXNhc3NlbWJsZXIsIDY0KTsKICNlbHNlCiAgICAgdWRfc2V0X21v
ZGUoJmRpc2Fzc2VtYmxlciwgMzIpOwogI2VuZGlmCi0gICAgdWRfc2V0X3BjKCZkaXNhc3NlbWJs
ZXIsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpKTsKKyAgICB1ZF9zZXRf
cGMoJmRpc2Fzc2VtYmxlciwgY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHVpbnRw
dHJfdD4oKSk7CiAgICAgdWRfc2V0X3N5bnRheCgmZGlzYXNzZW1ibGVyLCBVRF9TWU5fQVRUKTsK
ICAgICAKICAgICB1aW50NjRfdCBjdXJyZW50UEMgPSBkaXNhc3NlbWJsZXIucGM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlz
YXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
aXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMx
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKFVESVM4NikKIAotYm9vbCB0cnlUb0Rp
c2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIs
IHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOworYm9v
bCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpOwogCiAjZWxzZSAvLyBVU0UoVURJUzg2KQogCi1pbmxpbmUgYm9vbCB0cnlUb0Rp
c2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3Qs
IGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9v
bCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7
IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYgLy8gVVNFKFVESVM4NikKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVy
LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9YODZEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICByZXR1cm4gdHJ5
VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzQsMTIgKzEzNCwxMSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
Ci0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRh
Zyk7CiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxl
ciwgY2FsbFRhZykpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICB9
KTsKIAogICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91
bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CkBAIC0xNTMsOSArMTUyLDggQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50
OjpSZQogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCiAg
ICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQ
Q1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9y
aWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CiAKLSAgICBQ
dHJUYWcgZW50cnlUYWcgPSBwdHJUYWcoRlRMQ29kZVB0clRhZywgY29kZUJsb2NrKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
ci0+bG9jYXRpb25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCksIGVudHJ5VGFnKTsK
LSAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGxhYmVsLmV4ZWN1dGFibGVBZGRyZXNzPEdl
bmVyYXRlZEZ1bmN0aW9uPigpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbCgwKSk7CisgICAgc3RhdGUu
Z2VuZXJhdGVkRnVuY3Rpb24gPSBsYWJlbDsKICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXpl
QjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogCiAgICAgZm9y
IChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29k
ZU9mZnNldCkgewpAQCAtMTYzLDcgKzE2MSw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUs
IFNhZmVwb2ludDo6UmUKICAgICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5r
ZXk7CiAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzID0gc3RhdGUu
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKICAgICAgICAgc3RhdGUu
aml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2ludCgKLSAgICAgICAgICAgIGNhdGNo
Qnl0ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRp
b25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1bWVudEZv
cm1hdHMpKTsKKyAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihz
dGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1vdmUoYXJn
dW1lbnRGb3JtYXRzKSk7CiAgICAgfQogICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5maW5hbGl6
ZUNhdGNoRW50cnlwb2ludHMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMSArMzYsMTEgQEAgRXhjZXB0aW9uVGFyZ2V0Ojp+RXhjZXB0aW9uVGFyZ2V0KCkK
IHsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uVGFyZ2V0OjpsYWJlbChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyLCBQdHJUYWcgaGFuZGxlclRhZykKK0NvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IEV4Y2VwdGlvblRhcmdldDo6bGFiZWwoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKIHsKICAgICBpZiAobV9pc0RlZmF1bHRIYW5kbGVyKQotICAgICAgICByZXR1
cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mKCptX2RlZmF1bHRIYW5kbGVyLCBoYW5kbGVyVGFnKTsK
LSAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faGFuZGxlLT5sYWJlbCwgaGFuZGxl
clRhZyk7CisgICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oKm1fZGVmYXVsdEhhbmRsZXIpOworICAgIHJldHVybiBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4obV9oYW5kbGUtPmxhYmVsKTsKIH0KIAog
Qm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IEV4Y2VwdGlvblRhcmdldDo6anVtcHMoQ0NhbGxI
ZWxwZXJzJiBqaXQpCkBAIC01MCwxMyArNTAsMTMgQEAgQm94PENDYWxsSGVscGVyczo6SnVtcExp
c3Q+IEV4Y2VwdGlvblRhcgogICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZGVmYXVs
dEhhbmRsZXIgPSBtX2RlZmF1bHRIYW5kbGVyOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpkZWZhdWx0
SGFuZGxlciwgRXhjZXB0aW9uSGFuZGxlclB0clRhZykpOworICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oKmRlZmF1bHRIYW5kbGVyKSk7CiAgICAgICAgICAgICB9KTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gbV9oYW5kbGU7CiAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCwgREZHT1NSRXhpdFB0clRhZykpOworICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
T1NSRXhpdFB0clRhZz4oaGFuZGxlLT5sYWJlbCkpOwogICAgICAgICAgICAgfSk7CiAgICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvblRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhjZXB0aW9uVGFyZ2V0LmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIH5FeGNlcHRpb25UYXJnZXQoKTsKIAogICAgIC8vIEl0J3Mg
T0sgdG8gY2FsbCB0aGlzIGR1cmluZyBsaW5raW5nLCBidXQgbm90IGFueSBzb29uZXIuCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFiZWwoTGlua0J1ZmZlciYsIFB0clRhZyBoYW5kbGVyVGFnKTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBsYWJlbChMaW5r
QnVmZmVyJik7CiAKICAgICAvLyBPciwgeW91IGNhbiBnZXQgYSBKdW1wTGlzdCBhdCBhbnkgdGlt
ZS4gQW55dGhpbmcgeW91IGFkZCB0byB0aGlzIEp1bXBMaXN0IHdpbGwgYmUgbGlua2VkIHRvCiAg
ICAgLy8gdGhlIHRhcmdldCdzIGxhYmVsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI4LDEwICsyOCwxMiBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkdlbmVy
YXRlZEZ1bmN0aW9uKShFeGVjU3RhdGUqKTsKKy8vIFBvaW50cyB0byBhIGZ1bmN0aW9uIG9mIHBy
b3RvdHlwZTogRW5jb2RlZEpTVmFsdWUgKCopKEV4ZWNTdGF0ZSopLgordXNpbmcgR2VuZXJhdGVk
RnVuY3Rpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPjsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgSklUQ29kZTo6
fkpJVENvZGUoKQogICAgIH0KIH0KIAotdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQjNDb2RlKENv
ZGVSZWYgYjNDb2RlKQordm9pZCBKSVRDb2RlOjppbml0aWFsaXplQjNDb2RlKENvZGVSZWY8SlNF
bnRyeVB0clRhZz4gYjNDb2RlKQogewogICAgIG1fYjNDb2RlID0gYjNDb2RlOwogfQpAQCAtNjEs
MTcgKzYxLDE3IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGQKICAg
ICBtX2IzQnlwcm9kdWN0cyA9IFdURk1vdmUoYnlwcm9kdWN0cyk7CiB9CiAKLXZvaWQgSklUQ29k
ZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIgYWRkcmVzcykKK3ZvaWQgSklUQ29k
ZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRkcmVz
cykKIHsKICAgICBtX2FkZHJlc3NGb3JDYWxsID0gYWRkcmVzczsKIH0KIAotdm9pZCBKSVRDb2Rl
Ojppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZiBlbnRyeXBvaW50KQordm9p
ZCBKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBlbnRyeXBvaW50KQogewogICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBlbnRy
eXBvaW50OwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFy
aXR5Q2hlY2tNb2RlIGFyaXR5Q2hlY2spCitKSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hlY2spCiB7CiAg
ICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CiAgICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6
CkBAIC04MCwxOCArODAsMTYgQEAgSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9y
Q2FsbAogICAgICAgICByZXR1cm4gbV9hcml0eUNoZWNrRW50cnlwb2ludC5jb2RlKCk7CiAgICAg
fQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVQdHIo
KTsKKyAgICByZXR1cm4gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogfQogCiB2b2lkKiBKSVRD
b2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgcmV0
dXJuIG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgKyBvZmZzZXQ7
Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgQ29kZVB0clRhZyk7CiAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiBtX2Fk
ZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBjaGFyKiBleGVjdXRhYmxl
QWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxl
QWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKLSAgICByZXR1cm4gdGFnQ29kZVB0cihleGVjdXRhYmxl
QWRkcmVzcyArIG9mZnNldCwgQ29kZVB0clRhZyk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJl
c3MgPSBtX2FkZHJlc3NGb3JDYWxsLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7
CisgICAgcmV0dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3Mg
KyBvZmZzZXQpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NCwxNyArNDQsMTcgQEAgcHVibGljOgogICAgIEpJVENvZGUoKTsKICAg
ICB+SklUQ29kZSgpOwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSkgb3ZlcnJpZGU7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBhZGRyZXNzRm9yQ2FsbChB
cml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9m
ZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQq
IHBvaW50ZXJJbnRvQ29kZSkgb3ZlcnJpZGU7CiAgICAgc2l6ZV90IHNpemUoKSBvdmVycmlkZTsK
ICAgICBib29sIGNvbnRhaW5zKHZvaWQqKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdGlhbGl6
ZUIzQ29kZShDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPik7CiAgICAgdm9pZCBpbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0ZDo6dW5pcXVl
X3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4pOwotICAgIHZvaWQgaW5pdGlhbGl6ZUFkZHJlc3NG
b3JDYWxsKENvZGVQdHIpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOworICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4pOwogICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2Vz
KGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgb3ZlcnJpZGU7CiAKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2Nr
Kiwgdm9pZCogcGMpIG92ZXJyaWRlOwogCi0gICAgQ29kZVJlZiBiM0NvZGUoKSBjb25zdCB7IHJl
dHVybiBtX2IzQ29kZTsgfQorICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KICAgICAKICAgICBKSVRDb2RlKiBmdGwoKSBvdmVycmlk
ZTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwpAQCAtNzQsMTAg
Kzc0LDEwIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0
aD4+IGxhenlTbG93UGF0aHM7CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVQdHIgbV9hZGRyZXNz
Rm9yQ2FsbDsKLSAgICBDb2RlUmVmIG1fYjNDb2RlOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gbV9hZGRyZXNzRm9yQ2FsbDsKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fYjNDb2Rl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gbV9iM0J5cHJvZHVj
dHM7Ci0gICAgQ29kZVJlZiBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50OworICAgIENvZGVSZWY8SlNF
bnRyeVB0clRhZz4gbV9hcml0eUNoZWNrRW50cnlwb2ludDsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxp
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDE0IEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCiB7CiAgICAgYm9vbCBkdW1wRGlz
YXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGIzQ29kZVJlZiA9Ci0g
ICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZl
ciwgQ29kZVB0clRhZywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
YjNDb2RlUmVmID0KKyAgICAgICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpi
M0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAogICAgICAgICAgICAgIkZUTCBCMyBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2Nr
LCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGFyaXR5Q2hlY2tDb2RlUmVmID0gZW50cnlwb2ludExpbmtCdWZmZXIKLSAgICAgICAgPyBGSU5B
TElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmVudHJ5cG9pbnRMaW5rQnVmZmVyLCBDb2Rl
UHRyVGFnLAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBhcml0eUNo
ZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyCisgICAgICAgID8gRklOQUxJWkVfQ09E
RV9JRihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50TGlua0J1ZmZlciwgSlNFbnRyeVB0clRh
ZywKICAgICAgICAgICAgICJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5l
cmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKQotICAgICAgICA6
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGIzQ29kZVJl
Zi5jb2RlKCkpOworICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGIzQ29kZVJlZi5jb2RlKCkpOwogCiAgICAgaml0
Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShiM0NvZGVSZWYpOwogICAgIGppdENvZGUtPmluaXRpYWxp
emVBcml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyMzA3
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgTGF6eVNsb3dQYXRoOjp+TGF6eVNsb3dQYXRo
KCkKIH0KIAogdm9pZCBMYXp5U2xvd1BhdGg6OmluaXRpYWxpemUoCi0gICAgQ29kZUxvY2F0aW9u
SnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBkb25lLAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCwKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGRvbmUsCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhj
ZXB0aW9uVGFyZ2V0LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcgogICAg
ICkKIHsKQEAgLTYzLDE0ICs2MywxMyBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29k
ZUJsb2NrKiBjCiAKICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotICAgIFB0
clRhZyBzbG93UGF0aFRhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIGJpdHdpc2Vf
Y2FzdDxQdHJUYWc+KHRoaXMpKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotICAgIGxpbmtCdWZmZXIubGluayhw
YXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJDb2RlUHRy
VGFnKSk7CisgICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5kb25lSnVtcHMsIG1fZG9uZSk7CiAg
ICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0
aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0LnJldGFnZ2VkKHNsb3dQYXRoVGFnLCBOZWFyQ29k
ZVB0clRhZykpOwotICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlu
a0J1ZmZlciwgc2xvd1BhdGhUYWcsICJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0dWIiKTsKKyAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7Cisg
ICAgbV9zdHViID0gRklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywgIkxhenkgc2xvdyBwYXRoIGNhbGwgc3R1YiIpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcC5yZXRhZ2dlZChzbG93UGF0
aFRhZywgTmVhckNvZGVQdHJUYWcpLCBDb2RlTG9jYXRpb25MYWJlbChtX3N0dWIucmV0YWdnZWRD
b2RlKHNsb3dQYXRoVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAobV9wYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zdHViLmNvZGUoKSkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmgJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNs
b3dQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDI3ICs2OSwyOSBAQCBwdWJsaWM6CiAgICAg
fkxhenlTbG93UGF0aCgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKAotICAgICAgICBDb2RlTG9j
YXRpb25KdW1wIHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRvbmUsCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
cGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZG9uZSwKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhjZXB0aW9u
VGFyZ2V0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICAgICAgQ2FsbFNp
dGVJbmRleCwgUmVmUHRyPEdlbmVyYXRvcj4KICAgICAgICAgKTsKIAotICAgIENvZGVMb2NhdGlv
bkp1bXAgcGF0Y2hhYmxlSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hhYmxlSnVtcDsgfQot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmUoKSBjb25zdCB7IHJldHVybiBtX2RvbmU7IH0KKyAg
ICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAoKSBjb25z
dCB7IHJldHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBkb25lKCkgY29uc3QgeyByZXR1cm4gbV9kb25lOyB9CiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7
IH0KICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxTaXRlSW5kZXg7IH0KIAogICAgIHZvaWQgZ2VuZXJhdGUoQ29kZUJsb2NrKik7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YigpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YjsgfQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gc3R1YigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R1YjsgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkp1bXAgbV9w
YXRjaGFibGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZG9uZTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBtX2V4Y2VwdGlvblRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50
ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcDsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgdGFnZ2VkIHdpdGggSlNJbnRlcm5hbFB0clRhZyBpbnN0ZWFkIG9mIEpTRW50cnlUYWcuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcxMgorICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IG1fZG9uZTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtX2V4Y2VwdGlvblRhcmdldDsKICAgICBS
ZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxTaXRl
SW5kZXg7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YjsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fc3R1YjsKICAgICBSZWZQdHI8R2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAot
ICAgIFZNJiB2bSwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1
bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFy
Z3VtZW50cykKIHsKICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCiAg
ICAgICAgIFs9LCAmdm1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDE1ICsxNDAsMTMgQEAgdm9pZCBsaW5rKFN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwotICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbChjYWxsVGFnKTsK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxs
KE9wZXJhdGlvblB0clRhZyk7CiAKICAgICAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAg
ICAgICAgUHRyVGFnIGxvb2t1cFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsTG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSA9IGppdC5jYWxsKGxvb2t1cFRhZyk7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgaml0
Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogICAgICAgICAgICAgbm9FeGNlcHRpb24ubGlu
aygmaml0KTsKIApAQCAtMTcyLDE0ICsxNzAsMTMgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLT5s
aW5rKGNhbGxBcml0eUNoZWNrLCBGdW5jdGlvblB0cihjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3Rv
ciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgY2FsbFRhZykpOwotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsTG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSwgbG9va3VwVGFnKSk7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cih2bS5nZXRDVElTdHViKGFyaXR5
Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgJnZt
KSwgTmVhckNvZGVQdHJUYWcpKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5Q
YXRoSnVtcHMsIENvZGVMb2NhdGlvbkxhYmVsKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2Vu
ZXJhdGVkRnVuY3Rpb24pKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0
eUNoZWNrLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNvZGVCbG9jay0+bV9pc0NvbnN0
cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2
bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAg
bGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFB0clRhZyBlbnRyeVRhZyA9IHB0clRhZyhG
VExDb2RlUHRyVGFnLCBjb2RlQmxvY2spOwotICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldGFnQ29kZVB0cjx2b2lk
Kj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24sIGVudHJ5VGFnLCBDb2RlUHRyVGFnKSkpOworCisg
ICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChzdGF0ZS5nZW5l
cmF0ZWRGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xOTgs
OSArMTk1LDkgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIHN0YXRlLmFs
bG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOworICAgICAgICBs
aW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcCwgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOwog
Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0YXJ0LCBDb2RlUHRyVGFnKSk7CisgICAgICAgIHN0YXRlLmppdENv
ZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KHN0YXJ0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxOSArMjg2LDE3IEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7Ci0gICAgICAgICAgICAgICAgICAgIFB0clRhZyB0aHJvd1RhZyA9IHB0clRhZyhGVExP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIHRocm93Q2FsbCA9IGppdC5jYWxsKHRocm93VGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHRocm93Q2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7Ci0gICAgICAgICAgICAgICAgICAgIFB0clRhZyBsb29rdXBUYWcgPSBwdHJU
YWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC5j
YWxsKGxvb2t1cFRhZyk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBs
b29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHIob3BlcmF0aW9uVGhy
b3dTdGFja092ZXJmbG93RXJyb3IsIHRocm93VGFnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlv
blB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBsb29rdXBUYWcpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGhyb3dDYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTM2NSw3ICszNjMs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBq
aXQuanVtcCgpOwogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpleGNl
cHRpb25IYW5kbGVyLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KCpleGNlcHRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CkBA
IC03MTcwLDE1ICs3MTY4LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlu
a0NhbGxQdHJUYWcsIHZtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJD
b2RlUHRyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFn
PihsaW5rQ2FsbCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9u
T2YodGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xvd0NhbGwpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+
KGZhc3RDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAK
QEAgLTczMTgsOSArNzMxNCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aCwg
U2xvd1BhdGhQdHJUYWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IHBhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihwYXRjaGFibGVKdW1wKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBjYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihjYWxs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiwKQEAgLTcz
NjcsMTMgKzczNjMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihzbG93UGF0aCwgTmVhckNvZGVQdHJUYWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBjYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihjYWxs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0Vu
dHJ5UHRyVGFnPihzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgc2xv
d1BhdGhMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TG9jYXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNzQ5MiwxNSAr
NzQ4OCwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFn
LCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlu
a0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRv
Q2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAgLTc2
MzcsOSArNzYzMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIoY2FsbGVlLCB0YWcpKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCB0YWcpOworICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY2FsbGVlKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2so
KnZtLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBl
cnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTc3OTMsMTUgKzc3
ODYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWco
TGlua0NhbGxQdHJUYWcsIHZtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5l
YXJDb2RlUHRyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhz
bG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRy
VGFnPihsaW5rQ2FsbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwoc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxs
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xv
d0NhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4odGFyZ2V0
VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RDYWxsKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKQEAgLTc5NzgsOSArNzk2OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNl
ZFJlZ2lzdGVycygpKTsKIAogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25D
aGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb25QdHIoY2FsbGVlLCB0YWcpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIwKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uQXJndW1lbnRHUFIwLCB0YWcpOworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
Y2FsbGVlKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BS
MCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBw
ZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4
Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAg
ICAgICAgIH07CiAKQEAgLTgwNzgsMTUgKzgwNjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
dGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xvd0NhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZh
c3RDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKQEAg
LTgxNjgsOSArODE1Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVxdWlyZWRCeXRl
cyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJlcXVp
cmVkQnl0ZXMpOwogICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25DYWxsRXZhbCk+KEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBQdHJUYWcgdGFn
ID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25Q
dHIob3BlcmF0aW9uQ2FsbEV2YWwsIHRhZykpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUjApOwotICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSMCwgdGFnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uQ2FsbEV2YWwpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsK
KyAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBw
ZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6
Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUg
PSBqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwpAQCAtODg1Miw4ICs4ODM5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFJlcGxhY2VtZW50IGp1
bXBSZXBsYWNlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGxhYmVsKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8T1NSRXhpdFB0clRhZz4o
aGFuZGxlLT5sYWJlbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9u
Lmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKGp1bXBSZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC05Njk3LDE4ICs5Njg0LDE4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoanVtcCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihqdW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guc3RhcnQgPSBzdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGRvbmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVTaXplID49IDApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5pbmxpbmVT
aXplID0gaW5saW5lU2l6ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHNsb3dQYXRoQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHNsb3dQ
YXRoQ2FsbCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEJl
Z2luKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc2xvd1BhdGhCZWdpbikpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTExOTE4LDcgKzExOTA1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcyA9IGRvbUpJVC0+
Z2VuZXJhdG9yKCktPnJ1bihqaXQsIGRvbUpJVFBhcmFtcyk7CiAKICAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGxpbmtCdWZmZXIubG9jYXRp
b25PZihoYW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oaGFuZGxlLT5s
YWJlbCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpmb3JDaGVjaygpOwpAQCAtMTE5NTcsNiArMTE5
NDQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50ICsgMTsKICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNpZ25hdHVyZS0+dW5zYWZlRnVuY3Rpb24pLCBDRnVuY3Rpb25QdHJUYWcpOwogICAgICAgICBz
d2l0Y2ggKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgICAgIGNhc2UgMToKICAg
ICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRVA+KHNpZ25hdHVyZS0+dW5zYWZlRnVuY3Rpb24pKSwg
bV9jYWxsRnJhbWUsIG9wZXJhbmRzWzBdKTsKQEAgLTExOTgzLDcgKzExOTcxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBnZXR0ZXIgZG9lcyBub3QgaGF2ZSBjb2RlIHNl
dHRpbmcgdG9wQ2FsbEZyYW1lLCBBcyBpcyB0aGUgc2FtZSB0byBJQywgd2Ugc2hvdWxkIHNldCB0
b3BDYWxsRnJhbWUgaW4gY2FsbGVyIHNpZGUuCiAgICAgICAgICAgICBtX291dC5zdG9yZVB0ciht
X2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUoJnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIp
LAorICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+
Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIucmV0YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczxDRnVuY3Rpb25QdHJUYWc+KCkpLAogICAgICAgICAgICAgICAgICAgICBtX2Nh
bGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnRQdHIobV9n
cmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmll
ck51bWJlcl0pKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzOTg5LDI2
ICsxMzk3NywyMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyB0aHVu
a1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIHZtKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9ySnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlTbG93UGF0aEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGdlbmVy
YXRvckp1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0tPmdldENUSVN0dWIobGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxM
YXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRo
PigpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBzbG93UGF0aFRh
ZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGxh
enlTbG93UGF0aC5nZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25KdW1wIGxpbmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBh
dGNoYWJsZUp1bXAsIHNsb3dQYXRoVGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5h
bFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoYWJs
ZUp1bXApKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBsaW5rZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUsIHNsb3dQYXRoVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihkb25lKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXggPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgob3JpZ2luKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXp5U2xvd1BhdGgtPmluaXRpYWxpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua2VkUGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxp
bmtCdWZmZXIsIHNsb3dQYXRoVGFnKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxpbmtCdWZmZXIp
LCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGxTaXRlSW5kZXgsIGdlbmVyYXRvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+bGF6eVNs
b3dQYXRoc1tpbmRleF0gPSBXVEZNb3ZlKGxhenlTbG93UGF0aCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTA4LDcgKzEwOCw3IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoCiB7CiB9CiAKLUNvZGVMb2NhdGlvbkp1
bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9j
aykgY29uc3QKK0NvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29k
ZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3QKIHsKICAg
ICBVTlVTRURfUEFSQU0oZnRsQ29kZUJsb2NrKTsKICAgICByZXR1cm4gbV9wYXRjaGFibGVKdW1w
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTE5LDEyICsxMTksMTIgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZH
OjpPU1JFeGl0QmFzZQogICAgIE9TUkV4aXQoT1NSRXhpdERlc2NyaXB0b3IqLCBFeGl0S2luZCwg
Q29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2Fz
SG9pc3RlZCk7CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9T
UkV4aXRQdHJUYWc+IG1fY29kZTsKICAgICAvLyBUaGlzIHRlbGxzIHVzIHdoZXJlIHRvIHBsYWNl
IGEganVtcC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKKyAgICBDb2Rl
TG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcDsKICAgICBWZWN0
b3I8QjM6OlZhbHVlUmVwPiBtX3ZhbHVlUmVwczsKIAotICAgIENvZGVMb2NhdGlvbkp1bXAgY29k
ZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAg
Q29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBjb2RlTG9jYXRpb25Gb3JSZXBhdGNo
KENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCiAgICAgewog
ICAgICAgICBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJv
ZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9tRlRMKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgK
IH0KIAogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCi0gICAgdW5zaWduZWQgZXhpdElELCBKSVRD
b2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBQdHJUYWcgZXhpdFNpdGVUYWcpCisgICAgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRD
b2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IC8vIFRoaXMgY29kZSByZXF1aXJlcyBmcmFtZVBvaW50ZXJSZWdpc3RlciBpcyB0aGUgc2FtZSBh
cyBjYWxsRnJhbWVSZWdpc3RlcgogICAgIHN0YXRpY19hc3NlcnQoTWFjcm9Bc3NlbWJsZXI6OmZy
YW1lUG9pbnRlclJlZ2lzdGVyID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAiTWFjcm9B
c3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIGFuZCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciBtdXN0IGJlIHRoZSBzYW1lIik7CkBAIC0zMzgsOSArMzM4LDggQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik+KAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpKTsKLSAg
ICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IsIHRhZykp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIHRhZyk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1hdGVyaWFsaXphdGlvblRv
UG9pbnRlci5nZXQobWF0ZXJpYWxpemF0aW9uKSk7CiAKICAgICAgICAgICAgIC8vIExldCBldmVy
eW9uZSBrbm93IHRoYXQgd2UncmUgZG9uZS4KQEAgLTM2Nyw5ICszNjYsOCBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
YXRlcmlhbGl6YXRpb24pLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQobWF0ZXJpYWxpemF0aW9uKSksCiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRz
KSk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0
UHRyVGFnSUQoKSk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUiwgdGFnKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
LCB0YWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9T
UikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICB9CiAKICAgICAvLyBTYXZlIGFsbCBzdGF0
ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBh
cHByb3ByaWF0ZSBwbGFjZSBpbgpAQCAtNDk2LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOwogICAg
IGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExP
U1JFeGl0KCksCi0gICAgICAgIHBhdGNoQnVmZmVyLCBleGl0U2l0ZVRhZywKKyAgICAgICAgcGF0
Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcsCiAgICAgICAgICJGVEwgT1NSIGV4aXQgIyV1ICglcywg
JXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCiAgICAgICAgICAgICBleGl0SUQsIHRv
Q1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAogICAgICAgICAgICAgZXhpdEtpbmRU
b1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCkBAIC01
NDQsMTMgKzU0MiwxMiBAQCBleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNT
CiAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmln
aW4pOwogCi0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsICZl
eGl0KTsKLSAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQsICZ2bSwgY29kZUJs
b2NrLCB0aHVua1RhZyk7CisgICAgY29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBleGl0LCAm
dm0sIGNvZGVCbG9jayk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAg
ICAgIGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25M
YWJlbChleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkp
OworICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxv
Y2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAgICAgCi0g
ICAgcmV0dXJuIGV4aXQubV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgYml0d2lzZV9jYXN0
PFB0clRhZz4oZXhlYykpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIGV4aXQubV9j
b2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhh
bmRsZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0NywxMyBAQCB2
b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtzZWxmLCBqdW1wLCBteUxh
YmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKGxpbmtC
dWZmZXIubG9jYXRpb25PZihqdW1wKSk7CisgICAgICAgICAgICBzZWxmLT5leGl0Lm1fcGF0Y2hh
YmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGp1bXApKTsKIAotICAgICAgICAgICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsICZ2bSk7CiAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsCi0gICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOwor
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRD
VElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAg
ICAgICAgaWYgKGNvbXBpbGF0aW9uKQotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRP
U1JFeGl0U2l0ZSh7IGxpbmtCdWZmZXIubG9jYXRpb25PZihteUxhYmVsKS5leGVjdXRhYmxlQWRk
cmVzcygpIH0pOworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0ZSh7
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihteUxhYmVsKSB9KTsKICAg
ICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDggKzU4MSw3IEBAIGV4
dGVybiAiQyIgdm9pZCogSklUX09QRVJBVElPTiBjb21waWxlRlQKICAgICBMYXp5U2xvd1BhdGgm
IGxhenlTbG93UGF0aCA9ICpqaXRDb2RlLT5sYXp5U2xvd1BhdGhzW2luZGV4XTsKICAgICBsYXp5
U2xvd1BhdGguZ2VuZXJhdGUoY29kZUJsb2NrKTsKIAotICAgIFB0clRhZyBzbG93UGF0aFRhZyA9
IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KCZsYXp5
U2xvd1BhdGgpKTsKLSAgICByZXR1cm4gbGF6eVNsb3dQYXRoLnN0dWIoKS5yZXRhZ2dlZENvZGUo
c2xvd1BhdGhUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgdm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZQogICAgICAg
ICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gaGFuZGxlcjsKICAgICAgICAg
ICAgICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGNhbGxTaXRlSW5kZXguYml0cygpOwogICAg
ICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0cygpICsg
MTsKLSAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAg
ICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaGFuZGxlLT5sYWJlbCk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+YXBwZW5kRXhjZXB0aW9uSGFuZGxlcihuZXdIYW5kbGVyKTsK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMywyNSArMTEzLDIyIEBAIFNsb3dQYXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENh
bGxDb250ZXgKICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9
CiAKLVNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KHZv
aWQqIGNhbGxUYXJnZXQpIGNvbnN0CitTbG93UGF0aENhbGxLZXkgU2xvd1BhdGhDYWxsQ29udGV4
dDo6a2V5V2l0aFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgY2Fs
bFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQpOwogfQogCi1TbG93UGF0aENh
bGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwoVk0mIHZtLCBGdW5jdGlvblB0ciBjYWxs
VGFyZ2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2
bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQogewotICAgIHZvaWQq
IGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbFRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKGV4ZWN1dGFibGVBZGRyZXNzKTsKLSAgICBTbG93UGF0aENh
bGxLZXkga2V5ID0ga2V5V2l0aFRhcmdldChleGVjdXRhYmxlQWRkcmVzcyk7Ci0gICAgUHRyVGFn
IGNhbGxUYWcgPSBrZXkuY2FsbFB0clRhZygpOwotICAgIFNsb3dQYXRoQ2FsbCByZXN1bHQgPSBT
bG93UGF0aENhbGwobV9qaXQuY2FsbChjYWxsVGFnKSwga2V5KTsKKyAgICBTbG93UGF0aENhbGxL
ZXkga2V5ID0ga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgcmVz
dWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKSwga2V5KTsKIAog
ICAgIG1faml0LmFkZExpbmtUYXNrKAogICAgICAgICBbcmVzdWx0LCAmdm1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGh1bmsg
PQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHVu
ayA9CiAgICAgICAgICAgICAgICAgdm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhy
ZXN1bHQua2V5KCkpOwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVzdWx0LmNhbGwo
KSwgQ29kZUxvY2F0aW9uTGFiZWwodGh1bmsuY29kZSgpKSk7CisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsocmVzdWx0LmNhbGwoKSwgQ29kZUxvY2F0aW9uTGFiZWw8T3BlcmF0aW9uUHRyVGFn
Pih0aHVuay5yZXRhZ2dlZENvZGU8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIH0pOwog
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1
OSwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBOT1RFOiBUaGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJu
cyBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBieSB0aGUgSklUIHVzaW5nIGFkZExpbmtU
YXNrKCksCiAgICAgLy8gc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91
cnNlbGYuCi0gICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgRnVuY3Rpb25QdHIgY2FsbFRh
cmdldCk7CisgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KTsKIAogcHJpdmF0ZToKLSAgICBTbG93UGF0aENhbGxLZXkg
a2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKKyAgICBTbG93UGF0aENhbGxL
ZXkga2V5V2l0aFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQp
IGNvbnN0OwogICAgIAogICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7CiAgICAg
UmVnaXN0ZXJTZXQgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKQEAgLTc4LDcgKzc4LDcg
QEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBTbG93UGF0
aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBWTSYgdm0sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhj
ZXB0aW9uVGFyZ2V0LAotICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BS
LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKIHsKICAgICBTbG93UGF0aENhbGwgY2FsbDsKICAgICB7CkBAIC05NCw3ICs5NCw3IEBA
IFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRUeXBlcz4KIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFZNJiB2bSwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9u
VGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCiAgICAgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKQEAgLTExMCw3ICsxMTAs
NyBAQCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luCiB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAg
ICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVz
dWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKAogICAgICAgICBzdGF0ZS52bSgpLCB1c2VkUmVnaXN0ZXJzLCBq
aXQsIGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKHN0YXRlLCBjb2RlT3JpZ2luKSwgZXhjZXB0
aW9uVGFyZ2V0LCBmdW5jdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCBTbG93
UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJp
bnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBt
X29mZnNldCwgIiwgY2FsbFRhcmdldCA9ICIsIFJhd1BvaW50ZXIobV9jYWxsVGFyZ2V0KSwgIiwg
YXJndW1lbnRSZWdpc3RlcnMgPSAiLCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCAiPiIpOworICAgIG91
dC5wcmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9
ICIsIG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSksICIsIGFyZ3VtZW50UmVnaXN0ZXJzID0gIiwgbV9hcmd1bWVu
dFJlZ2lzdGVycywgIj4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAotI2luY2x1ZGUgIlB0clRhZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKQEAgLTQ1LDI5ICs0NSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiBjbGFzcyBTbG93UGF0aENhbGxLZXkgewogcHVibGljOgogICAgIFNsb3dQYXRoQ2Fs
bEtleSgpCi0gICAgICAgIDogbV9jYWxsVGFyZ2V0KDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkK
KyAgICAgICAgOiBtX29mZnNldCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgU2xvd1BhdGhD
YWxsS2V5KAotICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgc2V0LCB2b2lkKiBjYWxsVGFyZ2V0
LCBjb25zdCBSZWdpc3RlclNldCYgYXJndW1lbnRSZWdpc3RlcnMsCisgICAgICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBzZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCwg
Y29uc3QgUmVnaXN0ZXJTZXQmIGFyZ3VtZW50UmVnaXN0ZXJzLAogICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0KQogICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhzZXQpCi0gICAgICAgICwgbV9jYWxs
VGFyZ2V0KGNhbGxUYXJnZXQpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KGNhbGxUYXJnZXQucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKQogICAgICAgICAsIG1fYXJndW1lbnRSZWdpc3RlcnMo
YXJndW1lbnRSZWdpc3RlcnMpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgIHsKICAg
ICB9CiAgICAgCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7
IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KLSAgICB2b2lkKiBjYWxsVGFyZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBjYWxsVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CiAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGFyZ3VtZW50UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dFJlZ2lzdGVyczsgfQogICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldCh2b2lkKiBj
YWxsVGFyZ2V0KQorICAgIFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldChGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAgICAgICAgcmV0dXJuIFNs
b3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIGFyZ3VtZW50UmVnaXN0
ZXJzKCksIG9mZnNldCgpKTsKICAgICB9CiAgICAgCkBAIC03OCwxNCArNzYsMTIgQEAgcHVibGlj
OgogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleShFbXB0eVZhbHVlVGFnKQogICAgICAgICA6IG1f
dXNlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6RW1wdHlWYWx1ZSkKLSAgICAgICAgLCBtX2NhbGxU
YXJnZXQoMCkKICAgICAgICAgLCBtX29mZnNldCgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAg
U2xvd1BhdGhDYWxsS2V5KERlbGV0ZWRWYWx1ZVRhZykKICAgICAgICAgOiBtX3VzZWRSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OkRlbGV0ZWRWYWx1ZSkKLSAgICAgICAgLCBtX2NhbGxUYXJnZXQoMCkK
ICAgICAgICAgLCBtX29mZnNldCgwKQogICAgIHsKICAgICB9CkBAIC0xMDEsMTkgKzk3LDEyIEBA
IHB1YmxpYzoKICAgICB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1f
Y2FsbFRhcmdldCkgKyBtX29mZnNldDsKLSAgICB9Ci0KLSAgICBQdHJUYWcgY2FsbFB0clRhZygp
IGNvbnN0Ci0gICAgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBpbmNsdWRlIGZhY3RvcnMg
d2hpY2ggYXJlIGludmFyaWFudCBmb3IgdGhlIHNhbWUgc2xvdyBwYXRoIHNpdGUuCi0gICAgICAg
IC8vIG1fY2FsbFRhcmdldCBjYW4gdmFyeSBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkLgotICAgICAg
ICByZXR1cm4gcHRyVGFnKEZUTFNsb3dQYXRoUHRyVGFnLCBtX3VzZWRSZWdpc3RlcnMuaGFzaCgp
LCBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsgUHRy
SGFzaDx2b2lkKj46Omhhc2gobV9jYWxsVGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpICsgbV9v
ZmZzZXQ7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKLSAgICB2b2lkKiBtX2NhbGxUYXJnZXQ7CisgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBtX2NhbGxUYXJnZXQ7CiAgICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsK
ICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNiBA
QCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAg
IDogZ3JhcGgoZ3JhcGgpCi0gICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogewogICAgIHN3aXRj
aCAoZ3JhcGgubV9wbGFuLm1vZGUpIHsKICAgICBjYXNlIEZUTE1vZGU6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsOCArNDYsOCBAQCBlbnVtIGNsYXNzIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyCiAg
ICAgTm90TmVlZGVkIAogfTsKIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmlj
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgRnVuY3Rpb25QdHIgZ2VuZXJh
dGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGh1bmtUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVu
c2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJl
bWVudCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVy
YXRvcigKKyAgICBWTSogdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2VuZXJhdGlv
bkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBl
eHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJh
bWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMg
aml0KG51bGxwdHIpOwogCkBAIC04Niw5ICs4Niw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZ2VuZXJpY0dlbmUKICAgICBqaXQucGVlaygKICAgICAgICAgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLAogICAgICAgICAoc3RhY2tNaXNhbGlnbm1lbnQgLSBNYWNyb0Fzc2VtYmxlcjo6cHVz
aFRvU2F2ZUJ5dGVPZmZzZXQoKSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICBQdHJUYWcgZ2VuZXJh
dG9yQ2FsbFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbChnZW5lcmF0
b3JDYWxsVGFnKTsKLSAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3
YW50IHRvIG1ha2UgYSB0YWlsIGNhbGwgdG8gd2hhdCB3YXMgcmV0dXJuZWQgdG8gdXMgaW4gdGhl
CiAgICAgLy8gcmV0dXJuVmFsdWVHUFIuIEJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGRvIHRo
aXMsIHdlIG11c3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzLgogICAgIC8vIFRoZSB3YXkgd2Ugd2ls
bCBhY2NvbXBsaXNoIHRoaXMgaXMgYnkgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHRhaWwgY2FsbCB0
YXJnZXQgaW4gdGhlCkBAIC0xMTcsMzAgKzExNiwzMCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGdlbmVyaWNHZW5lCiAgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7
CiAKICNpZiBDUFUoQVJNNjQpICYmIFVTRShQT0lOVEVSX1BST0ZJTElORykKLSAgICBqaXQudW50
YWdQdHIoQXNzZW1ibHlIZWxwZXJzOjpsaW5rUmVnaXN0ZXIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICBqaXQudW50YWdQdHIoQXNzZW1ibHlIZWxwZXJzOjpsaW5rUmVnaXN0ZXIs
IHJlc3VsdFRhZyk7CiAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHJlc3VsdFRhZyk7CiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGdlbmVyYXRpb25GdW5jdGlvbiwg
Z2VuZXJhdG9yQ2FsbFRhZykpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCByZXN1bHRUaHVua1RhZywgIiVzIiwgbmFtZSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5j
dGlvbkNhbGwsIGdlbmVyYXRpb25GdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IiVzIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdW5z
aWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMDsKLSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJU
YWcoRlRMT1NSRXhpdFB0clRhZywgdm0pOwogICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29tcGlsZUZUTE9TUkV4aXQp
LCB0aHVua1RhZywgIkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9S
ZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOZWVkZWQpOworICAg
ICAgICB2bSwgY29tcGlsZUZUTE9TUkV4aXQsIE9TUkV4aXRQdHJUYWcsICJGVEwgT1NSIGV4aXQg
Z2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVz
dG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxh
enlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMTsKLSAg
ICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCB2bSk7CiAg
ICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAgICAgIHZtLCBG
dW5jdGlvblB0cihjb21waWxlRlRMTGF6eVNsb3dQYXRoKSwgdGh1bmtUYWcsICJGVEwgbGF6eSBz
bG93IHBhdGggZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRT
dGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsKKyAgICAgICAgdm0sIGNvbXBp
bGVGVExMYXp5U2xvd1BhdGgsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLCAiRlRMIGxhenkgc2xvdyBw
YXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tB
ZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5vdE5lZWRlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQ2xvYmJlckNoZWNrKEFzc2VtYmx5SGVscGVycyYgaml0LCBSZWdpc3RlclNldCBkb250Q2xv
YmJlcikKQEAgLTE3MSw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVj
ayhBc3NlbWJsCiAgICAgfQogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxs
VGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYga2V5KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0
cik7CiAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTIwNCw5ICsyMDMsOCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSkpOwogICAgIAogICAgIHJlZ2lz
dGVyQ2xvYmJlckNoZWNrKGppdCwga2V5LmFyZ3VtZW50UmVnaXN0ZXJzKCkpOwotICAgIAotICAg
IFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lE
KCkpOwotICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7
CisKKyAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAKICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwpAQCAtMjMyLDgg
KzIzMCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAgICBq
aXQucmV0KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxsVGFy
Z2V0KCksIGNhbGxUYWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
a2V5LmNhbGxQdHJUYWcoKSwgIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NT
dHJpbmcoa2V5KS5kYXRhKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwga2V5LmNhbGxU
YXJnZXQoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkp
LmRhdGEoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwzNiArMzgsMzYg
QEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBGVEwgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2Fs
bEtleSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93UGF0aENhbGxUaHVua0dlbmVy
YXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlw
ZUFyZ3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKICAgICB0eXBlZGVmIEtleVR5cGVBcmd1bWVu
dCBLZXlUeXBlOwotICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IFRvVGh1bmtNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciwgS2V5VHlwZT4gRnJvbVRodW5rTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBl
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBUb1RodW5rTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+LCBL
ZXlUeXBlPiBGcm9tVGh1bmtNYXA7CiAgICAgCiAgICAgVG9UaHVua01hcCBtX3RvVGh1bms7CiAg
ICAgRnJvbVRodW5rTWFwIG1fZnJvbVRodW5rOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFw
VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5l
cmF0ZUlmTmVjZXNzYXJ5KAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBn
ZW5lcmF0ZUlmTmVjZXNzYXJ5KAogICAgIE1hcFR5cGUmIG1hcCwgY29uc3QgdHlwZW5hbWUgTWFw
VHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JUeXBlIGdlbmVyYXRvcikKIHsKICAgICB0eXBl
bmFtZSBNYXBUeXBlOjpUb1RodW5rTWFwOjppdGVyYXRvciBpdGVyID0gbWFwLm1fdG9UaHVuay5m
aW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgIT0gbWFwLm1fdG9UaHVuay5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGl0ZXItPnZhbHVlOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByZXN1
bHQgPSBnZW5lcmF0b3Ioa2V5KTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gcmVzdWx0ID0gZ2VuZXJhdG9yKGtleSk7CiAgICAgbWFwLm1fdG9UaHVuay5hZGQo
a2V5LCByZXN1bHQpOwogICAgIG1hcC5tX2Zyb21UaHVuay5hZGQocmVzdWx0LmNvZGUoKSwga2V5
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgot
dHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSBrZXlGb3JUaHVuayhNYXBUeXBlJiBtYXAsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBwdHIpCit0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRo
dW5rKE1hcFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBw
dHIpCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6RnJvbVRodW5rTWFwOjppdGVyYXRvciBpdGVy
ID0gbWFwLm1fZnJvbVRodW5rLmZpbmQocHRyKTsKICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9
IG1hcC5tX2Zyb21UaHVuay5lbmQoKSk7CkBAIC03OSwxMyArNzksMTMgQEAgY2xhc3MgVGh1bmtz
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHVua3MpOwogcHVibGljOgogICAgIFRodW5r
cygpID0gZGVmYXVsdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxs
VGh1bmsoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZXRTbG93UGF0aENhbGxUaHVuayhjb25zdCBTbG93UGF0aENh
bGxLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAog
ICAgICAgICAgICAgbV9zbG93UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1bmtH
ZW5lcmF0b3IpOwogICAgIH0KLSAgICAKLSAgICBTbG93UGF0aENhbGxLZXkga2V5Rm9yU2xvd1Bh
dGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKKworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlGb3JTbG93UGF0aENhbGxUaHVuayhNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IHB0cikKICAgICB7CiAgICAgICAgIHJldHVybiBrZXlGb3JUaHVuayhtX3Nsb3dQ
YXRoQ2FsbFRodW5rcywgcHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIE9wY29kZUlE
IEludGVycHJldGVyOjpnZXRPcGNvZGVJRAogICAgIC8vIFRoZSBPcGNvZGVJRCBpcyBlbWJlZGRl
ZCBpbiB0aGUgaW50MzJfdCB3b3JkIHByZWNlZGluZyB0aGUgbG9jYXRpb24gb2YKICAgICAvLyB0
aGUgTExJbnQgY29kZSBmb3IgdGhlIG9wY29kZSAoc2VlIHRoZSBFTUJFRF9PUENPREVfSURfSUZf
TkVFREVEIG1hY3JvCiAgICAgLy8gaW4gTG93TGV2ZWxJbnRlcnByZXRlci5jcHApLgotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKHJlbW92ZUNvZGVQdHJUYWc8dm9pZCo+KG9wY29k
ZSkpOworICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvcGNvZGUpOwogICAgIGludDMyX3Qq
IG9wY29kZUlEQWRkcmVzcyA9IGNvZGVQdHIuZGF0YUxvY2F0aW9uPGludDMyX3QqPigpIC0gMTsK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IHN0YXRpY19jYXN0PE9wY29kZUlEPigqb3Bjb2RlSURB
ZGRyZXNzKTsKICAgICBBU1NFUlQob3Bjb2RlSUQgPCBOVU1CRVJfT0ZfQllURUNPREVfSURTKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw4IEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eigKICNlbHNlCiAgICAgbW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgotICAgIFB0
clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25FeGNlcHRpb25G
dXp6LCB0YWcpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBjYWxs
KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgdGFnKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uRXhjZXB0
aW9uRnV6eikpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGNhbGwo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBPcGVyYXRpb25QdHJUYWcpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKQEAgLTcxMywxMCArNzEyLDkgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbAogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soCiAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhM
aW5rVmlydHVhbENhbGxQdHJUYWcsICZ2bSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAqaW5mbyk7CiAgICAgICAgICAgICBpbmZvLT5z
ZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssIHZtLCBudWxscHRy
LCB0cnVlKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9u
TGFiZWwodmlydHVhbFRodW5rLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZykp
KTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9KTsK
IH0KIApAQCAtOTMzLDkgKzkzMSw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwo
Vk0mIHZtLCAKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv
cm0uIgogI2VuZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KGZ1bmN0aW9uLCB0YWcpKSwgc2NyYXRjaCk7Ci0gICAgY2FsbChzY3JhdGNoLCB0YWcpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihmdW5j
dGlvbikpLCBzY3JhdGNoKTsKKyAgICBjYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVu
Z3RoKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgR1BSSW5mbzo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSw4IEBA
IHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpLCBzaGFkb3dQYWNrZXQpOwogICAgIEp1bXAgb2sgPSBi
cmFuY2hQdHIoQmVsb3csIHNoYWRvd1BhY2tldCwgVHJ1c3RlZEltbVB0cih2bS5zaGFkb3dDaGlj
a2VuKCkubG9nRW5kKCkpKTsKICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Q
cm9jZXNzU2hhZG93Q2hpY2tlbkxvZyk+KCk7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRP
cGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB0YWcpKSwg
c2NyYXRjaDFOb25BcmdHUFIpOwotICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIHRhZyk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKKyAg
ICBjYWxsKHNjcmF0Y2gxTm9uQXJnR1BSLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih2bS5zaGFkb3dDaGlja2VuKCkuYWRkcmVzc09mTG9nQ3Vyc29yKCkpLCBzY3Jh
dGNoMU5vbkFyZ0dQUik7CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwg
c2hhZG93UGFja2V0KTsKICAgICBvay5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMzA3
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQgd2lsbCBzZXJ2ZSBh
cyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHdyaXRlVGh1bmsgPSBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0dWJCYXNlLCBzdHViU2l6ZSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gd3JpdGVUaHVu
ayA9IGppdFdyaXRlVGh1bmtHZW5lcmF0b3IocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3JpdGFi
bGVBZGRyKSwgc3R1YkJhc2UsIHN0dWJTaXplKTsKIAogICAgICAgICBpbnQgcmVzdWx0ID0gMDsK
IApAQCAtMjMxLDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgQ1BVKEFSTTY0KSAm
JiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiB3cml0YWJsZUFkZHIsIHZvaWQq
IHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwg
dm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKICAgICB7CiAgICAgICAgIHVzaW5nIG5h
bWVzcGFjZSBBUk02NFJlZ2lzdGVyczsKICAgICAgICAgdXNpbmcgVHJ1c3RlZEltbTMyID0gTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMjsKQEAgLTI5OSw4ICsyOTksNyBAQCBwcml2YXRlOgog
ICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVtb3J5
LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZlci4KICAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3
ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgY29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5nIHRo
ZQogICAgICAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwg
c2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUV3JpdGVUaHVua1B0clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRh
Zyk7CisgICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseTxKSVRUaHVua1B0clRhZz4oKTsKICAgICB9CiAjZWxzZSAvLyBDUFUoQVJNNjQpICYmIFVT
RShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQogICAgIHN0YXRpYyB2b2lkIGdlbmVy
aWNXcml0ZVRvSklUUmVnaW9uKG9mZl90IG9mZnNldCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
IGRhdGFTaXplKQpAQCAtMzA4LDE1ICszMDcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgbWVtY3B5
KCh2b2lkKikoc3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQb29sICsgb2Zmc2V0KSwgZGF0YSwg
ZGF0YVNpemUpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBqaXRXcml0ZVRo
dW5rR2VuZXJhdG9yKHZvaWQqIGFkZHJlc3MsIHZvaWQqLCBzaXplX3QpCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQq
IGFkZHJlc3MsIHZvaWQqLCBzaXplX3QpCiAgICAgewogICAgICAgICBzdGFydE9mRml4ZWRXcml0
YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcyk7Ci0g
ICAgICAgIHVpbnRwdHJfdCBmdW5jdGlvbiA9ICh1aW50cHRyX3QpKCh2b2lkKikmZ2VuZXJpY1dy
aXRlVG9KSVRSZWdpb24pOworICAgICAgICB2b2lkKiBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KCZnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbik7CiAjaWYgQ1BVKEFSTV9USFVNQjIp
CiAgICAgICAgIC8vIEhhbmRsZSB0aHVtYiBvZmZzZXQKLSAgICAgICAgZnVuY3Rpb24gLT0gMTsK
KyAgICAgICAgdWludHB0cl90IGZ1bmN0aW9uQXNJbnQgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oZnVuY3Rpb24pOworICAgICAgICBmdW5jdGlvbkFzSW50IC09IDE7CisgICAgICAgIGZ1
bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25Bc0ludCk7CiAjZW5kaWYK
LSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cigodm9pZCopZnVuY3Rpb24pKTsKKyAgICAgICAg
YXV0byBjb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPih0YWdD
RnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoY29kZVB0cik7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEsOCArOTEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIHBlcmZvcm1KSVRN
ZW1jcHkodm9pCiAgICAgICAgICAgICAvLyBVc2UgZXhlY3V0ZS1vbmx5IHdyaXRlIHRodW5rIGZv
ciB3cml0ZXMgaW5zaWRlIHRoZSBKSVQgcmVnaW9uLiBUaGlzIGlzIGEgdmFyaWFudCBvZgogICAg
ICAgICAgICAgLy8gbWVtY3B5IHRoYXQgdGFrZXMgYW4gb2Zmc2V0IGludG8gdGhlIEpJVCByZWdp
b24gYXMgaXRzIGRlc3RpbmF0aW9uIChmaXJzdCkgcGFyYW1ldGVyLgogICAgICAgICAgICAgb2Zm
X3Qgb2Zmc2V0ID0gKG9mZl90KSgodWludHB0cl90KWRzdCAtIHN0YXJ0T2ZGaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sKTsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUV3JpdGVU
aHVua1B0clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKLSAgICAgICAgICAg
IHJldGFnQ29kZVB0cihqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbiwgdGFnLCBDRnVuY3Rp
b25QdHJUYWcpKG9mZnNldCwgc3JjLCBuKTsKKyAgICAgICAgICAgIHJldGFnQ29kZVB0cjxKSVRU
aHVua1B0clRhZywgQ0Z1bmN0aW9uUHRyVGFnPihqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlv
bikob2Zmc2V0LCBzcmMsIG4pOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVK
SVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MSw3ICs0MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpH
Q0F3YXJlSklUU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBj
b2RlLCBWTSYgdm0pCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtKQogICAgIDogSklUU3R1YlJvdXRpbmUoY29kZSkKICAg
ICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCiAgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkK
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZAogfQogCiBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0
dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZt
LCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwK
ICAgICBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzKQogICAgIDogR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKGNvZGUsIHZtKQogICAgICwgbV9jZWxscyhjZWxscy5zaXplKCkpCkBAIC0xMDMsNyAr
MTAzLDcgQEAgdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUgogCiAKIEdD
QXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcigKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0Nl
bGwqPiYgY2VsbHMsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiYgY29kZSwgVk0mIHZtLCAgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVj
dG9yPEpTQ2VsbCo+JiBjZWxscywKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4Y2VwdGlv
bkhhbmRsZXJzLCBDYWxsU2l0ZUluZGV4IGV4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4KQog
ICAgIDogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgb3duZXIsIGNlbGxz
KQogICAgICwgbV9jb2RlQmxvY2tXaXRoRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2tGb3JFeGNl
cHRpb25IYW5kbGVycykKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91
dGluZVdpdGhFeGNlcHRpb25ICiAKIAogUmVmPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHVi
Um91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwKICAg
ICBWTSYgdm0sCiAgICAgY29uc3QgSlNDZWxsKiBvd25lciwKICAgICBib29sIG1ha2VzQ2FsbHMs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyAr
NDksNyBAQCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIC8vIGxpc3Qgd2hpY2ggZG9lcyBub3Qg
Z2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSkuCiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUg
OiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgewogcHVibGljOgotICAgIEdDQXdhcmVKSVRTdHViUm91
dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYpOworICAgIEdDQXdhcmVKSVRT
dHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+JiwgVk0mKTsKICAgICB2aXJ0dWFsIH5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsKICAgICAK
ICAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03
Niw3ICs3Niw3IEBAIHByaXZhdGU6CiBjbGFzcyBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5l
IDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6CiAgICAgTWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mKTsKKyAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYs
IFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+Jik7CiAgICAg
dmlydHVhbCB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgpOwogICAgIAogcHJvdGVjdGVk
OgpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0
aW9uCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgQmFzZTsKIAot
ICAgIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9y
PEpTQ2VsbCo+JiwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisgICAgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3Qg
VmVjdG9yPEpTQ2VsbCo+JiwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CiAKICAgICB2b2lk
IGFib3V0VG9EaWUoKSBvdmVycmlkZTsKICAgICB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKSBv
dmVycmlkZTsKQEAgLTExMSw3ICsxMTEsNyBAQCBwcml2YXRlOgogLy8gYWZ0ZXIgdGhlIGZpcnN0
IGNhbGwgdG8gQysrIG9yIEpTLgogLy8gCiAvLyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKAotLy8gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAor
Ly8gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYg
Y29kZSwKIC8vICAgIFZNJiB2bSwKIC8vICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAvLyAgICBi
b29sIG1ha2VzQ2FsbHMsCkBAIC0xMjQsNyArMTI0LDcgQEAgcHJpdmF0ZToKIC8vIHdheS4KIAog
UmVmPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXND
YWxscywKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMsCiAgICAgY29u
c3QgVmVjdG9yPEpTQ2VsbCo+JiA9IHsgfSwgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JF
eGNlcHRpb25IYW5kbGVycyA9IG51bGxwdHIsIENhbGxTaXRlSW5kZXggZXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NywxMSArNjcsMTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
U2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGls
ZVRpbWU7CiAKLXZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKAotICAgICAgICBDb2RlTG9jYXRpb25DYWxsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksCi0gICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksCisgICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKIEpJVDo6SklUKFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0KQpAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmco
SklUQ29tcGkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAg
ICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCBtX3ZtKSwgTmVhckNvZGVQdHJUYWcp
KTsKKyAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBB
U1NFUlRzLgpAQCAtNzg4LDI3ICs3ODgsMjUgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5r
KCkKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+
YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUt
PmN0aU9mZnNldHMuc2l6ZSgpKTsKIAogICAgICAgICAgICAgYXV0byogc2ltcGxlSnVtcFRhYmxl
ID0gcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGU7Ci0gICAgICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBzaW1wbGVKdW1wVGFibGUpOwotICAgICAg
ICAgICAgc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgdGFnKTsK
KyAgICAgICAgICAgIHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3Jk
LmRlZmF1bHRPZmZzZXRdKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcmVjb3JkLmp1bXBUYWJs
ZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHNbal07CiAgICAgICAgICAgICAgICAgc2lt
cGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzW2pdID0gb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAg
ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNl
dF0sIHRhZykKKyAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
U3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pCiAgICAgICAg
ICAgICAgICAgICAgIDogc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3
aXRjaFJlY29yZDo6U3RyaW5nKTsKIAogICAgICAgICAgICAgYXV0byogc3RyaW5nSnVtcFRhYmxl
ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGU7Ci0gICAgICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBzdHJpbmdKdW1wVGFibGUpOwogICAgICAg
ICAgICAgc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0KLSAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1
bHRPZmZzZXRdLCB0YWcpOworICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKIAogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHN0cmluZ0p1bXBU
YWJsZS0+b2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBsb2NhdGlvbi5icmFuY2hPZmZzZXQ7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24u
Y3RpT2Zmc2V0ID0gb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0sIHRhZykKKyAgICAgICAg
ICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pCiAgICAgICAgICAgICAgICAgICAgIDogc3Ry
aW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04
MTYsNyArODE0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMo
KTsgKytpKSB7CiAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbaGFuZGxlci50YXJnZXRdLCBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnKTsKKyAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisg
ICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4obV9sYWJlbHNbaGFuZGxlci50YXJnZXRdKTsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fY2FsbHMpIHsKQEAgLTgzMiwxOCArODMxLDE4IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fcHV0QnlJZHNbaV0uZmluYWxp
emUocGF0Y2hCdWZmZXIpOwogCiAgICAgaWYgKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgp
KSB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fZXhjZXB0aW9uSGFuZGxlciwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4
Y2VwdGlvbkhhbmRsZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KG1fZXhjZXB0aW9uSGFuZGxlcik7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBi
eVZhbENvbXBpbGF0aW9uSW5mbyA6IG1fYnlWYWxDb21waWxhdGlvbkluZm8pIHsKICAgICAgICAg
ICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlTm90SW5kZXhKdW1wID0gYnlWYWxDb21waWxhdGlv
bkluZm8ubm90SW5kZXhKdW1wOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBub3RJbmRl
eEp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKCk7CisgICAgICAgICAgICBhdXRvIG5vdEluZGV4SnVt
cCA9IENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGlmIChK
dW1wKHBhdGNoYWJsZU5vdEluZGV4SnVtcCkuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBub3RJ
bmRleEp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hh
YmxlTm90SW5kZXhKdW1wKSk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVK
dW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGls
YXRpb25JbmZvLmJhZFR5cGVKdW1wKSk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBk
b25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5k
b25lVGFyZ2V0KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIG5leHRIb3RQYXRoVGFy
Z2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5uZXh0SG90
UGF0aFRhcmdldCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdl
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8uc2xvd1BhdGhU
YXJnZXQpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCByZXR1cm5BZGRyZXNzID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5yZXR1cm5BZGRyZXNzKTsK
KyAgICAgICAgICAgICAgICBub3RJbmRleEp1bXAgPSBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQ
dHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4ocGF0Y2hhYmxlTm90
SW5kZXhKdW1wKSk7CisgICAgICAgICAgICBhdXRvIGJhZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9u
SnVtcDxKU0VudHJ5UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KGJ5VmFsQ29tcGlsYXRpb25JbmZvLmJhZFR5cGVKdW1wKSk7CisgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4gZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
Tm9QdHJUYWc+KGJ5VmFsQ29tcGlsYXRpb25JbmZvLmRvbmVUYXJnZXQpOworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+IG5leHRIb3RQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxOb1B0clRhZz4oYnlWYWxDb21waWxhdGlvbkluZm8ubmV4dEhvdFBhdGhU
YXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+IHNsb3dQYXRo
VGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oYnlWYWxDb21waWxhdGlv
bkluZm8uc2xvd1BhdGhUYXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxOb1B0
clRhZz4gcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGJ5
VmFsQ29tcGlsYXRpb25JbmZvLnJldHVybkFkZHJlc3MpOwogCiAgICAgICAgICAgICAqYnlWYWxD
b21waWxhdGlvbkluZm8uYnlWYWxJbmZvID0gQnlWYWxJbmZvKAogICAgICAgICAgICAgICAgIGJ5
VmFsQ29tcGlsYXRpb25JbmZvLmJ5dGVjb2RlSW5kZXgsCkBAIC04NjEsMjIgKzg2MCwyMCBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25J
bmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwogICAgICAgICBpbmZvLnNldENhbGxM
b2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikpLAotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZihjb21waWxh
dGlvbkluZm8uaG90UGF0aEJlZ2luKSksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTRW50cnlQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
KSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdp
bikpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpKTsKICAgICB9CiAKICAgICBKSVRD
b2RlTWFwIGppdENvZGVNYXA7CiAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7
IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0g
ICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkgewotICAgICAgICAg
ICAgUHRyVGFnIHRhZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBtX2NvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICAgICAgaml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQsIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLCB0YWcpKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisg
ICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChieXRlY29kZU9mZnNldCwgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAg
ICB9CiAgICAgaml0Q29kZU1hcC5maW5pc2goKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29k
ZU1hcChXVEZNb3ZlKGppdENvZGVNYXApKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9hcml0eUNoZWNrLCBDb2Rl
UHRyVGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFy
aXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlD
aGVjayk7CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPmR1bXAocGF0Y2hCdWZmZXIpOwpAQCAtODkxLDggKzg4OCw4IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0Nv
ZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZSht
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKSk7CiAgICAgCi0gICAgQ29k
ZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwgQ29kZVB0
clRhZywKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUo
CisgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFj
aGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCkBAIC05MzMs
OCArOTMwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAg
ICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwodGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCB0
YWcpKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25Q
dHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkp
KTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogCkBAIC05
NTMsOCArOTQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgog
ICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBtX2NhbGxzLmFw
cGVuZChDYWxsUmVjb3JkKGNhbGwodGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyLCB0YWcpKSk7CisgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwxMyArNzAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0
IENhbGxSZWNvcmQgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmcm9tOwogICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKLSAgICAgICAgRnVuY3Rpb25QdHIgY2FsbGVlOwor
ICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGNhbGxlZTsKIAogICAgICAgICBD
YWxsUmVjb3JkKCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ2FsbFJlY29yZChN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBmcm9tLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRnVuY3Rp
b25QdHIgY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZy
b20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IGNhbGxlZSkKICAgICAgICAgICAgIDogZnJvbShmcm9tKQogICAgICAgICAgICAgLCBieXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICAgICAgICAgICwgY2FsbGVlKGNhbGxlZSkKQEAg
LTE3NCw3ICsxNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm87CiAgICAgfTsKIAotICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKKyAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CkBAIC0yNjcsMTggKzI2NywxOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcg
dGFnKQorICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKHRhZyk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykp
KTsKKyAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcp
OworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1f
Ynl0ZWNvZGVPZmZzZXQsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICAgICAgfQogCiAjaWYgT1MoV0lO
RE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQYXRo
UmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKKyAgICAg
ICAgQ2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKHRh
Zyk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykpKTsKKyAgICAgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zm
c2V0LCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNzE2LDM5ICs3MTYs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KTsKICNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xv
d1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhS
ZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogI2VuZGlmCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZywgaW50KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnLCBpbnQpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKICAg
ICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIGludCByZXN1bHQs
IEFyZ3MuLi4gYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgotICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBj
YWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3Bl
cmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4uKTsKLSAgICAgICAgfQotCi0j
aWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJl
c3VsdFR5cGUsIFNsb3dQYXRoUmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFn
IHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKG9wZXJhdGlvbiwgdGFnKTsK
KyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAorI2lmIE9TKFdJTkRPV1Mp
ICYmIENQVShYODZfNjQpCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpczY0Qml0VHlwZSgpIHsgcmV0dXJuIHNpemVvZihUeXBl
KSA8PSA4OyB9CiAKQEAgLTc1Nyw4NyArNzQxLDUxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRy
YWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFs
dWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxP
cGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZT4oKSwgIldpbjY0IGNhbm5vdCB1c2Ug
c3RhbmRhcmQgY2FsbCB3aGVuIHJldHVybiB0eXBlIGlzIGxhcmdlciB0aGFuIDY0IGJpdHMuIik7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwg
dGFnKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgICAgIH0KICNlbHNlIC8vIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQp
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewotICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24sIHRhZyk7
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotCi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgdGFnLCBhcmdzLi4uKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywg
aW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQotICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJh
dGlvbiwgdGFnLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICAgICAgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1Mp
ICYmIENQVShYODZfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRy
YWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBp
bnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbiwgdGFnLCByZXN1
bHQsIGFyZ3MuLi4pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRh
ZyB0YWcsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewog
ICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uLCB0YWcpOwotICAgICAgICAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdFJl
Z3MsIGFyZ3MuLi4pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAgICAgICAgICAgc2V0dXBB
cmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICB1cGRhdGVUb3BD
YWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwgdGFn
KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOworICAgICAgICAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uLCB0YWcs
IGFyZ3MuLi4pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVy
YXRpb24sIHRhZyk7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgewotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOworICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbmlwcGV0
R2VuZXJhdG9yPgpAQCAtODQ5LDggKzc5Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgQ2FsbCBlbWl0TmFrZWRDYWxs
KENvZGVQdHIgZnVuY3Rpb24gPSBDb2RlUHRyKCkpOwotICAgICAgICBDYWxsIGVtaXROYWtlZFRh
aWxDYWxsKENvZGVQdHIgZnVuY3Rpb24gPSBDb2RlUHRyKCkpOworICAgICAgICBDYWxsIGVtaXRO
YWtlZENhbGwoQ29kZVB0cjxOb1B0clRhZz4gZnVuY3Rpb24gPSBDb2RlUHRyPE5vUHRyVGFnPigp
KTsKKyAgICAgICAgQ2FsbCBlbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiBmdW5j
dGlvbiA9IENvZGVQdHI8Tm9QdHJUYWc+KCkpOwogCiAgICAgICAgIC8vIExvYWRzIHRoZSBjaGFy
YWN0ZXIgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZyBpbnRvIGRzdC4KICAgICAg
ICAgdm9pZCBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcyk7CkBAIC05MzYsNyArODg0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERpc2Fzc2VtYmxlcj4gbV9kaXNh
c3NlbWJsZXI7CiAgICAgICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29tcGls
YXRpb247Ci0gICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cihWTSopOworICAgICAgICBzdGF0aWMgQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKFZNKik7CiAKICAgICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwNSwxMiArNzA1LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJ
QzwKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxp
bmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxp
bmVDb2RlKSB7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1
bHRSZWdzLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTc3OSwxMiArNzc4LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLSAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtODE5LDE1ICs4MTcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CiAjZW5kaWYKIAotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHRhZywgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsK
QEAgLTg4NiwxNSArODgzLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUMKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKLSAgICBQ
dHJUYWcgY2FsbFRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgY2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fRUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBjYWxsVGFnLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBjYWxsVGFnLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNv
bihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUwLDkgKzI1MCw4IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKIAogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mbyksIHJlZ1QyKTsKIAotICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxs
UHRyVGFnLCBtX3ZtKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVh
ckNvZGVQdHJUYWcpKTsKKyAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0
aENvZGVSZWYoSgogewogfQogCi1KSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJl
ZihDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRD
b2RlV2l0aENvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIEpJVFR5cGUgaml0VHlw
ZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAsIG1fcmVmKHJlZikKIHsKQEAgLTEyMSwx
MiArMTIxLDEyIEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigKIHZv
aWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKLSAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGgobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAg
IGFzc2VydElzVGFnZ2VkV2l0aChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNF
bnRyeVB0clRhZyk7CiAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiBtX3JlZi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0g
dW50YWdDb2RlUHRyPGNoYXIqPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29k
ZVB0clRhZyk7Ci0gICAgcmV0dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZz
ZXQsIENvZGVQdHJUYWcpOworICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDb2Rl
UHRyPGNoYXIqLCBKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgcmV0dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFkZHJl
c3MgKyBvZmZzZXQpOwogfQogCiB2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmRhdGFBZGRyZXNz
QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKQEAgLTE2MSw3ICsxNjEsNyBAQCBEaXJlY3RKSVRDb2Rl
OjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0CiB7CiB9CiAKLURpcmVjdEpJVENvZGU6OkRpcmVj
dEpJVENvZGUoSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5
Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklU
Q29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGVX
aXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCiAgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0
eUNoZWNrKQogewpAQCAtMTczLDcgKzE3Myw3IEBAIERpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRD
b2RlKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRD
b2RlOjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK3ZvaWQg
RGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKICAgICBtX3JlZiA9IHJlZjsKQEAg
LTE4Miw3ICsxODIsNyBAQCB2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJ
CiAgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIERp
cmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorSklUQ29k
ZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChB
cml0eUNoZWNrTW9kZSBhcml0eSkKIHsKICAgICBzd2l0Y2ggKGFyaXR5KSB7CiAgICAgY2FzZSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ6CkBAIC0xOTMsNyArMTkzLDcgQEAgSklUQ29kZTo6Q29kZVB0
ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRgogICAgICAgICByZXR1cm4gbV93aXRoQXJpdHlDaGVj
azsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
Q29kZVB0cigpOworICAgIHJldHVybiBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7CiB9CiAKIE5h
dGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQpAQCAtMjAxLDcgKzIw
MSw3IEBAIE5hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoSklUVHlwZSBqaXQKIHsKIH0KIAot
TmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBl
KQorTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJl
ZiwgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlw
ZSkKIHsKIH0KQEAgLTIxMCwxMyArMjEwLDEzIEBAIE5hdGl2ZUpJVENvZGU6On5OYXRpdmVKSVRD
b2RlKCkKIHsKIH0KIAotdm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihDb2Rl
UmVmIHJlZikKK3ZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiByZWYpCiB7CiAgICAgQVNTRVJUKCFtX3JlZik7CiAgICAgbV9yZWYgPSBy
ZWY7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja01vZGUgYXJpdHkpCitKSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IE5h
dGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBzd2l0Y2ggKGFyaXR5KSB7CkBAIC0yMjYsNyAr
MjI2LDcgQEAgSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRgogICAgICAg
ICByZXR1cm4gbV9yZWYuY29kZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRy
eVB0clRhZz4oKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsOCArNTAsOCBAQCBj
bGFzcyBWTTsKIAogY2xhc3MgSklUQ29kZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxK
SVRDb2RlPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29k
ZVJlZjsKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOworICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPjsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPHRhZz47CiAKICAgICBlbnVtIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICAg
ICAgTm9uZSwKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRD
b2RlLT5qaXRUeXBlKCk7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNz
Rm9yQ2FsbChBcml0eUNoZWNrTW9kZSkgPSAwOworICAgIHZpcnR1YWwgQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CiAgICAg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSB7IHJldHVybiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KDApOyB9CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBv
ZmZzZXQpID0gMDsKQEAgLTIwNSw3ICsyMDUsNyBAQCBwcml2YXRlOgogY2xhc3MgSklUQ29kZVdp
dGhDb2RlUmVmIDogcHVibGljIEpJVENvZGUgewogcHJvdGVjdGVkOgogICAgIEpJVENvZGVXaXRo
Q29kZVJlZihKSVRUeXBlKTsKLSAgICBKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiwgSklUVHlw
ZSk7CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIEpJVFR5
cGUpOwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SklUQ29kZVdpdGhDb2RlUmVmKCk7CkBAIC0y
MTcsMzIgKzIxNywzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyh2b2lkKikgb3ZlcnJp
ZGU7CiAKIHByb3RlY3RlZDoKLSAgICBDb2RlUmVmIG1fcmVmOworICAgIENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gbV9yZWY7CiB9OwogCiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENv
ZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKLSAg
ICBEaXJlY3RKSVRDb2RlKENvZGVSZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUp
OworICAgIERpcmVjdEpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSk7CiAgICAgdmlydHVhbCB+RGlyZWN0
SklUQ29kZSgpOwogICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiwgQ29k
ZVB0ciB3aXRoQXJpdHlDaGVjayk7CisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVm
PEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsK
IAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwor
ICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIENvZGVQdHIgbV93aXRoQXJpdHlDaGVjazsKKyAg
ICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCiBjbGFzcyBO
YXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAg
TmF0aXZlSklUQ29kZShKSVRUeXBlKTsKLSAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWYsIEpJVFR5
cGUpOworICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgSklUVHlwZSk7
CiAgICAgdmlydHVhbCB+TmF0aXZlSklUQ29kZSgpOwogICAgIAotICAgIHZvaWQgaW5pdGlhbGl6
ZUNvZGVSZWYoQ29kZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmPEpT
RW50cnlQdHJUYWc+KTsKIAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01v
ZGUpIG92ZXJyaWRlOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAkocmV2aXNpb24gMjMwNzM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDI4ICszOCwyOCBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBFbnRyeSB7CiAgICAgICAg
IEVudHJ5KCkgeyB9CiAKLSAgICAgICAgRW50cnkodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29k
ZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uKQorICAgICAgICBFbnRyeSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24p
CiAgICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgLCBtX2NvZGVMb2NhdGlvbihjb2RlTG9jYXRpb24pCiAgICAgICAgIHsgfQogCiAgICAgICAg
IGlubGluZSB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29k
ZUluZGV4OyB9Ci0gICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24o
KSB7IHJldHVybiBtX2NvZGVMb2NhdGlvbjsgfQorICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9jb2RlTG9jYXRp
b247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9jb2RlTG9jYXRpb247CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IG1fY29kZUxvY2F0aW9uOwogICAgIH07CiAKIHB1
YmxpYzoKLSAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25MYWJlbCBjb2RlTG9jYXRpb24pCisgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQogICAg
IHsKICAgICAgICAgbV9lbnRyaWVzLmFwcGVuZCh7IGJ5dGVjb2RlSW5kZXgsIGNvZGVMb2NhdGlv
biB9KTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaCgpIHsgbV9lbnRyaWVzLnNocmlua1RvRml0
KCk7IH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZpbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgY29uc3QKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBmaW5kKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvKiBlbnRyeSA9CiAg
ICAgICAgICAgICBiaW5hcnlTZWFyY2g8RW50cnksIHVuc2lnbmVkPihtX2VudHJpZXMsCkBAIC02
Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LT5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIGlmICghZW50cnkp
Ci0gICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICByZXR1cm4g
ZW50cnktPmNvZGVMb2NhdGlvbigpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTYxLDkgKzE2MSw5IEBAIHZvaWQgSklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVj
dGlvbnMKIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseShQcmludFN0cmVh
bSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZnJv
bSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRvKQogewotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZy
b21Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihmcm9tKTsKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCB0b0xvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRvKTsKLSAgICBkaXNh
c3NlbWJsZShmcm9tTG9jYXRpb24sIHRvTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0
cl90PigpIC0gZnJvbUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSwgIiAg
ICAgICAgIiwgb3V0KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4g
ZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPihm
cm9tKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gdG9Mb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4odG8pOworICAgIGRp
c2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwgdG9Mb2NhdGlvbi5kYXRhTG9jYXRpb248dWludHB0cl90
PigpIC0gZnJvbUxvY2F0aW9uLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCksICIgICAgICAgICIs
IG91dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAg
ICAgICAgY2F0Y2hSb3V0aW5lID0gY2F0Y2hQQ0ZvckludGVycHJldGVyLT51LnBvaW50ZXI7CiAj
ZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6OmdldENvZGVQ
dHIoaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pOworICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTElu
dDo6Z2V0RXhlY3V0YWJsZUFkZHJlc3MoaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pOwogICAgIAog
ICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDE4ICs3MywxOCBAQCBKSVRC
eUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpm
aW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiB7CiAg
ICAgQVNTRVJUKG1fc3RhcnQuaXNTZXQoKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQg
PSBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RhcnQpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KG1fc3RhcnQpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3Rh
cnQ7CiAKICAgICBpbnQzMl90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZihtX2Rv
bmUpKTsKKyAgICAgICAgc3RhcnQsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fZG9u
ZSkpOwogICAgIEFTU0VSVChpbmxpbmVTaXplID4gMCk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2gu
aW5saW5lU2l6ZSA9IGlubGluZVNpemU7CiAKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZy
b21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Ns
b3dQYXRoQ2FsbCkpOworICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZjxOb1B0clRh
Zz4obV9zbG93UGF0aENhbGwpKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFy
dFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoCi0gICAgICAgIHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikp
OworICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZjxOb1B0clRhZz4obV9zbG93UGF0
aEJlZ2luKSk7CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIxICsxMTYsMTkgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZQogICAgIGNvbnQ4Qml0LmxpbmsodGhpcyk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0
aW9uKQorQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHI8
Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7
Ci0gICAgYXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCksIE5lYXJDb2RlUHRyVGFnKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2Vk
Q2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24pKSk7CisgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIEpJVDo6Q2Fs
bCBKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKENvZGVQdHIgZnVuY3Rpb24pCitBTFdBWVNfSU5MSU5F
IEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdl
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJUYWlsQ2FsbCgpOwotICAgIGFzc2Vy
dElzTnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ29k
ZVB0clRhZyk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0
ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uKSkpOworICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKSk7CiAgICAg
cmV0dXJuIG5ha2VkQ2FsbDsKIH0KIApAQCAtMTUxLDM1ICsxNDksMzUgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2FsbEZyYQogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lz
dGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0
YWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9u
KTsKICAgICBleGNlcHRpb25DaGVjaygpOwogICAgIHJldHVybiBjYWxsOwogfQogCiAjaWYgT1Mo
V0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBl
KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgIHRhZykKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5k
U2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVu
Y3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uLCB0
YWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZShmdW5jdGlvbik7CiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKICAgICByZXR1
cm4gY2FsbDsKIH0KICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewogICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOyAvLyBUaGUgY2FsbGVlIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0
aW5nIHRvcENhbGxGcmFtZSB0byB0aGVpciBjYWxsZXIKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgZXhjZXB0aW9uQ2hlY2tXaXRo
Q2FsbEZyYW1lUm9sbGJhY2soKTsKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBp
bnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIHRhZyk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xODgsOSArMTg2LDkgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxs
OwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24sIGludCBkc3QpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIHRhZyk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24p
OwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkg
KzYyLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1faW5s
aW5lU2l6ZSk7IH0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0YXJ0TG9jYXRpb24o
KSB7IHJldHVybiBtX2lubGluZVN0YXJ0LmxhYmVsQXRPZmZzZXQobV9kZWx0YUZyb21TdGFydFRv
U2xvd1BhdGhTdGFydCk7IH0KLSAgICBDb2RlTG9jYXRpb25DYWxsIHNsb3dQYXRoQ2FsbExvY2F0
aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5jYWxsQXRPZmZzZXQobV9kZWx0YUZyb21TdGFy
dFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBi
ZSB0YWdnZWQgd2l0aCBKU0ludGVybmFsUHRyVGFnIGluc3RlYWQgb2YgSlNFbnRyeVRhZy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzEyCisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4g
bV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1faW5saW5lU2l6ZSk7IH0KKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSB7IHJldHVy
biBtX2lubGluZVN0YXJ0LmxhYmVsQXRPZmZzZXQobV9kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhT
dGFydCk7IH0KKyAgICBDb2RlTG9jYXRpb25DYWxsPEpTRW50cnlQdHJUYWc+IHNsb3dQYXRoQ2Fs
bExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5jYWxsQXRPZmZzZXQobV9kZWx0YUZy
b21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9CiAgICAgCiAgICAgYm9vbCBnZW5lcmF0
ZUlubGluZShDQ2FsbEhlbHBlcnMmIGppdCwgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZSkKICAgICB7CkBAIC0xMjksNyArMTMxLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBnZW5l
cmF0ZU91dE9mTGluZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVuY3Rpb25QdHIgY2FsbFJlcGxh
Y2VtZW50KQorICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFJlcGxhY2VtZW50KQogICAgIHsKICAg
ICAgICAgYXV0byBsaW5rSnVtcFRvT3V0T2ZMaW5lU25pcHBldCA9IFsmXSAoKSB7CiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CkBAIC0xMzksMTMgKzE0MSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3NlbWJsZXIuYnVmZmVy
KCkuY29kZVNpemUoKSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5saW5lU2l6ZSkpOwogICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbV9pbmxpbmVTdGFydC5kYXRhTG9j
YXRpb24oKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobV9jb2RlLmNvZGUoKSkpOwotICAgICAgICAg
ICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzog
bGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91dCBvZiBsaW5lIHN0dWIiKTsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4obV9jb2RlLmNvZGUoKSkpOworICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOb1B0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91dCBv
ZiBsaW5lIHN0dWIiKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIHJlcGxhY2VDYWxsID0g
WyZdICgpIHsKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRh
ZywgbV9pbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzbG93UGF0aENhbGxMb2NhdGlvbigpLCBjYWxsUmVwbGFjZW1lbnQsIGNhbGxU
YWcpOworICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc2xv
d1BhdGhDYWxsTG9jYXRpb24oKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigp
LCBjYWxsUmVwbGFjZW1lbnQpOwogICAgICAgICB9OwogCiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRvbmVMb2NhdGlvbigpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsICJKSVRNYXRoSUM6IGdl
bmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJQyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLCAiSklU
TWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMgc25pcHBldCIpOwogCiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRj
aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgbmVlZCB0byByZWdlbmVy
YXRlLCBzbyB3ZSBjYW4gd2lyZSB0aGUgc2xvdyBwYXRoIGNhbGwKQEAgLTIxMCw3ICsyMTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd1BhdGhKdW1wTGlzdCwg
c2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJD
b2RlUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQi
KTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQiKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0KCk7CkBAIC0y
MTgsMTcgKzIxOSwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplSW5saW5lQ29kZShj
b25zdCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQogICAgIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc3RhdGUuZmFzdFBhdGhTdGFydCwgTmVhckNvZGVQdHJUYWcpOworICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5mYXN0UGF0aFN0YXJ0KTsKICAgICAgICAgbV9pbmxp
bmVTdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIG1faW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoRW5kLCBOb1B0clRhZykpOworICAgICAgICAgICAg
c3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oc3RhdGUuZmFzdFBhdGhFbmQp
KTsKICAgICAgICAgQVNTRVJUKG1faW5saW5lU2l6ZSA+IDApOwogCiAgICAgICAgIG1fZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Yoc3RhdGUuc2xvd1BhdGhDYWxsKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPE5vUHRyVGFnPihzdGF0ZS5zbG93UGF0aENhbGwpKTsKICAgICAgICAgbV9kZWx0
YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0
YXRlLnNsb3dQYXRoU3RhcnQpKTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KHN0YXRlLnNsb3dQYXRoU3RhcnQpKTsKICAgICB9CiAKICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJpdGhQcm9maWxlOyB9
CkBAIC0yNDcsOCArMjQ4LDEwIEBAIHB1YmxpYzoKIAogICAgIEFyaXRoUHJvZmlsZSogbV9hcml0
aFByb2ZpbGU7CiAgICAgSW5zdHJ1Y3Rpb24qIG1faW5zdHJ1Y3Rpb247Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG1fY29kZTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0YXJ0
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2Rl
OworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgdGFnZ2VkIHdpdGggSlNJbnRlcm5hbFB0
clRhZyBpbnN0ZWFkIG9mIEpTRW50cnlUYWcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NDcxMgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IG1faW5saW5lU3RhcnQ7CiAgICAgaW50MzJfdCBtX2lubGluZVNpemU7CiAgICAgaW50
MzJfdCBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbjsKICAgICBpbnQzMl90
IG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMzcsMTcgKzEwMzcsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5k
ZXhlZFByb3BlcgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxv
Y2spOwogICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFi
ZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29k
ZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRk
cmVzc1RvU2xvd1BhdGgpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFs
SW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9E
b25lKSk7CiAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAg
ICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFs
dWUoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0
cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBOb1B0clRhZykpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVy
bkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0Miw4ICs2NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3Vy
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFs
dWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKLSAgICBQdHJUYWcgZXhjZXB0aW9uSGFuZGxlclRhZyA9IEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgZXhjZXB0aW9uSGFuZGxlclRhZyk7
CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAg
c2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgewpAQCAtNjgxLDcgKzY4MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVl
R1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOworICAgIGp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5Nyw3ICs2OTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgp
OwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVt
cFRhYmxlKSk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MTIsNyArNzExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhJbnN0cnVjdAogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0
clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2MywxNyArMTE2MiwxNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICAKICAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRl
eGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1f
Y29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlHZW5lcmljLCBIYXNQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlH
ZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjMyLDcgKzEyMzEsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVyCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgSGFzUHJvcGVydHlQdHJUYWcsIGRzdCwgcmVnVDAs
IHJlZ1QxLCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5m
byk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA3
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MDEsNyArODAxLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsT3B0aQogICAgIGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3Qg
ZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uUHV0QnlWYWxHZW5l
cmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMpOwogICAgIH0KICAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VgogICAgIGlmICh0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
IHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIo
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwogICAgIH0KIAog
ICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJ
bmZvKTsKQEAgLTkzMiwxMiArOTMyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ2EKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIFB0clRhZyBy
ZXN1bHRUYWcpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoKnZtKTsKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhy
b3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygw
KTsKIApAQCAtOTUzLDE5ICs5NTIsMTkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbAogICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJv
d0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAg
ICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSwgcmVzdWx0VGFnKSwKKyAgICAgICAgICAgICAgICB0YWdDRnVuY3Rpb25QdHI8dm9p
ZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLAogICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBD
YWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAg
fQogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3Io
ZXhlYywgY2FsbGVlKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRk
cmVzcygpLAorICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRo
ZUZyYW1lKSk7CiAgICAgfQogCkBAIC05ODIsMTcgKzk4MSwxNyBAQCBzdGF0aWMgU2xvd1BhdGhS
ZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxs
ZWUpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0
aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFnQ0Z1bmN0aW9u
UHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlLCByZXN1bHRUYWcpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAg
ICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7CiAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9y
KGV4ZWMsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CisgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAK
QEAgLTEwMDIsNyArMTAwMSw2IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0g
cHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKQEAgLTEwMTIsMjYgKzEw
MTAsMjYgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUp
OwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYgKGF1dG8qIGlu
dGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPigqdm0sIGNh
bGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0t
PmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAq
Y2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyLCBDb2RlUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8s
IG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCi0gICAgICAgICAgICB2b2lk
KiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
LCBDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgdm9pZCogbGlua2Vk
VGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
LSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUs
IGNhbGxMaW5rSW5mbywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhv
c3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQog
CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2Vk
KCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUo
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gbnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAg
ICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNr
QXJpdHkpOwpAQCAtMTAzOSw4ICsxMDM3LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAg
ICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAg
UHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2
bSk7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhj
ZXB0aW9uVGFnLCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dU
YXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9
OwogCkBAIC0xMDY1LDkgKzEwNjIsOSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2Fs
bGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwgQ29kZVB0clRh
Zyk7CisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2Nr
LCBjYWxsZWUsIGNvZGVQdHIpOwogCi0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJl
dGFnZ2VkKENvZGVQdHJUYWcsIGxpbmtlZFRhcmdldFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVz
ZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDk3LDEwICsxMDk0LDEwIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKIAogICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHI7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQ
dHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRh
YmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0clRhZywgTmVh
ckNvZGVQdHJUYWcpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTExMTIsMTYgKzExMDksMTYgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlua0luZm8tPm1heE51bUFyZ3Vt
ZW50cygpOwogICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3RzIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5y
ZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpLnJldGFnZ2VkKENv
ZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJlcXVpcmVkKTsK
ICAgICB9CiAgICAgCiAgICAgbGlua0RpcmVjdEZvcihleGVjLCAqY2FsbExpbmtJbmZvLCBjb2Rl
QmxvY2ssIGNvZGVQdHIpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxG
b3JXaXRoRnVuY3Rpb24oCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIFB0clRhZyByZXN1
bHRUYWcpCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKQEAgLTExMzQsMTIgKzExMzEsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aAogICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWVBc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oKnZtLCBjYWxsZWVB
c1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSB2
bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLT5nZXRD
VElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VS
VCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJl
dGFnZ2VkKENvZGVQdHJUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpU
YWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJl
dXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgcmVzdWx0VGFnKTsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbyk7
CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rp
b24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CkBAIC0xMTQ3LDEyICsxMTQ0LDExIEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CiAgICAgaWYgKFVOTElLRUxZKCFl
eGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJU
YWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5k
KSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9u
KSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCisgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtl
ZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTExNjEsMjMgKzExNTcsMjAgQEAgaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICBFWENFUFRJT05fQVNT
RVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb24q
PihlcnJvcikpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGhyb3dFeGNlcHRpb25UYWcs
IHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAot
ICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0clRhZywgcmVzdWx0
VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOwogfQogCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBQdHJUYWcgcmVzdWx0VGFnID0gcHRy
VGFnKExpbmtQb2x5bW9ycGhpY0NhbGxSZXN1bHRQdHJUYWcsIHZtKTsKLSAgICBTbG93UGF0aFJl
dHVyblR5cGUgcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCByZXN1bHRUYWcpOworICAgIFNsb3dQYXRo
UmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNh
bGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCiAgICAgbGlua1BvbHltb3JwaGlj
Q2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkpOwogICAgIApAQCAtMTE4NiwxMSArMTE3OSw4IEBAIFNsb3dQYXRoUmV0dXJuVHlw
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEpTQ2VsbCogY2Fs
bGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIFB0clRhZyByZXN1bHRUYWcgPSBwdHJUYWco
TGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bElnbm9yZWQsIHJlc3VsdFRhZyk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwog
fQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCkBAIC0xNTkwLDggKzE1ODAsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJ1ZVRyaVN0YXRl
KTsKICAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlU
aHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIFB0clRh
ZyB0aHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0clRhZywgJnZtKTsKLSAgICAgICAgdGFy
Z2V0UEMgPSByZXRhZ0NvZGVQdHIodGFyZ2V0UEMsIHRodW5rVGFnLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPihleGVjKSk7CisgICAgICAgIHRhcmdldFBDID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBK
SVRUaHVua1B0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBkYXRhQnVmZmVyKTsKICAgICB9CiAKQEAgLTE2NDIs
MTAgKzE2MzEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAg
ICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBK
SVRDb2RlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKLSAgICAgICAgdm9p
ZCogZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxh
Y2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAg
YXNzZXJ0SXNUYWdnZWRXaXRoKGVudHJ5LCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihlbnRyeSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBlbnRyeSA9IERGRzo6cHJlcGFyZUNh
dGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICByZXR1cm4gZW50cnkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTY2NCwxMCArMTY1MSw4IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBzd2l0Y2ggKG9wdGltaXpl
ZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKICAg
ICBjYXNlIEpJVENvZGU6OkZUTEpJVDogewotICAgICAgICB2b2lkKiBlbnRyeSA9IERGRzo6cHJl
cGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgo
ZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcio+KGVudHJ5KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBv
cHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHJldHVybiBlbnRy
eS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CkBAIC0xODUyLDcgKzE4MzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIo
KTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYg
KGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBvcGVyYXRpb25H
ZXRCeVZhbFN0cmluZyk7CiAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKTsK
ICAgICAgICAgICAgIH0KQEAgLTE5OTIsNyArMTk3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBpZiAodHJ5R2V0QnlWYWxPcHRpbWl6ZShleGVjLCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSA9PSBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRp
bWl6ZS4KICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgb3BlcmF0aW9uR2V0QnlWYWxH
ZW5lcmljKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdldEJ5VmFsKGV4
ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MpKTsKQEAg
LTIwMzIsNyArMjAxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGEKICAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwCiAgICAgICAg
ICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7CiAgICAgICAg
ICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyks
IEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIEhhc1Byb3Bl
cnR5UHRyVGFnKSk7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlHZW5lcmljKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA5Myw3ICsyMDc4LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICBpZiAoIWlz
SlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2Rl
T2Zmc2V0KCkpOwogICAgICAgICAgICAgYXV0byBnZXRCeVZhbEZ1bmN0aW9uID0gYnlWYWxJbmZv
LT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemU7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihnZXRCeVZhbEZ1
bmN0aW9uLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgZ2V0QnlW
YWxGdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBiYXNlVmFsdWUu
cmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKQEAgLTIyNDIsNyArMjIyNyw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoQ2hhclcKICAgICAgICAgICAgIHJlc3VsdCA9
IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgoKnZhbHVlKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFi
bGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBK
U1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3Vs
dCk7CiB9CiAKQEAgLTIyNjEsNyArMjI0Niw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoSW1tV2kKICAgICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aUZvclZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgcHRyVGFnKFN3aXRj
aFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3Vs
dCwgSlNTd2l0Y2hQdHJUYWcpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihy
ZXN1bHQpOwogfQogCkBAIC0yMjgxLDcgKzIyNjYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cmluCiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJs
ZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCitKSVQ6OkNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVy
ZmFjZUpJVCBqaXQodm0pOwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtMTY3LDcgKzE2Nyw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0
KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiU3Ry
aW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKElu
c3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hTdHJ1Y3R1
cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0
TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihtX3ZtLT5nZXRDVElTdHViKHN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAg
ICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BD
T0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIHBva2UocmVnVDEsIHBva2VPZmZz
ZXQrKyk7CiAgICAgcG9rZShyZWdUMCwgcG9rZU9mZnNldCsrKTsKICAgICBwb2tlKFRydXN0ZWRJ
bW1QdHIoYnlWYWxJbmZvKSwgcG9rZU9mZnNldCsrKTsKLSAgICBDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIE5vUHRyVGFnKTsKKyAgICBDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOwogI2Vs
c2UKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1
Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBo
YXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNyArNTAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
IAotSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkK
K0pJVDo6Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAgICAgSnVtcExp
c3QgZmFpbHVyZXM7CkBAIC05MSw3ICs5MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlN0
cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBAIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCBkc3QsIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xvd0RvbmVDYXNlID0ganVtcCgpOwogCkBAIC0yNTUs
NyArMjU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAg
IEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCAKICAgICAgICAgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25M
YWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4obV92bS0+
Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC0yNzAsNyAr
MjcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCBkc3QsIHJl
Z1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwog
CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xv
d1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTQ1MCw3ICs0NTAs
NyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhp
cyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIFB1dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBwcm9w
ZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFt
ZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCkBAIC00ODcsNyArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNv
ZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFB1dFByb3Bl
cnR5UHRyVGFnLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlW
YWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC01
ODgsNyArNTg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdAog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJU
YWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAg
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTYyNSw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChJ
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUs
IEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlk
ZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzA0LDcgKzcwNCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgR2V0UHJv
cGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIGlk
ZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0
eVB0clRhZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0xMjc5LDE3ICsxMjc5
LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9Q
dHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAg
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBt
X2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAgICBtX2NvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxp
bmUgZ2V0X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCpt
X2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxH
ZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlWYWxXaXRoQ2FjaAogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZmFzdERvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0RvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcFRvTmV4dEhvdFBhdGgpKTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzLmVtcHR5KCkpCkBAIC0xMzE3LDEyICsxMzE3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAg
ICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJC
YXNlbGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEo
KSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
OwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYywgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOwogfQogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQpAQCAtMTM2
MSw4ICsxMzYxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5
cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9Q
dHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFn
PihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZh
bEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRv
RG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKICAgICAgICAgQVNT
RVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgp
KTsKQEAgLTEzNzIsMTYgKzEzNzIsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWwoQnlWYWxJbgogICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQo
Y3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAg
ICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwg
c3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywK
ICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpOwogICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1
bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3Bl
cmF0aW9uUHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEzOTUsNyArMTM5NSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKIAogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBp
ZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7CkBAIC0xNDA3
LDEyICsxNDA3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gK
ICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91
dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMg
d2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5p
bXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJ
bmZvKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJ
bmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihw
dXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNh
bGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVz
cykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7
CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUu
aAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
Um91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIEpJVFN0dWJS
b3V0aW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGluZSk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSklUU3R1YlJvdXRpbmUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKQorICAgIEpJVFN0dWJSb3V0aW5lKGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUpCiAgICAg
ICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgIHsKQEAgLTU4
LDkgKzU4LDkgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3Mg
YSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+LgogICAgIHN0YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0Nv
ZGVQb2ludGVyKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHJhd0NvZGVQb2ludGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSklUU3R1YlJvdXRpbmUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEpJVFN0dWJSb3V0aW5lKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKICAgICB9CiAg
ICAgCiAgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKQEAgLTY5LDExICs2OSwxMSBAQCBw
dWJsaWM6CiAgICAgLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlzIGNvcHlhYmxlLCBidXQgYXQg
dGhlIGNvc3Qgb2YgcmVmZXJlbmNlCiAgICAgLy8gY291bnRpbmcgY2h1cm4uIFJldHVybmluZyBh
IHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9mIHJlZHVjaW5nCiAgICAgLy8gdGhlIGNodXJuLgot
ICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZTsgfQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKLSAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFzQ29kZVB0cihSZWY8SklUU3R1YlJvdXRpbmU+JiYgc3R1
YlJvdXRpbmUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gYXNDb2RlUHRyKFJlZjxKSVRTdHViUm91dGluZT4mJiBzdHViUm91dGluZSkKICAg
ICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKICAgICAgICAg
QVNTRVJUKCEhcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xMDks
NyArMTA5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZl
WmVyb1JlZkNvdW50KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlOwogICAg
IHVuc2lnbmVkIG1fcmVmQ291bnQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ2ICs0NSw0NiBAQCBK
SVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklU
VGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRU
aHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKIHsKICAgICBBU1NF
UlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdl
bmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpj
dGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSogdm0pCiB7CiAgICAgQVNT
RVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0
cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1
bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0qIHZtKQogewogICAg
IEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVU
YWlsQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklU
VGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyhWTSogdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQo
KSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtz
OjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qIHZt
KQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZt
LCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJ
bnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVz
ZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtz
OjpjdGlTdHViKFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsK
LSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVy
YXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOworICAgIENUSVN0dWJNYXA6OkFkZFJlc3Vs
dCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KSB7CiAgICAg
ICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRy
aWVzLgogICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkBAIC05MywxMiAr
OTMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YgogICAgIHJl
dHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBK
SVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdDVElT
dHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOwogICAgIENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZp
bmQoZ2VuZXJhdG9yKTsKICAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7CiAgICAgcmV0dXJuIGVudHJ5LT52
YWx1ZTsKIH0KIApAQCAtMTIzLDEyICsxMjMsMTIgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1
bmtzOjpob3N0RnVuY3RpbwogCiAgICAgUmVmUHRyPEpJVENvZGU+IGZvckNhbGw7CiAgICAgaWYg
KGdlbmVyYXRvcikgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZW50cnkgPSBnZW5l
cmF0b3Iodm0pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
ZW50cnkgPSBnZW5lcmF0b3Iodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAg
IGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50cnkuY29kZSgp
LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGZvckNhbGwg
PSBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDYWxsKHZtKSksIEpJVENvZGU6Okhvc3RDYWxs
VGh1bmspKTsKKyAgICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVmKG5ldyBOYXRpdmVKSVRDb2RlKE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGN0aU5hdGl2ZUNhbGwodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpLCBKSVRDb2Rl
OjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCi0gICAgUmVmPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9
IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pKSwgSklUQ29kZTo6SG9z
dENhbGxUaHVuaykpOworICAgIFJlZjxKSVRDb2RlPiBmb3JDb25zdHJ1Y3QgPSBhZG9wdFJlZigq
bmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZtKS5yZXRhZ2dlZDxK
U0VudHJ5UHRyVGFnPigpKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIAogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVh
dGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9uLCBXVEZNb3ZlKGZvckNv
bnN0cnVjdCksIGNvbnN0cnVjdG9yLCBpbnRyaW5zaWMsIHNpZ25hdHVyZSwgbmFtZSk7CiAgICAg
d2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24s
IGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRh
YmxlLCB0aGlzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtz
KCk7CiAgICAgdmlydHVhbCB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpTmF0aXZlQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRp
dmVDb25zdHJ1Y3QoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFp
bENhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aUludGVy
bmFsRnVuY3Rpb25DYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aUludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwoVk0qKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxs
V2l0aG91dFNhdmVkVGFncyhWTSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0q
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0
b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU3R1
YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJ
bnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplKEhh
bmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0dWJN
YXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElTdHViTWFwOwogICAgIENUSVN0dWJNYXAgbV9jdGlT
dHViTWFwOwogCiAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBU
YWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPiBIb3N0RnVuY3Rpb25LZXk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBQQ1RvQ29kZU9yaWdp
bk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUCiAgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJl
c3Nvci53cml0ZTx1aW50cHRyX3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgfTsKIAotICAgIG1fcGNSYW5nZVN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFM
b2NhdGlvbjx1aW50cHRyX3Q+KCk7Ci0gICAgbV9wY1JhbmdlRW5kID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbjx1aW50
cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9Q
dHJUYWc+KGJ1aWxkZXIubV9jb2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFMb2NhdGlvbjx1
aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlRW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5v
UHRyVGFnPihidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCkuZW5kKS5kYXRhTG9jYXRpb248dWlu
dHB0cl90PigpOwogICAgIG1fcGNSYW5nZUVuZCAtPSAxOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29kZVJhbmdlJiBjb2RlUmFuZ2UgPSBidWlsZGVyLm1f
Y29kZVJhbmdlc1tpXTsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKLSAgICAgICAgdm9pZCogZW5kID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5lbmQpLmRhdGFMb2NhdGlvbigpOworICAg
ICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oY29kZVJh
bmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgdm9pZCogZW5kID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPE5vUHRyVGFnPihjb2RlUmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKICAg
ICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0
YXJ0KSk7CiAgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW5kKSAtIDEpOwogICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQogICAgICAgICAgICAg
QVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpIC0gMSk7CiAgICAgICAgIGlm
IChpID4gMCkKLSAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRl
ci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworICAg
ICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oYnVpbGRlci5t
X2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOwogCiAgICAg
ICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CiAgICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNv
ZGVSYW5nZS5jb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENU
b0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw2ICs3NCw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ1aWxkTWFwcGluZzsKIH07CiAKKy8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzY2NTg+CiBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUENUb0NvZGVPcmlnaW5NYXApOwogcHVibGljOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBvbHltb3JwaGljQ2FsbENhc2U6OmR1bXAoUHJpbnRT
dHJlCiB9CiAKIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIFZNJiB2
bSwgY29uc3QgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwKKyAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlUmVmLCBW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsCiAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mIGNh
c2VzLAogICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiYmIGZhc3RDb3VudHMpCiAgICAgOiBHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoY29kZVJlZiwgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgogY2xhc3Mg
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
IHsKIHB1YmxpYzoKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+Jiwg
Vk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgICAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1l
LCBDYWxsTGlua0luZm8mLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mLAogICAg
ICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4mJiBmYXN0Q291bnRzKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NDAgKzY2LDM3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRnVuY3Rpb25QdHIgcmVh
ZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRh
cmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRy
VGFnPiBjYWxsKQogewotICAgIEZ1bmN0aW9uUHRyIHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChjYWxsKTsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IHRh
cmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxPcGVyYXRpb25QdHJUYWc+KGNh
bGwpOwogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNsb3dQ
YXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGF1dG8qIGNhbGxUYXJn
ZXQgPSBjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmso
c2xvd1BhdGhUaHVuaykuY2FsbFRhcmdldCgpOwotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIo
Y2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPcGVyYXRp
b25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVB
ZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpOworICAgICAgICByZXR1cm4gY29k
ZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5j
YWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwogICAgIH0KICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0g
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHVudGFnQ0Z1bmN0aW9uUHRyKHRhcmdldC5leGVjdXRhYmxl
QWRkcmVzcygpLCBQdXRQcm9wZXJ0eVB0clRhZyksIENGdW5jdGlvblB0clRhZyk7CisgICAgcmV0
dXJuIHRhcmdldC5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCk7CiB9CiAKLXZvaWQgZnRsVGh1
bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uLCBQdHJUYWcgY2FsbFRhZykKK3Zv
aWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9j
YXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgewogICAgICAgICBWTSYg
dm0gPSAqY29kZUJsb2NrLT52bSgpOwogICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZt
LmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHIgdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc2xv
d1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8
T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPEpJVFRodW5rUHRyVGFnPigp
KTsKICAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQ
YXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOwotICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxU
YXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIG5l
d0NhbGxlZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHIodGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5r
KGtleSkuY29kZSgpKTsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5ld0NhbGxlZUZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIGtleS5jYWxsUHRyVGFnKCkpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAg
ICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5yZXRhZ2dlZENvZGU8T3BlcmF0
aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZWxzZSAvLyBFTkFCTEUo
RlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25Q
dHIobmV3Q2FsbGVlRnVuY3Rpb24sIGNhbGxUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpKTsKIH0KIAogZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CkBAIC0xNTAsNyArMTQ3LDcgQEAg
QUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludAogICAgIH0KIH0KIAotaW5s
aW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihHZXRC
eUlES2luZCBraW5kKQoraW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQpCiB7CiAgICAg
c3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUlES2luZDo6Tm9ybWFsOgpAQCAtMTY2LDcg
KzE2Myw3IEBAIGlubGluZSBGdW5jdGlvblB0ciBhcHByb3ByaWF0ZU9wdGltaXppbmcKICAgICBy
ZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJp
YXRlR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5kIGtpbmQpCitpbmxpbmUgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5SWRGdW5jdGlvbihHZXRCeUlES2luZCBr
aW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlJREtpbmQ6Ok5vcm1h
bDoKQEAgLTIxMCw3ICsyMDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJh
eSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5s
aW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5
SWRGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0
QXJyYXlMZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI2Nyw3ICsyNjQsNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUp
KTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlG
b3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAg
ICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0
aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2lu
ZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2Fy
ZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKICAgICAgICAgICAgICAgICB9CkBAIC0zNzYsNyArMzczLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM5MSw3ICszODgsNyBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgSlNWCiAgICAgCiAgICAgaWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2Fj
aGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdl
dFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZXRCeUlk
RnVuY3Rpb24oa2luZCkpOwogICAgIH0KIH0KIApAQCAtNDYzLDcgKzQ2MCw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigp
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIFB1
dFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTgy
LDcgKzU3OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAK
LSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01OTcs
NyArNTk0LDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAg
IAogICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsK
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgfQogfQogCkBA
IC02NzEsNyArNjY4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW4oCiAK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9ySW4oKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNjg2LDI0ICs2ODMsMjMgQEAgdm9pZCByZXBhdGNoSW4oCiB7CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIGlmICh0cnlDYWNo
ZUluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCi0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9uSW4sIENGdW5j
dGlvblB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9uSW4pOwog
fQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgUHRyVGFnIGxpbmtUYWcpCitzdGF0
aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVSZWYucmV0YWdnZWRDb2RlKGxpbmtUYWcs
IE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oY29kZVJlZi5jb2RlKCkpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlu
a1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlua1RhZykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZN
KiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1Yihn
ZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2
bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigp
KTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKIHsKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENh
bGxQdHJUYWcsIHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0g
dmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBj
YWxsTGlua0luZm8sIHZpcnR1YWxUaHVuaywgbGlua1RhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywg
dmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1
YlJvdXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIApAQCAtNzIx
LDcgKzcxNyw3IEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAKIAog
dm9pZCBsaW5rRm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBQdHJUYWcgY29kZVRhZykKKyAgICBKU09i
amVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwogCkBAIC03NDMsMTQgKzcz
OSwxMyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihj
YWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVs
bENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwg
IiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIs
IGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChj
YWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIucmV0
YWdnZWQoY29kZVRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2sp
CiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwg
JmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAgICAg
ICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZt
KTsKLSAgICAgICAgbGlua1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1RhZyk7CisgICAgICAgIGxpbmtTbG93Rm9yKCZ2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNzU5LDcgKzc1NCw3IEBAIHZvaWQgbGlua0ZvcigK
IAogdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAg
ICAgCkBAIC03NzQsOCArNzY5LDggQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogCiAgICAgaWYgKGNh
bGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcFRvTm9wKGNhbGxMaW5rSW5mby5wYXRj
aGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExp
bmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7Ci0gICAg
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0
aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKwog
ICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0lu
Y29taW5nQ2FsbChleGVjLCAmY2FsbExpbmtJbmZvKTsKIH0KQEAgLTc4OSw3ICs3ODQsNyBAQCB2
b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQog
Ci1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBQdHJUYWcgY29kZVRhZykKK3N0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewogICAg
IGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xl
YXJDb2RlQmxvY2soKTsKQEAgLTgwMSw3ICs3OTYsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxs
KFZNKiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwotICAgICAgICBsaW5rU2xvd0Zv
cih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmLCBjb2RlVGFnKTsKKyAgICAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVh
ckNhbGxlZSgpOwogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7CkBAIC04MTYs
OCArODExLDcgQEAgdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbAogICAg
IGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiVW5saW5r
aW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCAiXG4iKTsKICAgICAK
LSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZtKTsKLSAgICBy
ZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPigpKTsKIH0KIAogdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtODI5LDE2ICs4MjMsMTUgQEAgdm9pZCBs
aW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbAogICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyB2
aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJG
cmFtZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsICZ2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAg
cmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rLCBsaW5rVGFnKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
ayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgcmV2ZXJ0Q2FsbCgm
dm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xv
d1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1
ZSkpOwogfQogCiBuYW1lc3BhY2Ugewogc3RydWN0IENhbGxUb0NvZGVQdHIgewogICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogfTsKIH0g
Ly8gYW5ub255bW91cyBuYW1lc3BhY2UKIApAQCAtMTAzNCw3ICsxMDI3LDcgQEAgdm9pZCBsaW5r
UG9seW1vcnBoaWNDYWxsKAogICAgICAgICAKICAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9
IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVG
b3JDYWxsKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVx
dWlyZWQpOwpAQCAtMTA4MCw3ICsxMDczLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
I2VuZGlmCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzdHViSml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24o
KS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAg
ICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgp
OwpAQCAtMTA5OCwyMSArMTA5MSwyMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAg
ICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwg
Y2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCiAgICAgICAgIGJv
b2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJz
OjpDYWxsOjpUYWlsKTsKICAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxU
b0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQ
dHIuY2FsbCwgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxU
b0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnRQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0
KSkpOwogI2Vsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGws
IEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBO
ZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRy
LmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikp
OwogI2VuZGlmCiAgICAgfQogICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRP
ZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgUHRyVGFnIGxp
bmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua1Bv
bHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNv
ZGVQdHJUYWcpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2Rl
UHRyVGFnLAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICBpc1dlYkFz
c2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRh
KCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNh
bGxDYXNlcykpLmRhdGEoKSksCkBAIC0xMTIxLDcgKzExMTMsNyBAQCB2b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVy
KGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAg
IC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0
IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxs
ZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKQEAgLTExMzksNyAr
MTEzMSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIAogdm9pZCByZXNldEdldEJ5SUQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlJ
REtpbmQga2luZCkKIHsKLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICBmdGxUaHVua0F3YXJl
UmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkpOwogfQogCkBAIC0xMTU4LDcgKzExNTAsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0KIAotICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIG9wdGltaXplZEZ1bmN0aW9uLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAgZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24o
KSwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDgg
KzQ1LDggQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSgogdm9pZCBy
ZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1
cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwg
UHRyVGFnKTsKLXZvaWQgbGlua0RpcmVjdEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBD
b2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RGb3IoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZv
Jik7CiB2b2lkIHVubGlua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBsaW5rVmlydHVh
bEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mKTsKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbAogdm9pZCByZXNldEdldEJ5SUQoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlES2luZCk7CiB2b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNldEluKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5j
dGlvbiwgUHRyVGFnIGNhbGxUYWcpOwordm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29k
ZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlz
aW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDggQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+
bW92ZShKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVQ6OmFyZ3VtZW50R1BSMCk7CiAgICAgICAg
IG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbVB0cihtX3BjKSwgSklUOjphcmd1bWVudEdQUjEp
OwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU2xvd1BhdGhQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKLSAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2ppdC0+Y2FsbCh0YWcp
OwotICAgICAgICBtX2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+
bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIobV9zbG93UGF0aEZ1bmN0aW9uLCB0YWcpKSk7
CisgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gbV9qaXQtPmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
KyAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obV9zbG93UGF0aEZ1
bmN0aW9uKSkpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
bV9qaXQtPmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDE2KSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY0LDI1ICsxNjQsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaywgY29uc3QgY2hhciogdGh1
bmtLaW5kKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZp
bmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFsbGJhY2ssIGNv
bnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3BlY2lhbGl6ZWQg
dGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKKyAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAl
cyIsIHRodW5rS2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhl
IHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudAog
ICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJsZSBhcmNoaXRlY3R1
cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uKQorICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJsZShGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnRJc0NG
dW5jdGlvblB0cihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIFB0
clRhZyB0YWcgPSBwdHJUYWcoU3BlY2lhbGl6ZWRUaHVua1B0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbCh0YWcpLCBG
dW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoY2FsbChKSVRUaHVua1B0clRhZyksIGZ1bmN0aW9uLnJldGFnZ2VkPEpJ
VFRodW5rUHRyVGFnPigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgY2Fs
bERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAg
ICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
aXNYODYoKSkKICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
cmVnVDMpOwpAQCAtMjA5LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKLSAg
ICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4+IG1fY2FsbHM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+Pj4g
bV9jYWxsczsKICAgICB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3LDEzIEBACiAK
ICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiUHRyVGFnLmgiCisKIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgVk07Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7Cit0ZW1wbGF0ZTxQdHJU
YWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdHlwZWRlZiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoVk0qKTsKK3VzaW5nIFRodW5rR2VuZXJhdG9yID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiAoKikoVk0qKTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAKIC8vIFdlIHdpbGwg
anVtcCBoZXJlIGlmIHRoZSBKSVQgY29kZSB0cmllcyB0byBtYWtlIGEgY2FsbCwgYnV0IHRoZQog
Ly8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVzIHRvIHRocm93IGFuIGV4Y2VwdGlv
biBpbnN0ZWFkLgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTcwLDIzICs3MCwxOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAKICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogCi0g
ICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgp
KTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxl
cik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRh
Zyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSk7CiAKLSAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRp
b25QdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGhyb3dFeGNl
cHRpb25UYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRo
cm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKLXN0YXRpYyB2
b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFNwcnRfSklU
T3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFy
Z2V0VGFnKQorc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2
bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0KICAg
ICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAg
IGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwpAQCAtOTksOSArOTQsOSBAQCBz
dGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxUYWcpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgOCksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwOSw5ICsxMDQsOSBA
QCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKHNsb3dQYXRoRnVu
Y3Rpb24pPihHUFJJbmZvOjpyZWdUMik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihzbG93UGF0aEZ1bmN0aW9uLCBjYWxsVGFnKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGNhbGxUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMTIyLDcgKzExNyw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQ
YXRoRm9yKAogICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgIC8vIFRoZSBzZWNv
bmQgcmV0dXJuIHZhbHVlIEdQUiB3aWxsIGhvbGQgYSBub24temVybyB2YWx1ZSBmb3IgdGFpbCBj
YWxscy4KIAotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcpOwogICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsK
IApAQCAtMTMzLDEwICsxMjgsMTAgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAg
ZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIC8vIFRo
ZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIu
IFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2Fs
bCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE0NSwzMyArMTQw
LDI5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAvLyBi
ZWVuIGFkanVzdGVkLCBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9y
IHVzZS4KICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgUHRyVGFnIGV4cGVjdGVkTGlua2Vk
VGFyZ2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFn
KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAKLSAgICBQ
dHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBsaW5rVGFnLCAiTGluayBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1p
emF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xv
c3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxv
c2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIFB0clRhZyBleHBlY3RlZExpbmtlZFRhcmdldFRh
ZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgZXhwZWN0ZWRM
aW5rZWRUYXJnZXRUYWcpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQ
b2x5bW9ycGhpY0NhbGwpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHlt
b3JwaGljQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBs
aW5rVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkxpbmsgcG9s
eW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3Vs
ZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNs
b3cKIC8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBmYXN0IHRhaWwg
Y2FsbHMgZm9yIG1lZ2Ftb3JwaGljCiAvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5nIHRoZSBzaHVm
Zmxlci4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4MzEK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
CiB7CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhl
IHRhZyBpcyBpbiByZWdUMSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBz
dGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTIzMiwxMiAr
MjIzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KIAogICAg
IC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4K
ICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwgY2FsbENvZGUoaml0LmxhYmVsKCkpOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0LCBDb2RlUHRyVGFnKTsKKyAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgSlNFbnRyeVB0clRh
Zyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKICAgICAgICAgaml0LnBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIGpp
dC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJlZ1Q0KTsKICAgICB9Ci0gICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIENvZGVQdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86
OnJlZ1Q0LCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIG5vdEpTRnVuY3Rpb24ubGluaygmaml0KTsK
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZvOjpyZWdUMCwg
SW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKQEAgLTI0OCwxMyArMjM5LDExIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwog
ICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRo
ZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBw
dHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xvd1BhdGhGb3Io
aml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsK
KyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CiAKLSAgICBQ
dHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsIHZtKTsKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsIGxpbmtUYWcsCisgICAgICAgIHBh
dGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIlZpcnR1YWwgJXMgc2xv
dyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1v
ZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9k
ZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpOwogfQpAQCAtMjYyLDcgKzI1MSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KIGVudW0gVGh1bmtF
bnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MsIEVudGVy
VmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsKIGVudW0gY2xhc3MgVGh1bmtGdW5jdGlvblR5cGUg
eyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0aW9uIH07CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlvblR5cGUgdGh1
bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5
cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlv
blR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1
bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3VlIHBhY2tldHMu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4OQpA
QCAtMzA3LDkgKzI5Niw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9y
R2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVu
Y3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZVB0clRhZyk7
CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklU
OjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9u
Rm9yKGtpbmQpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0
T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEpTRW50cnlQdHJUYWcpOwogCiAgICAgaml0LmFk
ZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0zMjgsNyArMzE3LDcgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVzaSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0
T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIFg4NlJlZ2lzdGVyczo6cjkpOwogICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNvbjo6a2V5KCkp
LCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgaml0LnhvcjY0KFg4NlJlZ2lzdGVyczo6ZXNpLCBY
ODZSZWdpc3RlcnM6OnI5KTsKLSAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBDb2RlUHRy
VGFnKTsKKyAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBKU0VudHJ5UHRyVGFnKTsKIAog
I2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVkeCwgcjgsIHI5
LCAuLi4pOwpAQCAtMzQzLDkgKzMzMiw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5
cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OnI5
KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJz
OjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsKKyAgICAgICAg
aml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0
YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIElu
dGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlUHRy
VGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0
ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2lu
ZCkpLCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRy
dXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMzY3LDcgKzM1Niw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZz
ZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKICAgICBq
aXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNvZGVQb2lzb246Omtl
eSgpKSwgQVJNNjRSZWdpc3RlcnM6OngxKTsKICAgICBqaXQueG9yNjQoQVJNNjRSZWdpc3RlcnM6
OngxLCBBUk02NFJlZ2lzdGVyczo6eDIpOwotICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJzOjp4
MiwgQ29kZVB0clRhZyk7CisgICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6OngyLCBKU0VudHJ5
UHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAjaWYgQ1BVKE1JUFMpCkBA
IC0zODMsOSArMzcyLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JH
ZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5j
dGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0lu
dGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUo
KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhK
U0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZVB0
clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJm
YWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFn
KTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
SlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZO
YXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVQdHJUYWcpOworICAgICAgICBqaXQuY2FsbChK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBJbnRl
cm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgSlNFbnRyeVB0
clRhZyk7CiAKICNpZiBDUFUoTUlQUykKICAgICAvLyBSZXN0b3JlIHN0YWNrIHNwYWNlCkBAIC00
MjksOSArNDE4LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQog
I2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBK
U0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgotICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoRXhjZXB0aW9uSGFuZGxlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRp
b25WTUhhbmRsZUV4Y2VwdGlvbiwgdGFnKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAg
aml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCB0YWcpOworICAgIGppdC5tb3ZlKEpTSW50
ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Cisg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOwogI2lm
IENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogI2VsaWYgT1MoV0lORE9XUykKQEAgLTQ0MSw0MCArNDI5LDQwIEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENvZGVQdHJUYWcs
ICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9u
VHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVu
dGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5
VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZl
ZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5l
IiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAi
bmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRU
YWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1w
V2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0
cmluZyhraW5kKS5kYXRhKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2Fs
bEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5l
cmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uLCBDb2RlRm9yQ2FsbCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVu
a0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhT
YXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxXaXRo
b3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2
bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlw
ZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3Mp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3Ry
dWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZt
LCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5jdGlvbiwgQ29kZUZvckNhbGwpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBuYXRp
dmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpJbnRlcm5hbEZ1bmN0aW9uLCBD
b2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
cml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0p
OwogCkBAIC00OTQsNyArNDgyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBH
ZW5lcmF0bwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMyk7CiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBleHRy
YVRlbXApOwogICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKLSAg
ICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gcHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKKyAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0gc3RhdGljX2Nhc3Q8UHRy
VGFnPihyYW5kb20oKSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1Q
dHIodGVtcFJldHVyblBDVGFnKSwgZXh0cmFUZW1wKTsKICAgICBqaXQudGFnUHRyKEdQUkluZm86
OnJlZ1QzLCBleHRyYVRlbXApOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMywgSlNJ
bnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSkpOwpAQCAtNjE5LDE5ICs2MDcsMTcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogI2VuZGlmIC8vIEVuZCBvZiBVU0UoSlNWQUxV
RTMyXzY0KSBzZWN0aW9uLgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgUHRyVGFnIGFyaXR5Rml4dXBUYWcgPSBwdHJUYWcoQXJpdHlGaXh1
cFB0clRhZywgdm0pOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBhcml0
eUZpeHVwVGFnLCAiZml4dXAgYXJpdHkiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKIAogICAgIGppdC5icmVha3BvaW50KCk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBQdHJU
YWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInVu
cmVhY2hhYmxlIHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNp
YWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQpAQCAtNjcyLDcgKzY1OCw3IEBAIHN0YXRpYyB2
b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5kRmFpbHVyZShq
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJp
bmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4MCw3ICs2NjYsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9h
ZChqaXQsIHZtKTsKQEAgLTY4OSw3ICs2NzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hh
ckF0VGh1bmtHZW5lcmF0CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJBdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIC8vIGxvYWQgY2hhciBj
b2RlCkBAIC02OTksNyArNjg1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29k
ZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVU
YWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJn
SnVtcDsKQEAgLTcyMCwxMSArNzA2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjbHozMlRo
dW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAiY2x6MzIiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNx
cnRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQo
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAgICAgaml0Lmxv
YWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC04ODAsMTIg
Kzg2NiwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcih0cnVuYyk7CiAKIHN0YXRpYyBj
b25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41OwogICAgIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50
SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTkyMywxMSArOTA5LDEx
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8KICAgICByZXR1cm4g
aml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxvb3Ii
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVyYXRv
cihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlm
ICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJu
SW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtOTQ2LDExICs5MzIsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjZWlsIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICgh
VW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybklu
dDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTk2OSwxMSArOTU1LDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1RodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZp
bmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1bmMiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFV
bmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5J
bnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMDAzLDM3ICs5ODksMzcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
dm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVu
dCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlE
b3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAoIVVuYXJ5RG91
YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
KTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
dm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
dm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJs
ZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKTsKICAg
ICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJs
b2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBp
ZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CkBAIC0x
MDg2LDcgKzEwNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3Io
CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
KHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwg
Mik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnMEp1bXA7CkBAIC0xMTE3LDEx
ICsxMTAzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IKICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAiaW11bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmFuZG9tVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByYW5kb21U
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDApOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGpp
dC5lbWl0UmFuZG9tVGh1bmsoKnZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0x
MTI5LDExICsxMTE1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVy
YXQKIAogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbCh2bSksICJyYW5kb20iKTsKICNlbHNlCi0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bCh2bSkpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1
bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTEyMTcsMTYgKzEyMDMsMTYgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgR1BSSW5mbzo6cmVn
VDEpOwogICAgIGppdC54b3I2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwogI2Vu
ZGlmCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIENvZGVQ
dHJUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBDb2RlUHRyVGFnKTsKKyAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7
CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOwogCiAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5s
aW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KAotICAgICAgICBsaW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9y
IGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CisgICAgICAgIGxpbmtC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0
aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDQ2ICsyNiw0NyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUHRy
VGFnLmgiCiAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxM
aW5rSW5mbzsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKK3RlbXBsYXRlPFB0clRhZz4g
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3MgVk07CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2Fs
bFRodW5rKFZNKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNKiwgQ2FsbExpbmtJbmZvJik7
Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKLQotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihW
TSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1
bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVuayhW
TSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSosIENhbGxMaW5rSW5mbyYpOworCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2
ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRl
cm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxvb3JUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dU
aHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSop
OwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
VGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogfQogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAko
cmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI2ICs1OCwyNiBAQCB2b2lkIGluaXRpYWxpemUo
KQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAgICBsbGludF9lbnRyeSgmRGF0YTo6c19vcGNvZGVN
YXApOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSURTOyAr
K2kpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9IChpID09IG9wX2NhdGNoKSA/IEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWcgOiBCeXRlY29kZVB0clRhZzsKLSAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBb
aV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCB0YWcpOwotICAgIH0KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7ICsraSkKKyAgICAgICAg
RGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCBC
eXRlY29kZVB0clRhZyk7CiAKICAgICBzdGF0aWMgY29uc3QgUHRyVGFnIHRhZ3NGb3JPcGNvZGVb
XSA9IHsKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZQotICAg
ICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9ldmFsX3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJU
YWcsIC8vIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJUYWcs
IC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJUYWcs
IC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUKLSAgICAgICAgQ29kZVB0
clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKLSAgICAgICAgQ29k
ZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjawotICAg
ICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9nZW5lcmljX3JldHVybl9wb2ludAorICAgICAgICAv
LyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHRhZ2dlZCB3aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5z
dGVhZCBvZiBKU0VudHJ5VGFnLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg0NzEyCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X3By
b2dyYW1fcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfZXZhbF9wcm9s
b2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9s
b2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9w
cm9sb2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X3Byb2xvZ3VlCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5X2NoZWNrCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2sKKyAgICAgICAgSlNFbnRyeVB0clRhZywg
Ly8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQKICAgICAgICAgQnl0ZWNvZGVQdHJUYWcsIC8v
IGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKICAgICAgICAgRXhjZXB0aW9u
SGFuZGxlclB0clRhZywgLy8gbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQotICAg
ICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lCi0gICAgICAg
IENvZGVQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQotICAgICAg
ICBDb2RlUHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUK
LSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0
X3RyYW1wb2xpbmUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3Ry
dWN0X3RyYW1wb2xpbmUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCiAgICAgICAgIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcsIC8vIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCiAgICAgfTsKIApAQCAt
ODksNyArODksNyBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgICAgICBEYXRhOjpzX29wY29kZU1h
cFtvcGNvZGVJRF0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW29wY29kZUlEXSwgdGFn
c0Zvck9wY29kZVtpXSk7CiAgICAgfQogCi0gICAgdm9pZCogaGFuZGxlciA9IExMSW50OjpnZXRD
b2RlUHRyKGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpOworICAgIHZvaWQq
IGhhbmRsZXIgPSBMTEludDo6Z2V0RXhlY3V0YWJsZUFkZHJlc3MobGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhPcGNvZGVM
ZW5ndGggKyAxOyArK2kpCiAgICAgICAgIERhdGE6OnNfZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zW2ld
LnUucG9pbnRlciA9IGhhbmRsZXI7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHRyVGFnLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC01NSw3ICs1NSw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IEluc3RydWN0aW9uKiBleGNlcHRpb25JbnN0cnVjdGlvbnMoKTsKICAgICBmcmllbmQgT3Bjb2Rl
KiBvcGNvZGVNYXAoKTsKICAgICBmcmllbmQgT3Bjb2RlIGdldE9wY29kZShPcGNvZGVJRCk7Ci0g
ICAgZnJpZW5kIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQpOworICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRyKE9wY29k
ZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPHRhZz4gZ2V0Q29kZVJlZihPcGNvZGVJRCk7CiB9OwogCiB2b2lkIGluaXRpYWxpemUoKTsK
QEAgLTc5LDE2ICs4MCwzNiBAQCBpbmxpbmUgT3Bjb2RlIGdldE9wY29kZShPcGNvZGVJRCBpZCkK
ICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgaWQp
CitBTFdBWVNfSU5MSU5FIHZvaWQqIGdldEV4ZWN1dGFibGVBZGRyZXNzKE9wY29kZUlEIG9wY29k
ZUlEKQogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRPcGNvZGUoaWQp
KTsKKyAgICBBU1NFUlQob3Bjb2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9wY29kZShvcGNvZGVJRCkpOworfQor
Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGdldE9w
Y29kZShvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRDb2RlUmVmKE9wY29kZUlEIG9wY29kZUlE
KQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkpOwogfQogCiAjaWYgRU5BQkxF
KEpJVCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRD
b2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgQVNTRVJUKG9wY29kZUlE
ID49IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSBleGVjdXRhYmxl
QWRkcmVzcygpKTsKK30KIAotQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9u
UHRyKE9wY29kZUlEIGNvZGVJZCkKKyNlbHNlCitBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQ
dHIoT3Bjb2RlSUQgaWQpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2Rl
PihnZXRDb2RlUHRyKGNvZGVJZCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihnZXRPcGNvZGUoaWQpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEyICs0NiwxMiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9p
bnQoVk0mIHZtCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewogICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAg
ICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSkpOworICAgICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgY29kZUJs
b2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwg
dm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRv
cikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRv
cHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RFbnRyeVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLCB2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtNTksMTkg
KzU5LDE5IEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0KICAgICBV
TlVTRURfUEFSQU0odm0pOwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRl
TExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxs
X3Byb2xvZ3VlKSwgZ2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2sp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERp
cmVjdEpJVENvZGUoZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlKSwgZ2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
aykpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklU
KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElT
dHViKGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICBjb2RlQmxvY2st
PnNldEpJVENvZGUoCiAgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29k
ZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9p
bnQoVk0mIHZtLCBDbwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0o
dm0pOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSk7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBnZXRDb2RlUmVmPEpT
RW50cnlQdHJUYWc+KGxsaW50X2V2YWxfcHJvbG9ndWUpOwogICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZSgKICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVS
ZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQpAQCAtODgsNyArODgs
NyBAQCBzdGF0aWMgdm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sCiB7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UmVmID0gdm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8
SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAg
ICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC05Niw3
ICs5Niw3IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRD
b2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGlu
dF9wcm9ncmFtX3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAg
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMg
dm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2ludChWCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmID0gdm0uZ2V0Q1RJU3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0g
dm0uZ2V0Q1RJU3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8
SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAg
ICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC0xMTMs
NyArMTEzLDcgQEAgc3RhdGljIHZvaWQgc2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQoVgogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTElu
dENvZGVSZWYobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRy
VGFnPihsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSkucmV0YWdnZWQ8SlNFbnRyeVB0clRh
Zz4oKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVmKCpuZXcg
RGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4
Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQCB2b2lkKiBjYWxsVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNl
cHRpb24gIiwgSlNWYWx1ZShzY29wZS5leGNlcHRpb24oKSksICIgKGNhbGxUb1Rocm93KS5cbiIp
OwogI2VuZGlmCi0gICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2R1cmlu
Z19jYWxsX3RyYW1wb2xpbmUpOworICAgIHJldHVybiBMTEludDo6Z2V0RXhlY3V0YWJsZUFkZHJl
c3MobGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZSk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpMTEludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsMTEg
KzQ0NCwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogCiAgICAgY29uc3Qg
SklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKICAgICBB
U1NFUlQoY29kZUxvY2F0aW9uKTsKIAotICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhD
b2RlUHRyVGFnLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2
b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBDb2Rl
UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2Rl
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CiAg
ICAgCiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBleGVjLT50b3BPZkZyYW1lKCkp
OwpAQCAtMTQzOCw3ICsxNDM3LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENh
bGwoRXhlYwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9u
KGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAg
ICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVu
Y3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
a2luZCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Y29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwog
ICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CiAKICAgICAgICAgICAgIGlmICghTExJTlRf
QUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewpAQCAtMTQ1MCwxMiArMTQ0OSwx
MiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24p
OwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZtLCBj
YWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcs
IExMSW50Q2FsbElDUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hp
bmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7
CisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0
SXNOb3RQb2lzb25lZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMs
IGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7
CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVy
biBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBwYywgY2FsbGVlQXNWYWx1ZSwga2luZCk7CkBA
IC0xNDY0LDcgKzE0NjMsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChF
eGVjCiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsK
ICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwpAQCAtMTUw
MCwxNCArMTQ5OSwxNCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVj
CiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICBjYWxsTGlua0lu
Zm8tPmNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICAgICAgY2Fs
bExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVl
KTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHIucmV0
YWdnZWQoQ29kZVB0clRhZywgTExJbnRDYWxsSUNQdHJUYWcpOworICAgICAgICBjYWxsTGlua0lu
Zm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKICAgICAgICAgaWYgKGNvZGVCbG9jaykK
ICAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0lu
Zm8pOwogICAgIH0KIAotICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgIFBvaXNvbmVkTWFzbVB0cjo6
YXNzZXJ0SXNOb3RQb2lzb25lZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIExM
SU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgQ29kZVB0clRhZyk7CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxl
ZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAogaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEluc3Ry
dWN0aW9uKiBwYywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTYzNyw3ICsxNjM2
LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbAogICAgIGV4ZWND
YWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzNdLnUub3BlcmFuZCk7CiAg
ICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVyRnJhbWUoZXhlYyk7CiAgICAgZXhlY0NhbGxlZS0+dW5j
aGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBleGVj
Q2FsbGVlLT5zZXRSZXR1cm5QQyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9nZW5lcmljX3JldHVy
bl9wb2ludCkpOworICAgIGV4ZWNDYWxsZWUtPnNldFJldHVyblBDKExMSW50OjpnZXRFeGVjdXRh
YmxlQWRkcmVzcyhsbGludF9nZW5lcmljX3JldHVybl9wb2ludCkpOwogICAgIGV4ZWNDYWxsZWUt
PnNldENvZGVCbG9jaygwKTsKICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogRW5j
b2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKIHsKKyAgICBjb2RlID0gcmV0YWdDb2RlUHRy
PFdhc21FbnRyeVB0clRhZywgSlNFbnRyeVB0clRhZz4oY29kZSk7CiAgICAgcmV0dXJuIHZtRW50
cnlUb0phdmFTY3JpcHQoY29kZSwgdm0sIGZyYW1lKTsKIH0KICAgICAKQEAgLTUxLDUwICs1Miw1
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5CiAKIG5hbWVzcGFj
ZSBMTEludCB7CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHVua1dp
dGhKdW1wVG8oVk0qIHZtLCBPcGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgY2hhciAqdGh1bmtLaW5k
KQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVU
aHVua1dpdGhKdW1wVG8oVk0qIHZtLCBPcGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgY2hhciAqdGh1
bmtLaW5kKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKICAgICAvLyBGSVhNRTog
dGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQgSSdtIG5v
dCBzdXJlIEkgY2FyZS4KLSAgICBMTEludENvZGUgdGFyZ2V0ID0gTExJbnQ6OmdldENvZGVGdW5j
dGlvblB0cihvcGNvZGVJRCk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
KTsKLSAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIENvZGVQdHJUYWcpOworICAg
IExMSW50Q29kZSB0YXJnZXQgPSBMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPEpTRW50cnlQdHJU
YWc+KG9wY29kZUlEKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgodGFyZ2V0LCBKU0VudHJ5UHRy
VGFnKTsKKworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhcmdl
dCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBDb2RlUHRyVGFnLCAiTExJbnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkxMSW50
ICVzIHByb2xvZ3VlIHRodW5rIiwgdGh1bmtLaW5kKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0s
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNhbGwiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVu
a0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
cmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCIpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JD
YWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJh
dGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNr
LCAiZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZv
ckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJu
IGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrLCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCB3aXRoIGFyaXR5IGNoZWNrIik7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV2YWxFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8o
dm0sIGxsaW50X2V2YWxfcHJvbG9ndWUsICJldmFsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X3Byb2dyYW1f
cHJvbG9ndWUsICJwcm9ncmFtIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtb2R1bGVQ
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X21vZHVsZV9w
cm9ncmFtX3Byb2xvZ3VlLCAibW9kdWxlX3Byb2dyYW0iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MiwxMiArNDIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRy
eQogCiBuYW1lc3BhY2UgTExJbnQgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25G
b3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1
bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5l
cmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwcm9ncmFtRW50cnlUaHVua0dlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1vZHVsZVByb2dyYW1FbnRyeVRodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBldmFs
RW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihW
TSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjAxMSw4ICsyMDExLDgg
QEAgbWFjcm8gZG9DYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzdG9yZWkgdDIsIEFy
Z3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxs
ZWUgKyBUYWdPZmZzZXRbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBwcmVwYXJlQ2FsbChMTElu
dENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBMTEludENh
bGxJQ1B0clRhZykKLSAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1h
Y2hpbmVDb2RlVGFyZ2V0W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCisgICAgcHJlcGFyZUNhbGwo
TExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgSlNF
bnRyeVB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1h
Y2hpbmVDb2RlVGFyZ2V0W3QxXSwgSlNFbnRyeVB0clRhZykKIAogLm9wQ2FsbFNsb3c6CiAgICAg
c2xvd1BhdGhGb3JDYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIG1hY3Jv
IG1ha2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwgdGVtcCkKICAgICBpZiBDX0xPT1AKICAgICAgICAg
Y2xvb3BDYWxsSlNGdW5jdGlvbiBlbnRyeQogICAgIGVsc2UKLSAgICAgICAgY2FsbCBlbnRyeSwg
Q29kZVB0clRhZworICAgICAgICBjYWxsIGVudHJ5LCBKU0VudHJ5UHRyVGFnCiAgICAgZW5kCiAg
ICAgc3VicCAxNiwgc3AKIGVuZApAQCAtMjcwLDEwICsyNzAsMTAgQEAgbWFjcm8gbWFrZUhvc3RG
dW5jdGlvbkNhbGwoZW50cnksIHRlbXApCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAj
IFdlIG5lZWQgdG8gYWxsb2NhdGUgMzIgYnl0ZXMgb24gdGhlIHN0YWNrIGZvciB0aGUgc2hhZG93
IHNwYWNlLgogICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICBjYWxsIHRlbXAsIENvZGVQdHJU
YWcKKyAgICAgICAgY2FsbCB0ZW1wLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGFkZHAgMzIsIHNw
CiAgICAgZWxzZQotICAgICAgICBjYWxsIHRlbXAsIENvZGVQdHJUYWcKKyAgICAgICAgY2FsbCB0
ZW1wLCBKU0VudHJ5UHRyVGFnCiAgICAgZW5kCiBlbmQKIApAQCAtMzcwLDcgKzM3MCw3IEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRf
bG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgogICAgICAgICAgICAgbW92
ZSByMSwgc3AKLSAgICAgICAgICAgIGptcCByMCwgQ29kZVB0clRhZworICAgICAgICAgICAgam1w
IHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgogICAgICAgICAgICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgICAgICBlbmQpCkBAIC0yMDU2
LDExICsyMDU2LDExIEBAIG1hY3JvIGRvQ2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAg
aWYgUE9JU09OCiAgICAgICAgIGxvYWRwIF9nX0pJVENvZGVQb2lzb24sIHQyCiAgICAgICAgIHhv
cnAgTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIKLSAgICAgICAg
cHJlcGFyZUNhbGwodDIsIHQxLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQotICAgICAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24odDIsIExMSW50Q2FsbElDUHRyVGFnKQorICAgICAgICBwcmVwYXJl
Q2FsbCh0MiwgdDEsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1
bmN0aW9uKHQyLCBKU0VudHJ5UHRyVGFnKQogICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwo
TExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJ
bnRDYWxsSUNQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5r
SW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCBMTEludENhbGxJQ1B0clRhZykKKyAgICAgICAg
cHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIs
IHQzLCB0NCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50
Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIEpTRW50cnlQdHJUYWcpCiAgICAg
ZW5kCiAKIC5vcENhbGxTbG93OgpAQCAtMjE5MSwxMiArMjE5MSwxMiBAQCBtYWNybyBuYXRpdmVD
YWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRf
V0lOCiAgICAgICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBleGVjdXRhYmxl
T2Zmc2V0VG9GdW5jdGlvblt0MV0sIENvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgZXhlY3V0
YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRw
IDMyLCBzcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9p
c29uLCB0MgogICAgICAgICAgICAgeG9ycCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0s
IHQyCi0gICAgICAgICAgICBjYWxsIHQyLCBDb2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQy
LCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGVuZAogICAgIGVuZAogCkBAIC0yMjM0LDEyICsyMjM0
LDEyIEBAIG1hY3JvIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICBlbHNl
CiAgICAgICAgIGlmIFg4Nl82NF9XSU4KICAgICAgICAgICAgIHN1YnAgMzIsIHNwCi0gICAgICAg
ICAgICBjYWxsIG9mZnNldE9mRnVuY3Rpb25bdDFdLCBDb2RlUHRyVGFnCisgICAgICAgICAgICBj
YWxsIG9mZnNldE9mRnVuY3Rpb25bdDFdLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRw
IDMyLCBzcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9p
c29uLCB0MgogICAgICAgICAgICAgeG9ycCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgdDIKLSAgICAg
ICAgICAgIGNhbGwgdDIsIENvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDIsIEpTRW50cnlQ
dHJUYWcKICAgICAgICAgZW5kCiAgICAgZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjYyLDkgKzI2Miw4IEBAIGNvbnN0IEFyaXRoUHJvZmlsZUlu
dE51bWJlciA9IDB4NTAwMDAwCiAKICMgUG9pbnRlciBUYWdzCiBjb25zdCBCeXRlY29kZVB0clRh
ZyA9IGNvbnN0ZXhwciBCeXRlY29kZVB0clRhZwotY29uc3QgQ29kZVB0clRhZyA9IGNvbnN0ZXhw
ciBDb2RlUHRyVGFnCitjb25zdCBKU0VudHJ5UHRyVGFnID0gY29uc3RleHByIEpTRW50cnlQdHJU
YWcKIGNvbnN0IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcgPSBjb25zdGV4cHIgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZwotY29uc3QgTExJbnRDYWxsSUNQdHJUYWcgPSBjb25zdGV4cHIgTExJbnRDYWxs
SUNQdHJUYWcKIGNvbnN0IE5vUHRyVGFnID0gY29uc3RleHByIE5vUHRyVGFnCiBjb25zdCBTbG93
UGF0aFB0clRhZyA9IGNvbnN0ZXhwciBTbG93UGF0aFB0clRhZwogCkBAIC0xMDM3LDcgKzEwMzYs
NyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHBvcCBjZnIKICAgICAgICAgZW5kCi0gICAgICAgIGptcCByMCwgQ29k
ZVB0clRhZworICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKICAgICAucmVjb3ZlcjoKICAg
ICAgICAgY29kZUJsb2NrR2V0dGVyKHQxLCB0MikKICAgICAuY29udGludWU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3
ICs4NCw3IEBAIEV4ZWN1dGlvbkNvdW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb24KICAgICBy
ZXR1cm4gY291bnRlci5nZXQoKTsKIH0KIAotdm9pZCBDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNp
dGUoY29uc3QgVmVjdG9yPGNvbnN0IHZvaWQqPiYgY29kZUFkZHJlc3NlcykKK3ZvaWQgQ29tcGls
YXRpb246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVz
LmFwcGVuZChPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmgJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckNvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsK
ICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmlu
ZyYgZGVzY3JpcHRpb24pOwogICAgIEV4ZWN1dGlvbkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJG
b3IoY29uc3QgT3JpZ2luU3RhY2smKTsKLSAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZl
Y3Rvcjxjb25zdCB2b2lkKj4mIGNvZGVBZGRyZXNzZXMpOworICAgIHZvaWQgYWRkT1NSRXhpdFNp
dGUoY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4m
IGNvZGVBZGRyZXNzZXMpOwogICAgIE9TUkV4aXQqIGFkZE9TUkV4aXQodW5zaWduZWQgaWQsIGNv
bnN0IE9yaWdpblN0YWNrJiwgRXhpdEtpbmQsIGJvb2wgaXNXYXRjaHBvaW50KTsKICAgICAKICAg
ICB2b2lkIHNldEpldHRpc29uUmVhc29uKEpldHRpc29uUmVhc29uLCBjb25zdCBGaXJlRGV0YWls
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0
U2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT1NSRXhpdFNpdGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDEsNyArNDEsNyBAQCBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NvZGVBZGRyZXNzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2lu
dGVyKG1fY29kZUFkZHJlc3Nlc1tpXSkpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRy
ZXNzZXNbaV0uZGF0YUxvY2F0aW9uKCkpKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPU1JFeGl0U2l0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIzICsyNiwyNCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFByb2ZpbGVyIHsKIAogY2xhc3MgT1NSRXhpdFNpdGUgewogcHVibGljOgotICAgIGV4
cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rvcjxjb25zdCB2b2lkKj4mIGNvZGVBZGRyZXNz
ZXMpCisgICAgZXhwbGljaXQgT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4mIGNvZGVBZGRyZXNzZXMpCiAgICAgICAgIDogbV9j
b2RlQWRkcmVzc2VzKGNvZGVBZGRyZXNzZXMpCiAgICAgewogICAgIH0KICAgICAKLSAgICBjb25z
dCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUFkZHJlc3NlczsgfQorICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUFkZHJl
c3NlczsgfQogICAgIAogICAgIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IG1fY29kZUFkZHJlc3NlczsKKyAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBtX2NvZGVBZGRyZXNz
ZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDggKzU0LDggQEAg
dm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICNpZiBFTkFCTEUoSklUKQogICAgIG1f
aml0Q29kZUZvckNhbGwgPSBudWxscHRyOwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG51
bGxwdHI7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKKyAgICBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigpOwogI2VuZGlmCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IE5VTV9Q
QVJBTUVURVJTX05PVF9DT01QSUxFRDsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qg
PSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDcgQEAgaW5saW5lIGJvb2wgaXNDYWxsKENvZGVTcGVjaWFsaXphdGlv
bktpbgogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7Ci0gICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNO
b0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKKyAgICBmcmllbmQgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0qKTsKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBpbnQgTlVNX1BBUkFN
RVRFUlNfSVNfSE9TVCA9IDA7CkBAIC0xNDMsOCArMTQzLDggQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRl
ZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGVudHJ5cG9pbnRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNo
ZWNrTW9kZSBhcml0eSkKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBlbnRyeXBvaW50Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01v
ZGUgYXJpdHkpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY2FjaGVkIHJl
c3VsdC4gV2Ugb25seSBoYXZlIGl0IGZvciBhcml0eSBjaGVjayBiZWNhdXNlIHdlIHVzZSB0aGUK
ICAgICAgICAgLy8gbm8tYXJpdHkgZW50cnlwb2ludCBpbiBub24tdmlydHVhbCBjYWxscywgd2hp
Y2ggd2lsbCAiY2FjaGUiIHRoaXMgdmFsdWUgZGlyZWN0bHkgaW4KQEAgLTE1MiwxNyArMTUyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0g
ICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spCisgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2spCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Ci0gICAgICAg
ICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQotICAgICAgICAgICAgZ2VuZXJhdGVkSklUQ29kZUZv
cihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJpdHkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+
YWRkcmVzc0ZvckNhbGwoYXJpdHkpOwogICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJp
dHkpIHsKICAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5
IGZvciB0aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCiAgICAgICAgICAgICBz
d2l0Y2ggKGtpbmQpIHsKQEAgLTIzMiw4ICsyMzEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50cmlu
c2ljIG1faW50cmluc2ljOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDYWxsOwog
ICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3
LDEwIEBAIHZvaWQgTmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVjdC0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CiAKLSAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJp
dHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKLSAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcp
OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2su
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRo
KG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCks
IENvZGVQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsLT5h
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25z
dHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFn
KTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIE5hdGl2ZUV4
ZWN1dGFibGU6Ok5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBm
dW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYyBpbnRy
aW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24oaW50cHRyX3QgYml0cykgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGJpdHMpKSB7IH0KIAogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKE5hdGl2ZUZ1bmN0
aW9uIGZ1bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLm1f
cHRyLCBDb2RlUHRyVGFnKSkKKyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCos
IEpTRW50cnlQdHJUYWc+KGZ1bmMubV9wdHIpKQogICAgIHsgfQogICAgIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uKFJhd05hdGl2ZUZ1bmN0aW9uIGZ1bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0
aW9uUHRyPHZvaWQqPihmdW5jLCBDb2RlUHRyVGFnKSkKKyAgICAgICAgOiBtX3B0cih0YWdDRnVu
Y3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGZ1bmMpKQogICAgIHsgfQogCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KQEAgLTg2LDcg
Kzg2LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IG9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NGdW5j
dGlvblB0cjxOYXRpdmVGdW5jdGlvbj4obV9wdHIsIENvZGVQdHJUYWcpOworICAgICAgICByZXR1
cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24sIEpTRW50cnlQdHJUYWc+KG1fcHRy
KTsKICAgICB9CiAKICAgICB2b2lkKiByYXdQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNTIgKzMxLDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEZP
Ul9FQUNIX1BUUlRBR19FTlVNKHYpIFwKICAgICB2KE5vUHRyVGFnKSBcCi0gICAgdihOZWFyQ29k
ZVB0clRhZykgXAogICAgIHYoQ0Z1bmN0aW9uUHRyVGFnKSBcCiAgICAgXAotICAgIHYoQXJpdHlG
aXh1cFB0clRhZykgXAogICAgIHYoQjNDQ2FsbFB0clRhZykgXAorICAgIHYoQjNDb21waWxhdGlv
blB0clRhZykgXAogICAgIHYoQnl0ZWNvZGVQdHJUYWcpIFwKLSAgICB2KEJ5dGVjb2RlSGVscGVy
UHRyVGFnKSBcCi0gICAgdihDb2RlUHRyVGFnKSBcCi0gICAgdihERkdPU1JFbnRyeVB0clRhZykg
XAotICAgIHYoREZHT1NSRXhpdFB0clRhZykgXAotICAgIHYoREZHT3BlcmF0aW9uUHRyVGFnKSBc
CisgICAgdihEaXNhc3NlbWJseVB0clRhZykgXAogICAgIHYoRXhjZXB0aW9uSGFuZGxlclB0clRh
ZykgXAotICAgIHYoRlRMQ29kZVB0clRhZykgXAotICAgIHYoRlRMTGF6eVNsb3dQYXRoUHRyVGFn
KSBcCi0gICAgdihGVExPU1JFeGl0UHRyVGFnKSBcCi0gICAgdihGVExPcGVyYXRpb25QdHJUYWcp
IFwKLSAgICB2KEZUTFNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihHZXRQcm9wZXJ0eVB0clRhZykg
XAotICAgIHYoR2V0dGVyU2V0dGVyUHRyVGFnKSBcCi0gICAgdihIYXNQcm9wZXJ0eVB0clRhZykg
XAotICAgIHYoSklUQ29kZVB0clRhZykgXAotICAgIHYoSklUT3BlcmF0aW9uUHRyVGFnKSBcCiAg
ICAgdihKSVRUaHVua1B0clRhZykgXAotICAgIHYoSklUV3JpdGVUaHVua1B0clRhZykgXAotICAg
IHYoTExJbnRDYWxsSUNQdHJUYWcpIFwKLSAgICB2KExpbmtDYWxsUHRyVGFnKSBcCi0gICAgdihM
aW5rQ2FsbFJlc3VsdFB0clRhZykgXAotICAgIHYoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZykg
XAotICAgIHYoTGlua1BvbHltb3JwaGljQ2FsbFJlc3VsdFB0clRhZykgXAotICAgIHYoTGlua1Zp
cnR1YWxDYWxsUHRyVGFnKSBcCi0gICAgdihMaW5rVmlydHVhbENhbGxSZXN1bHRQdHJUYWcpIFwK
LSAgICB2KE1hdGhJQ1B0clRhZykgXAotICAgIHYoTmF0aXZlQ29kZVB0clRhZykgXAotICAgIHYo
UHV0UHJvcGVydHlQdHJUYWcpIFwKKyAgICB2KEpJVFN0dWJSb3V0aW5lUHRyVGFnKSBcCisgICAg
dihKU0VudHJ5UHRyVGFnKSBcCisgICAgdihKU0ludGVybmFsUHRyVGFnKSBcCisgICAgdihKU1N3
aXRjaFB0clRhZykgXAorICAgIHYoTGlua0J1ZmZlclB0clRhZykgXAorICAgIHYoT3BlcmF0aW9u
UHRyVGFnKSBcCisgICAgdihPU1JFeGl0UHRyVGFnKSBcCiAgICAgdihTbG93UGF0aFB0clRhZykg
XAotICAgIHYoU3BlY2lhbGl6ZWRUaHVua1B0clRhZykgXAotICAgIHYoU3dpdGNoVGFibGVQdHJU
YWcpIFwKLSAgICB2KFRocm93RXhjZXB0aW9uUHRyVGFnKSBcCisgICAgdihXYXNtRW50cnlQdHJU
YWcpIFwKICAgICB2KFlhcnI4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyMTZCaXRQdHJUYWcpIFwK
ICAgICB2KFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5MTZC
aXRQdHJUYWcpIFwKICAgICB2KFlhcnJCYWNrdHJhY2tQdHJUYWcpIFwKLSAgICB2KFdhc21DYWxs
UHRyVGFnKSBcCi0gICAgdihXYXNtSGVscGVyUHRyVGFnKSBcCi0KIAogZW51bSBQdHJUYWcgOiB1
aW50cHRyX3QgewogI2RlZmluZSBERUNMQVJFX1BUUlRBR19FTlVNKHRhZykgIHRhZywKQEAgLTg1
LDggKzYxLDcgQEAgZW51bSBQdHJUYWcgOiB1aW50cHRyX3QgewogfTsKIAogc3RhdGljX2Fzc2Vy
dChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5vUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDApLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTmVhckNv
ZGVQdHJUYWcpID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSksICIiKTsKLXN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRnVuY3Rpb25QdHJUYWcpID09IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMiksICIiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90
PihDRnVuY3Rpb25QdHJUYWcpID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSksICIiKTsKIAog
aW5saW5lIGNvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKIHsKQEAgLTk4LDEwICs3
Myw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcKICN1bmRlZiBS
RVRVUk5fUFRSVEFHX05BTUUKIH0KIAotdWludHB0cl90IG5leHRQdHJUYWdJRCgpOwotCiAjaWYg
IVVTRShQT0lOVEVSX1BST0ZJTElORykKLWlubGluZSB1aW50cHRyX3QgbmV4dFB0clRhZ0lEKCkg
eyByZXR1cm4gMDsgfQogCiBpbmxpbmUgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQq
KSB7IHJldHVybiAiPG5vIHRhZz4iOyB9CiAKQEAgLTExMSwyMSArODMsMzkgQEAgaW5saW5lIGNv
bnN0ZXhwciBQdHJUYWcgcHRyVGFnKEFyZ3VtZW50cwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRl
cjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+Pgog
aW5saW5lIGNvbnN0ZXhwciBUIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFn
LCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRy
KSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
dHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5
cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBl
IHB0ciwgUHRyVGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFt
ZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0
clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7
IHJldHVybiBwdHI7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFs
dWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhw
ciBUIHVudGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8VD4ocHRyKTsgfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0
clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlw
ZT46OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ29kZVB0cihQdHJUeXBlIHB0cikgIHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5
cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVl
Pj4KIGlubGluZSBjb25zdGV4cHIgUHRyVHlwZSB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0
clRhZykgeyByZXR1cm4gcHRyOyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlw
ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6
dmFsdWU+PgoraW5saW5lIFB0clR5cGUgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVy
biBwdHI7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYg
IXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBUIHJl
dGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxUPihwdHIpOyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgUHRyVGFnLCB0
eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2lu
dGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0
clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlw
ZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgUHRyVHlwZSByZXRhZ0NvZGVQdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZywgUHRyVGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFn
LCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHJldGFnQ29k
ZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVl
Pj4KIGlubGluZSBjb25zdGV4cHIgVCByZW1vdmVDb2RlUHRyVGFnKFB0clR5cGUgcHRyKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCkBAIC0xMzUsMTUgKzEyNSwyNyBAQCBpbmxp
bmUgY29uc3RleHByIFB0clR5cGUgcmVtb3ZlQ29kZVB0clRhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1
ZT4+CiBpbmxpbmUgVCB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFn
LCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB0YWdDRnVuY3Rpb25QdHIoUHRyVHlw
ZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8
UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHRhZ0NGdW5jdGlvblB0cihQdHJUeXBl
IHB0ciwgUHRyVGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFt
ZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0
clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBw
dHIpIHsgcmV0dXJuIHB0cjsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJU
eXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+
Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgVCB1
bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8VD4ocHRyKTsgfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0
clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlw
ZT46OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZT4+CiBpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRy
VGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyBy
ZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXND
RnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lk
IGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogICAgICAgICAsIG1f
aXNJbml0aWFsaXphdGlvbihpc0luaXRpYWxpemF0aW9uKQogICAgICAgICAsIG1fY29udGV4dChj
b250ZXh0KQogICAgICAgICAsIG1fY2FjaGVhYmlsaXR5KENhY2hpbmdBbGxvd2VkKQotICAgICAg
ICAsIG1fcHV0RnVuY3Rpb24obnVsbHB0cikKICAgICB7CiAgICAgfQogCkBAIC02NywxNyArNjYs
MTUgQEAgcHVibGljOgogICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2
b2lkIHNldEN1c3RvbVZhbHVlKEpTT2JqZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24p
CisgICAgdm9pZCBzZXRDdXN0b21WYWx1ZShKU09iamVjdCogYmFzZSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1
bmN0aW9uUHRyKGZ1bmN0aW9uKTsKICAgICAgICAgbV90eXBlID0gQ3VzdG9tVmFsdWU7CiAgICAg
ICAgIG1fYmFzZSA9IGJhc2U7CiAgICAgICAgIG1fcHV0RnVuY3Rpb24gPSBmdW5jdGlvbjsKICAg
ICB9CiAKLSAgICB2b2lkIHNldEN1c3RvbUFjY2Vzc29yKEpTT2JqZWN0KiBiYXNlLCBQdXRWYWx1
ZUZ1bmMgZnVuY3Rpb24pCisgICAgdm9pZCBzZXRDdXN0b21BY2Nlc3NvcihKU09iamVjdCogYmFz
ZSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7Ci0gICAgICAg
IGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKGZ1bmN0aW9uKTsKICAgICAgICAgbV90eXBlID0g
Q3VzdG9tQWNjZXNzb3I7CiAgICAgICAgIG1fYmFzZSA9IGJhc2U7CiAgICAgICAgIG1fcHV0RnVu
Y3Rpb24gPSBmdW5jdGlvbjsKQEAgLTEwMCw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9p
c1N0cmljdE1vZGUgPSB2YWx1ZTsKICAgICB9CiAKLSAgICBQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0
dGVyKCkgY29uc3QKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRl
cigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGVDdXN0b20oKSk7CiAg
ICAgICAgIHJldHVybiBtX3B1dEZ1bmN0aW9uOwpAQCAtMTQwLDcgKzEzNyw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6YXRpb247CiAgICAgdWludDhfdCBtX2NvbnRleHQ7CiAg
ICAgQ2FjaGVhYmlsaXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKLSAgICBQdXRWYWx1ZUZ1bmMgbV9w
dXRGdW5jdGlvbjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fcHV0RnVuY3Rp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMzA3MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICBzd2l0Y2ggKGtpbmQp
IHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2Vu
ZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51bGxwdHI7Ci0g
ICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBudWxscHRy
OwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdl
bmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA6IE5VTV9QQVJBTUVURVJTX05PVF9DT01Q
SUxFRDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgogICAgICAg
ICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVC
bG9jay0+aml0Q29kZSgpIDogbnVsbHB0cjsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBudWxscHRyOwogICAgICAgICBtX251bVBh
cmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpIDogTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4MSwyMyArNjgxLDIzIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZN
OjpnZXRIb3N0RnVuY3Rpb24oTmEKICAgICBVTlVTRURfUEFSQU0oaW50cmluc2ljKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogICAgIHJldHVybiBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRo
aXMsCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKSwg
SklUQ29kZTo6SG9zdENhbGxUaHVuaykpLCBmdW5jdGlvbiwKLSAgICAgICAgYWRvcHRSZWYoKm5l
dyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVm
KGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1
bmspKSwgY29uc3RydWN0b3IsCisgICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShM
TEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9s
aW5lKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpLCBmdW5jdGlvbiwKKyAgICAgICAgYWRvcHRS
ZWYoKm5ldyBOYXRpdmVKSVRDb2RlKExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxs
aW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KSwgY29uc3RydWN0b3IsCiAgICAgICAgIE5vSW50cmluc2ljLCBzaWduYXR1cmUsIG5hbWUpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogI2lmIEVOQUJMRShKSVQpCiAgICAg
aWYgKGNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAg
ICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCh0aGlzKTsK
LSAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KHRo
aXMpOworICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2Fs
bCh0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICByZXR1cm4gaml0U3R1
YnMtPmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QodGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0
clRhZz4oKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSk7Ci0gICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZSk7CisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAogVk06OkNsaWVudERh
dGE6On5DbGllbnREYXRhKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtNTQyLDcgKzU0Miw3IEBAIHB1YmxpYzoKICAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklUVGh1
bmtzPiBqaXRTdHViczsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICB7CiAgICAg
ICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOwogICAgIH0KQEAg
LTU1NCw3ICs1NTQsNyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1
bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0
aXZlRnVuY3Rpb24sIEludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0
IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGV4Y2VwdGlvbk9mZnNldCgpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAgQjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAgICAgICAgICAgICAgICAg
ICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3Jh
dGNoMSwgZnApKTsKICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMSwgc2NyYXRjaDIpKTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2Nh
dGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9t
V2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1
bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAg
ICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0
YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4KQEAgLTQ5OCw3ICs0OTgsNyBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFeGNlcHRpb25DaGVjayhDCiAgICAgYXV0byBqdW1w
VG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKIAogICAgIGppdC5hZGRMaW5rVGFzayhbanVt
cFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5r
czo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1Yiwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIH0p
OwogfQogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0VGllclVw
Q2hlY2sodWludAogICAgICAgICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKIAogICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xl
dG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CiAKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKQEAg
LTExMTIsNyArMTExMiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW4KICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVu
Y3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwpAQCAtMTEyOCw3ICsxMTI4LDYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bgogICAgICAgICBpZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCiAgICAgICAg
ICAgICBqdW1wRGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBqdW1wRGVzdGluYXRpb24sIGlzRW1iZWRkZXJCbG9j
ay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9p
c29uKSk7CiAKLSAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcs
IHNpZ25hdHVyZS5oYXNoKCkpOwogICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2Nr
LCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0g
KFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTExMzgsOSArMTEzNyw5IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgICAgICAgICAv
LyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRo
aW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVy
blR5cGUsIGNhbGxUYWddIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3By
KCksIGNhbGxUYWcpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJu
VHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRk
ZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVt
YmVkZGVyQ2FsbFJlc3VsdCk7CkBAIC0xMTY4LDcgKzExNjcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJD
YWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBw
ZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXgg
fSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBw
ZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxs
KSwgZnVuY3Rpb25JbmRleCB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEzMTAsNyArMTMwOSw2IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgY2FsbGVlQ29kZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4oKSwg
Y2FsbGVlQ29kZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKTsKLSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNt
Q2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKQEAgLTEzMjUsNyArMTMyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVD
b2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgaml0LmNh
bGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgY2FsbFRhZyk7Cisg
ICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAx
XS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCw4IEBAIHZvaWQgQkJRUGxhbjo6cHJl
cGFyZSgpCiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlv
bkluZGV4ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbaW1wb3J0RnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRl
eCwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1w
b3J0LT5maWVsZCkpOwotICAgICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9XYXNtKHNpZ25hdHVy
ZSwgaW1wb3J0RnVuY3Rpb25JbmRleCk7CisgICAgICAgIGF1dG8gYmluZGluZyA9IHdhc21Ub1dh
c20oaW1wb3J0RnVuY3Rpb25JbmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBj
YXNlIEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKQEAgLTMwMyw3ICszMDEsNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICBDb21waWxh
dGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRl
eF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5k
ZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFB0clRhZyBjYWxs
VGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsK
QEAgLTMxMiw3ICszMDksNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0
TG9jCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgY2FsbFRhZywgIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIs
IGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9u
UHRyVGFnLCAiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBX
VEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9
CiAKQEAgLTMyNCwyMyArMzIxLDIwIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJz
dHJhY3RMb2MKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBlbWJlZGRlclRv
V2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgQ29kZVB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBv
aW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBC
M0NvbXBpbGF0aW9uUHRyVGFnLCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWld
ICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
LAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChh
dXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGV4ZWN1dGFibGVBZGRyZXNzOworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGV4ZWN1dGFibGVBZGRyZXNzOwogICAgICAg
ICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMs
IGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3Vs
ZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCiAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVB
ZGRyZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
KS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkp
LT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
ICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgUHRyVGFnIG9sZFRh
ZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MucmV0YWdnZWQob2xkVGFnLCBOZWFy
Q29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGls
YXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcykpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fY2FsbExpbmtJbmZvcyk7CiAgICAg
fQogCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4mJiB0YWtlV2FzbVRvV2FzbUV4
aXRTdHVicygpCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiYmIHRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV93YXNtVG9XYXNtRXhpdFN0dWJzKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAg
IGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKICAgICAKICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4g
bV93YXNtVG9XYXNtRXhpdFN0dWJzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwog
ICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFz
aCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0
ZWRGdW5jdGlvbkluZGljZXM7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVy
VG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxI
ZWxwZXJzOwogCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJl
PiB3YXNtVG9XYXNtKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1bnNpZ25lZCBpbXBvcnRJ
bmRleCkKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBC
aW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgdW5pcXVpZnkgdGhlIHN0dWJzIGJhc2VkIG9uIHNpZ25hdHVyZSAr
IGluZGV4IHRvIHNlZSBpZiB0aGlzIHNhdmVzIG1lbW9yeS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTU3CkBAIC04MCwxNCArODAsMTMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgIGppdC5sb2FkUHRyKHNj
cmF0Y2gsIHNjcmF0Y2gpOwogICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKICAgICAg
ICAgaml0LnhvclB0cihKSVQ6OlRydXN0ZWRJbW1QdHIoZ19KSVRDb2RlUG9pc29uKSwgc2NyYXRj
aCk7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhh
c2goKSk7Ci0gICAgaml0Lmp1bXAoc2NyYXRjaCwgdGFnKTsKKyAgICBqaXQuanVtcChzY3JhdGNo
LCBXYXNtRW50cnlQdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFko
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIHRhZywgIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBv
cnRbJWldIiwgaW1wb3J0SW5kZXgpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVp
XSIsIGltcG9ydEluZGV4KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAkocmV2aXNpb24gMjMwNzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBlbnVtIGNsYXNzIEJpbmRpbmdGYWlsdXJlIHsKICAgICBP
dXRPZk1lbW9yeSwKIH07CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub1dhc20oY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQgaW1wb3J0SW5k
ZXgpOworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsZWUuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpjYWxsZWUpOwogICAgIH0KIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlKCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAKICAgICBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQogICAgIEluZGV4T3JOYW1lIGluZGV4T3JOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleE9yTmFtZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHN0
YXRpYyB1bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0K
LSAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciog
Y2FsbGVlTW92ZUxvY2F0aW9uLCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdp
biwgQjM6OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHZvaWQgc2V0dXBGcmFtZUluUHJv
bG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGNhbGxlZU1v
dmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSBy
ZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2Ug
cmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQu
bW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVz
dWx0KTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlv
biwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1vdmVM
b2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwogICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4
XS5nZXQoKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlw
b2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNw
YWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUlu
ZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwpAQCAtMTIz
LDEwICsxMjMsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fY2Fs
bGVlczsKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fb3B0aW1pemVkQ2FsbGVlczsKICAg
ICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8
dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQz
Ml90Pj4gbV9lbWJlZGRlckNhbGxlZXM7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0
cj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKICAgICBWZWN0b3I8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnRzOwogICAgIFZlY3RvcjxW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKLSAg
ICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7Cisg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21U
b1dhc21FeGl0U3R1YnM7CiAgICAgUmVmUHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0
b21pYzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBt
X2Vycm9yTWVzc2FnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVy
KFNpZ25hbCwgCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlckludGVybmFsOjp2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3Rh
cnQpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihlbmQpKTsKICAgICAgICAgICAgICAgICBpZiAoc3Rh
cnQgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbiAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgZW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJ
bnRlcm5hbDo6dmVyYm9zZSwgImZvdW5kIG1hdGNoIik7Ci0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBleGNlcHRpb25TdHViID0gVGh1bmtzOjpzaW5nbGV0b24oKS5l
eGlzdGluZ1N0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGNl
cHRpb25TdHViID0gVGh1bmtzOjpzaW5nbGV0b24oKS5leGlzdGluZ1N0dWIodGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9y
IHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0
IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCiAgICAgICAgICAgICAgICAgICAgIGlm
ICghZXhjZXB0aW9uU3R1YikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjMwNzM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjU2LDcgKzI1Niw3IEBAIGlubGluZSBib29sIGlzVmFsaWROYW1lVHlwZShJbnQgdmFs
KQogfQogCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7Ci0gICAgQ29kZUxvY2F0aW9u
TmVhckNhbGwgY2FsbExvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRy
eVB0clRhZz4gY2FsbExvY2F0aW9uOwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2U7CiB9
OwogCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RydWN0IEVudHJ5cG9pbnQgewogfTsKIAogc3RydWN0
IEludGVybmFsRnVuY3Rpb24gewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBjYWxsZWVN
b3ZlTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRh
Zz4gY2FsbGVlTW92ZUxvY2F0aW9uOwogICAgIEVudHJ5cG9pbnQgZW50cnlwb2ludDsKIH07CiAK
QEAgLTI3NCw3ICsyNzQsNyBAQCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAvLyB3aXRoIGFs
bCBpbXBvcnRzLCBhbmQgdGhlbiBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLiBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uIGFuZCBGdW5jdGlvbkluZGV4U3BhY2UgYXJlIG9ubHkKIC8vIG1lYW50
IGFzIGZhc3QgbG9va3VwIHRhYmxlcyBmb3IgdGhlc2Ugb3Bjb2RlcyBhbmQgZG8gbm90IG93biBj
b2RlLgogc3RydWN0IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gewotICAgIHVzaW5nIExv
YWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cio7CisgICAgdXNpbmcgTG9hZExvY2F0
aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qOwogI2lmICFDT01Q
SUxFUl9TVVBQT1JUUyhOU0RNSV9GT1JfQUdHUkVHQVRFUykKICAgICBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uKCkgPSBkZWZhdWx0OwogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b24oU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50
TG9hZExvY2F0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21JbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBUYXJnZXQgaW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZv
ciB3YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRk
ZXItc3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgogICAgICAg
ICBJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UgeyBudWxscHRyIH07CiAgICAgICAgIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiB7IG51bGxwdHIgfTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdhc21Ub0Vt
YmVkZGVyU3R1YjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAgICB2b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51
bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMgYSBQb2lzb25lZEJhcnJpZXI8
SlNPYmplY3Q+LgogICAgIH07CiAgICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9udW1JbXBvcnRGdW5jdGlvbnM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTcsMTQgKzk3LDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21D
YWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsIGNhbGxUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWld
ICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSksCisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRh
ZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250
ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCiAgICAgb21nRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBlbnRyeXBvaW50OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkg
PT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKICAgICAgICAgUmVmPENhbGxlZT4g
Y2FsbGVlID0gQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpOwpAQCAtMTIwLDE2ICsxMTksMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0KQogICAgICAgICBtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVz
W21fZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKGNhbGxlZSk7CiAKICAgICAgICAgZm9yIChhdXRv
JiBjYWxsIDogdW5saW5rZWRDYWxscykgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3Vu
dCgpKQogICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3Bh
Y2UpLmVudHJ5cG9pbnQoKTsKKyAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsK
IAotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAg
IFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkp
OwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZW50cnlwb2ludC5yZXRhZ2dlZChvbGRUYWcsIE5l
YXJDb2RlUHRyVGFnKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFy
Q2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFn
PihlbnRyeXBvaW50KSk7CiAgICAgICAgIH0KICAgICAgICAgdW5saW5rZWRDYWxscyA9IHN0ZDo6
ZXhjaGFuZ2UobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1ttX2Z1bmN0aW9uSW5k
ZXhdLCB1bmxpbmtlZENhbGxzKTsKICAgICB9CkBAIC0xNDksMTAgKzE0NSw3IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBj
YWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwg
IiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAg
ICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVy
Ym9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlv
bi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRy
VGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoZW50cnlwb2ludC5yZXRhZ2dlZChvbGRUYWcsIE5lYXJDb2RlUHRyVGFn
KSkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxs
KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVu
dHJ5cG9pbnQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC01MiwxOSArNTIs
MTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVy
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBq
aXQuY2FsbCh0YWcpOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxk
IG5vdCByZWFjaCB0aGlzLgogCiAgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5j
dGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24sIHRhZykpOwotICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2Fz
bSIpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KHRocm93V2FzbUV4Y2VwdGlvbikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dl
bmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJh
dG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIApAQCAtNzQsMTEgKzczLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNr
T3ZlcmZsb3cKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uSGFuZGxlciA9IGppdC5qdW1w
KCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFi
ZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKGxvY2tlciwgdGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlRocm93IHN0YWNrIG92ZXJmbG93IGZyb20gV2FzbSIp
OworICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKGxvY2tlciwg
dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IHN0YWNr
IG92ZXJmbG93IGZyb20gV2FzbSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dl
ck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJh
dG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGUg
dXNlciBoYXMgYWxyZWFkeSBwdXQgdGhlIGZ1bmN0aW9uIGluZGV4IGludG8gR1BSSW5mbzo6YXJn
dW1lbnRHUFIxCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTkzLDE2ICs5MiwxNSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRoCiAgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgdHlwZWRlZiB2b2lkICgq
UnVuKShJbnN0YW5jZSosIHVpbnQzMl90KTsKICAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9y
SW5kZXg7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyKHJ1biwgdGFnKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0
LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCB0YWcpOworICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHJ1
bikpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGppdC5jYWxsKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxs
LCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2
YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgIGppdC5yZXQoKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5lYXJD
b2RlUHRyVGFnLCAiVHJpZ2dlciBPTUcgdGllciB1cCIpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVHJpZ2dlciBPTUcgdGllciB1cCIpOwog
fQogCiBzdGF0aWMgVGh1bmtzKiB0aHVua3M7CkBAIC0xMzAsMjggKzEyOCwyOCBAQCBUaHJvd1dh
c21FeGNlcHRpb24gVGh1bmtzOjp0aHJvd1dhc21FeGNlCiAgICAgcmV0dXJuIG1fdGhyb3dXYXNt
RXhjZXB0aW9uOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgcmV0dXJuIHN0dWIobG9ja2VyLCBnZW5lcmF0
b3IpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gVGh1bmtzOjpzdHViKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBBU1NFUlQoISFn
ZW5lcmF0b3IpOwogICAgIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0dWJzLmFkZChn
ZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3N0dWJzLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4oKSk7CiAgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IGdlbmVyYXRvcihsb2NrZXIpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZSA9IGdlbmVyYXRvcihsb2NrZXIpOwog
ICAgIC8vIFdlIHNwZWNpZmljYWxseSBkb24ndCB1c2UgdGhlIGl0ZXJhdG9yIGhlcmUgdG8gYWxs
b3cgZ2VuZXJhdG9yIHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSBtX3N0dWJzLgogICAgIG1fc3R1YnMu
c2V0KGdlbmVyYXRvciwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGU7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBUaHVua3M6OmV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IFRodW5rczo6ZXhpc3RpbmdT
dHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CiAKQEAgLTE1OSw3ICsxNTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
VGh1bmtzOjpleGlzdGluZ1N0CiAgICAgaWYgKGl0ZXIgIT0gbV9zdHVicy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogCi0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZigpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRodW5rcy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDExIEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RM
b2NrZXImKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9u
RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRo
dW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcihjb25zdCBB
YnN0cmFjdExvY2tlciYpOwogCi10eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5r
R2VuZXJhdG9yKShjb25zdCBBYnN0cmFjdExvY2tlciYpOwordHlwZWRlZiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+ICgqVGh1bmtHZW5lcmF0b3IpKGNvbnN0IEFic3RyYWN0
TG9ja2VyJik7CiAKIGNsYXNzIFRodW5rcyB7CiBwdWJsaWM6CkBAIC00NiwxNCArNDYsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlv
bik7CiAgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3Ip
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3Ip
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1YihUaHVua0dl
bmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHVi
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsK
IAogcHJpdmF0ZToKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKLSAgICBIYXNoTWFwPFRodW5r
R2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgSGFzaE1hcDxU
aHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gbV9z
dHViczsKICAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxs
cHRyIH07CiAgICAgTG9jayBtX2xvY2s7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0
NSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1v
dmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxs
ZWVNb3ZlTG9jYXRpb247CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbik7
CiAgICAgfSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAg
QVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBm
dW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOworICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVu
dHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOwogICAgIH0pOwogCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAKICAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHdhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJu
IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1Yihz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1w
b3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogCkBAIC05OCw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIFBvaXNvbmVkUmVm
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2s7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9KU0V4aXRTdHVi
czsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1f
d2FzbVRvSlNFeGl0U3R1YnM7CiAgICAgUG9pc29uZWRVbmlxdWVQdHI8SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25hbEZpbmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2FzbVRvSlMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgc3Rh
dGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoSklUJgogICAgIGppdC54b3I2NChwb2lz
b24sIHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYs
IEJpbmRpbmdGYWlsdXJlPiBoYW5kbGVCYWRJNjRVc2UoVk0qIHZtLCBKSVQmIGppdCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorc3RhdGljIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVy
ZT4gaGFuZGxlQmFkSTY0VXNlKFZNKiB2bSwgSklUJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAKQEAgLTkzLDggKzkzLDcgQEAgc3RhdGljIEV4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQgogICAgICAgICAvLyBMZXQncyBiZSBwYXJh
bm9pZCBvbiB0aGUgZXhjZXB0aW9uIHBhdGggYW5kIHplcm8gb3V0IHRoZSBwb2lzb24gaW5zdGVh
ZCBvZiBsZWF2aW5nIGl0IGluIGFuIGFyZ3VtZW50IEdQUi4KICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAKLSAg
ICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4
ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CkBAIC0xMTYsMTUgKzEx
NSwxNCBAQCBzdGF0aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCCiAgICAgICAg
IGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRocm93QmFkSTY0LCBj
YWxsVGFnKSk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNp
Z25hdHVyZS5oYXNoKCkpOwotICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCB0YWcsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0
WyVpXSIsIGltcG9ydEluZGV4KTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGhyb3dCYWRJNjQpKTsKKyAgICAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2ViQXNzZW1ibHktPkph
dmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4oKTsKIH0KIAotRXhwZWN0
ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZt
LCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0s
IEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRp
b24uCiAgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCkBAIC0zMDIsMTIgKzMwMCw5IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgLy8gTGV0J3MgYmUg
cGFyYW5vaWQgYmVmb3JlIHRoZSBjYWxsIGFuZCB6ZXJvIG91dCB0aGUgcG9pc29uIGluc3RlYWQg
b2YgbGVhdmluZyBpdCBpbiBhbiBhcmd1bWVudCBHUFIuCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogCi0gICAg
ICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJ
RCgpKTsKLSAgICAgICAgUHRyVGFnIGRvVW53aW5kaW5nVGFnID0gcHRyVGFnKFdhc21IZWxwZXJQ
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLQogICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3aXRoIHRo
ZSBjYWxsIGJlbG93LiIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY2Fs
bEZ1bmMpPihHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwot
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9
IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhj
ZXB0aW9uQ2hlY2spOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbiBoZXJlLgpAQCAtMzE5LDcgKzMx
NCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAg
ICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxs
ID0gaml0LmNhbGwoZG9VbndpbmRpbmdUYWcpOworICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0pOwogCiAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CkBAIC0zNDQs
MTEgKzMzOSwxMCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9y
eSk7CiAKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxGdW5j
LCBjYWxsVGFnKSk7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBGdW5j
dGlvblB0cihkb1Vud2luZGluZywgZG9VbndpbmRpbmdUYWcpKTsKKyAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY2FsbEZ1bmMpKTsKKyAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4oZG9VbndpbmRpbmcpKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdh
c21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVp
XSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRh
ZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIC8vIE5v
dGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2Fz
bUIzSVJHZW5lcmF0b3IKQEAgLTU1MCwxNCArNTQ0LDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2Fz
bUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBzbG93UGF0aC5saW5rKCZq
aXQpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvSTMyKT4o
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0
YWcpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAg
ICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkp
OwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0
VG9JMzIsIHRhZykpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4oY29udmVydFRvSTMyKSk7CiAgICAgICAgIH0pOwogCiAgICAg
ICAgIGRvbmUubGluaygmaml0KTsKQEAgLTU4NiwxNCArNTc5LDEzIEBAIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zs
b2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBub3RBTnVt
YmVyLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252
ZXJ0VG9GMzIpPihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9
IGppdC5jYWxsKHRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNl
cHRpb24oKnZtKSk7CiAKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGNvbnZlcnRUb0YzMiwgdGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb252ZXJ0VG9GMzIpKTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwpAQCAtNjIxLDE0ICs2MTMsMTMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICBqaXQubW92ZTY0
VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIG5v
dEFOdW1iZXIubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KGNvbnZlcnRUb0Y2NCk+KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBj
YWxsID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHIoY29udmVydFRvRjY0LCB0YWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNvbnZlcnRUb0Y2NCkpOwogICAg
ICAgICB9KTsKIAogICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC02NDAsMTEgKzYzMSwxMCBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgaml0LnJldCgp
OwogCiAgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAg
ZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0pOwogCiAgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRl
KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKQEAgLTY1NSw3ICs2NDUsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgIH07CiAKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGRvVW53aW5kaW5nLCB0
YWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGRvVW53aW5kaW5nKSk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNjYz
LDE1ICs2NTMsMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgog
ICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAK
LSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZykp
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90
UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwotICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChmYXN0Q2FsbCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rp
b25QdHI8SklUVGh1bmtQdHJUYWc+KHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNhbGxS
ZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRh
Zz4oc2xvd0NhbGwpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBob3RQ
YXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0No
ZWNrKSk7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gaG90UGF0aE90
aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RD
YWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0
aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CiAKLSAgICBQdHJUYWcgdGFnID0gcHRy
VGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0
WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRh
ZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQogCiB2b2lkKiB3YXNtVG9K
U0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSW5z
dGFuY2UqIHdhc21JbnN0YW5jZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2FzbVRvSlMuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2FzbVRvSlMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNw
YWNlIFdhc20gewogCiBjbGFzcyBJbnN0YW5jZTsKIAotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYg
Y2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFp
bHVyZT4gd2FzbVRvSlMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2ln
bmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogdm9pZCogd2FzbVRvSlNFeGNl
cHRpb24oRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24g
ZW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0
aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRpb247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1
bmN0aW9uOyB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIganNFbnRyeXBvaW50KEFyaXR5
Q2hlY2tNb2RlIGFyaXR5KQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBhcml0eSkKICAgICB7CiAgICAgICAgIGlm
IChhcml0eSA9PSBBcml0eUNoZWNrTm90UmVxdWlyZWQpCiAgICAgICAgICAgICByZXR1cm4gbV9q
c0VudHJ5cG9pbnQ7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgLy8gSXQncyBzYWZl
IHRvIGp1c3QgaG9sZCB0aGUgcmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24vanNFbnRy
eXBvaW50IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBJbnN0YW5j
ZSwgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKICAg
ICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBk
ZWFsbG9jYXRlZC4KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qc0VudHJ5cG9pbnQ7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9qc0VudHJ5cG9pbnQ7
CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBtX2ltcG9ydGFibGVGdW5jdGlvbjsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjA0LDcgKzYwNCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW0KIAogICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAodW5zaWduZWQg
ZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBwdHJUYWcoWWFyckJhY2t0
cmFja1B0clRhZywgJm1fY29kZUJsb2NrKSk7CisgICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3Ry
YWNrUHRyVGFnKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5
dGVzKHVuc2lnbmVkIGNhbGxGcmFtZVNpemUpCkBAIC05MjcsMTEgKzkyNywxMSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIH0KIAogICAgICAgICAv
LyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0dXJu
IGFkZHJlc3Nlcy4KLSAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgICAgIHZvaWQgbGlua0RhdGFM
YWJlbHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKGlzRW1wdHkoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9i
YWNrdHJhY2tSZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
cGF0Y2gobV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24sIHB0clRhZyhZ
YXJyQmFja3RyYWNrUHRyVGFnLCAmY29kZUJsb2NrKSkpOworICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIucGF0Y2gobV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8WWFyckJhY2t0cmFja1B0clRhZz4obV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1f
YmFja3RyYWNrTG9jYXRpb24pKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTM1MDgs
MjQgKzM1MDgsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3RyeVJl
YWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnksIE5lYXJDb2RlUHRyVGFnKTsK
KyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNo
YXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFk
VW5pY29kZUNoYXJhY3RlckVudHJ5KTsKIAogICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBt
X3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlciwg
Y29kZUJsb2NrKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhs
aW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAoY29tcGlsZU1vZGUgPT0gTWF0Y2hPbmx5KSB7CiAg
ICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKLSAgICAgICAgICAgICAgICBjb2Rl
QmxvY2suc2V0OEJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBwdHJU
YWcoWWFyck1hdGNoT25seThCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiTWF0Y2gtb25seSA4LWJp
dCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhC
aXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgWWFyck1hdGNoT25seThC
aXRQdHJUYWcsICJNYXRjaC1vbmx5IDgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlTWF0Y2hP
bmx5KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgcHRyVGFnKFlhcnJNYXRjaE9ubHkxNkJpdFB0
clRhZywgJmNvZGVCbG9jayksICJNYXRjaC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1hdGNoT25seShGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywgIk1hdGNoLW9u
bHkgMTYtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQotICAgICAgICAgICAgICAgIGNvZGVCbG9j
ay5zZXQ4Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHB0clRhZyhZYXJyOEJpdFB0
clRhZywgJmNvZGVCbG9jayksICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
WWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZShGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIHB0clRhZyhZYXJyMTZCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiMTYt
Yml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0
MTZCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgWWFycjE2Qml0UHRyVGFnLCAiMTYt
Yml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9mYWls
dXJlUmVhc29uKQogICAgICAgICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1cmVS
ZWFzb24oKm1fZmFpbHVyZVJlYXNvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEzICs4NiwxMyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGhhczhCaXRDb2RlKCkgeyByZXR1cm4gbV9yZWY4LnNpemUoKTsgfQogICAgIGJvb2wg
aGFzMTZCaXRDb2RlKCkgeyByZXR1cm4gbV9yZWYxNi5zaXplKCk7IH0KLSAgICB2b2lkIHNldDhC
aXRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByZWYpIHsgbV9yZWY4ID0gcmVmOyB9Ci0gICAg
dm9pZCBzZXQxNkJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJlZikgeyBtX3JlZjE2ID0g
cmVmOyB9CisgICAgdm9pZCBzZXQ4Qml0Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjhC
aXRQdHJUYWc+IHJlZikgeyBtX3JlZjggPSByZWY7IH0KKyAgICB2b2lkIHNldDE2Qml0Q29kZShN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjE2Qml0UHRyVGFnPiByZWYpIHsgbV9yZWYxNiA9IHJl
ZjsgfQogCiAgICAgYm9vbCBoYXM4Qml0Q29kZU1hdGNoT25seSgpIHsgcmV0dXJuIG1fbWF0Y2hP
bmx5OC5zaXplKCk7IH0KICAgICBib29sIGhhczE2Qml0Q29kZU1hdGNoT25seSgpIHsgcmV0dXJu
IG1fbWF0Y2hPbmx5MTYuc2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXQ4Qml0Q29kZU1hdGNoT25seShN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbWF0Y2hPbmx5KSB7IG1fbWF0Y2hPbmx5OCA9IG1hdGNoT25s
eTsgfQotICAgIHZvaWQgc2V0MTZCaXRDb2RlTWF0Y2hPbmx5KE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBtYXRjaE9ubHkpIHsgbV9tYXRjaE9ubHkxNiA9IG1hdGNoT25seTsgfQorICAgIHZvaWQgc2V0
OEJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0
UHRyVGFnPiBtYXRjaE9ubHkpIHsgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OyB9CisgICAgdm9p
ZCBzZXQxNkJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9u
bHkxNkJpdFB0clRhZz4gbWF0Y2hPbmx5KSB7IG1fbWF0Y2hPbmx5MTYgPSBtYXRjaE9ubHk7IH0K
IAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgIGJvb2wg
dXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyByZXR1cm4gbV91c2VzUGF0dGVybkNvbnRleHRC
dWZmZXI7IH0KQEAgLTEwMSwyNSArMTAxLDI1IEBAIHB1YmxpYzoKICAgICBNYXRjaFJlc3VsdCBl
eGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29u
dGV4dFNpemUpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGUoKSk7Ci0gICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTg+KG1fcmVm
OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcHRyVGFnKFlhcnI4Qml0UHRyVGFnLCB0aGlz
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5D
b250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25Q
dHI8WWFyckpJVENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0
LCBwYXJlbkNvbnRleHRTaXplKSk7CiAgICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShj
b25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCog
b3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXpl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZSgpKTsKLSAgICAgICAgcmV0dXJu
IE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTY+KG1fcmVmMTYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHB0clRhZyhZYXJyMTZCaXRQdHJUYWcsIHRoaXMpKShp
bnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRl
eHRTaXplKSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZ
YXJySklUQ29kZTE2LCBZYXJyMTZCaXRQdHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQs
IHBhcmVuQ29udGV4dFNpemUpKTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNv
bnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCog
ZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChoYXM4Qml0Q29kZU1hdGNoT25seSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OD4obV9tYXRjaE9u
bHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBwdHJUYWcoWWFyck1hdGNoT25seThCaXRQ
dHJUYWcsIHRoaXMpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwg
cGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVu
Y3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4o
bV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxl
bmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwogICAgIH0KIAog
ICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJl
bkNvbnRleHRTaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZU1hdGNoT25s
eSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJK
SVRDb2RlTWF0Y2hPbmx5MTY+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIHB0clRhZyhZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsIHRoaXMpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9u
bHkxNiwgWWFyck1hdGNoT25seTE2Qml0UHRyVGFnPihtX21hdGNoT25seTE2LmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4
dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwogICAgIH0KICNlbHNlCiAgICAgTWF0Y2hSZXN1bHQgZXhl
Y3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0KQpAQCAtMTg4LDE4ICsxODgsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhcigpCiAgICAgewotICAgICAgICBtX3JlZjggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsK
LSAgICAgICAgbV9yZWYxNiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwotICAgICAgICBtX21h
dGNoT25seTggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKLSAgICAgICAgbV9tYXRjaE9ubHkx
NiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBtX3JlZjggPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8WWFycjhCaXRQdHJUYWc+KCk7CisgICAgICAgIG1fcmVmMTYgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8WWFycjE2Qml0UHRyVGFnPigpOworICAgICAgICBtX21hdGNoT25seTgg
PSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThCaXRQdHJUYWc+KCk7CisgICAg
ICAgIG1fbWF0Y2hPbmx5MTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seTE2
Qml0UHRyVGFnPigpOwogICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBzdGQ6Om51bGxvcHQ7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3JlZjg7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fcmVmMTY7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG1fbWF0Y2hPbmx5ODsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9tYXRjaE9ubHkxNjsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjhCaXRQdHJUYWc+IG1fcmVmODsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjE2Qml0UHRyVGFnPiBtX3JlZjE2OworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4gbV9tYXRjaE9ubHk4Owor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+IG1fbWF0
Y2hPbmx5MTY7CiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAg
ICAgYm9vbCBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlcjsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTgtMDQtMTcgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIFRlbXBsYXRpemUgQ29kZVB0ci9SZWZzL0Z1bmN0aW9uUHRy
cyB3aXRoIFB0clRhZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODQ3MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1MzkxNjgxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhp
cyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNo
ZXMpOgorICAgICAgICAqIGNzc2ppdC9DU1NQdHJUYWcuaDogQWRkZWQuCisgICAgICAgICogY3Nz
aml0L0NvbXBpbGVkU2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3NqaXQvRnVuY3Rpb25DYWxsLmg6
CisgICAgICAgIChXZWJDb3JlOjpGdW5jdGlvbkNhbGw6OkZ1bmN0aW9uQ2FsbCk6CisgICAgICAg
IChXZWJDb3JlOjpGdW5jdGlvbkNhbGw6OnNldEZ1bmN0aW9uQWRkcmVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGdW5jdGlvbkNhbGw6OnByZXBhcmVBbmRDYWxsKToKKyAgICAgICAgKiBjc3NqaXQv
U2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
Ojpjb21waWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JGcmFnbWVudDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmNvbXBpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxW
YWx1ZU1hdGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29s
bGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnJ1bGVDb2xsZWN0b3JT
ZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0
aW9uV2l0aENoZWNraW5nQ29udGV4dCk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2lu
Z2xlTXVsdGlTZWxlY3RvckRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JE
YXRhTGlzdDo6ZXhlY3V0ZSBjb25zdCk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuaDoK
KwogMjAxOC0wNC0xNyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAK
ICAgICAgICAgW0N1cmxdIEZpeCB0aW1pbmcgb2YgcmVwb3J0aW5nIGVycm9yIHRvIHRoZSBjbGll
bnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0OSw2ICs0OTQ5LDcg
QEAKIAkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
REY2QkFGNzEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aCAqLzsgfTsKIAkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRG
N0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9Owog
CQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAv
KiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZFMjcxRjY3MjA4MkRCRTUwMEE5NTJENCAvKiBDU1NQdHJUYWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjcxRjY0MjA4MkRCQkUwMEE5
NTJENCAvKiBDU1NQdHJUYWcuaCAqLzsgfTsKIAkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8q
IENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEu
aCAqLzsgfTsKIAkJRkUzNkZEMTcxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3Rh
dGVNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
aCAqLzsgfTsKIAkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZG
RDE0MTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlLmggKi87IH07CkBAIC0x
NDc5Niw2ICsxNDc5Nyw3IEBACiAJCUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlv
QnVmZmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRp
b0J1ZmZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ4NEU4
MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBEODRF
QTEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkUyNzFGNjQyMDgyREJCRTAwQTk1MkQ0IC8qIENTU1B0clRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQdHJUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYW5nZVZlcnNpb25EYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzZGRDEyMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxU
cmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzZGRDEzMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0
YXRlTWFjaGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2Fj
dGlvblN0YXRlTWFjaGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxNzcs
NiArMTYxNzksNyBAQAogCQkyNkI5OTk4RDE4MDNBREZBMDBEMDExMjEgLyogY3Nzaml0ICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTI3MUY2NDIwODJE
QkJFMDBBOTUyRDQgLyogQ1NTUHRyVGFnLmggKi8sCiAJCQkJRTQ0NTEwNzcyMDJDN0UwMTAwNjU3
RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLywKIAkJCQkyNkI5OTk5MjE4MDNCOUQ5MDBEMDEx
MjEgLyogRnVuY3Rpb25DYWxsLmggKi8sCiAJCQkJMjZCOTk5OEUxODAzQUU3MjAwRDAxMTIxIC8q
IFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCkBAIC0yNzY0NCw2ICsyNzY0Nyw3IEBACiAJCQkJNkUw
RTU2OUMxODNCRkZFNjAwRTBFOEQ1IC8qIEZsb2F0Um91bmRlZFJlY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU4Q0QzNUNCMThFQjRDMzkwMEI5RjNBQyAvKiBGbG9hdFNpemVIYXNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRTI3MUY2NzIwODJEQkU1MDBBOTUyRDQgLyogQ1NTUHRyVGFnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjIyODc4NDBCNERCMzIyMDAwQzM0REYgLyog
Rm9jdXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjM1MTRFQUJEMjYwMDkw
RDc1RSAvKiBGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzkyLDcgKzM5Miw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxl
TWEKICAgICB9CiAKICAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgJiYgY29tcGlsZWRT
ZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21w
aWxlcjo6cnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVk
U2VsZWN0b3IuY29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIGNvbXBpbGVkU2VsZWN0
b3Iuc3RhdHVzKTsKKyAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBp
bGVyOjpydWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRT
ZWxlY3RvckNoZWNrZXIsIGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsKICNpZiAhQVNTRVJUX01T
R19ESVNBQkxFRAogICAgICAgICB1bnNpZ25lZCBpZ25vcmVTcGVjaWZpY2l0eTsKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQsICZpZ25vcmVT
cGVjaWZpY2l0eSkgfHwgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gTk9QU0VVRE8s
ICJXaGVuIG1hdGNoaW5nIHBzZXVkbyBlbGVtZW50cywgd2Ugc2hvdWxkIG5ldmVyIGNvbXBpbGUg
YSBzZWxlY3RvciBjaGVja2VyIHdpdGhvdXQgY29udGV4dCB1bmxlc3MgaXQgY2Fubm90IG1hdGNo
IGFueXRoaW5nLiIpOwpAQCAtNDIwLDcgKzQyMCw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjpydWxlTWEKICAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIpIHsKICAg
ICAgICAgQVNTRVJUKGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRp
b25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwogCi0gICAgICAg
IGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNl
bGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVjdG9y
LmNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBjb21waWxlZFNlbGVjdG9yLnN0YXR1
cyk7CisgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cnVs
ZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21w
aWxlZFNlbGVjdG9yQ2hlY2tlciwgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMpOwogCiAjaWYgQ1NT
X1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgY29tcGlsZWRTZWxlY3Rvci51c2VDb3Vu
dCsrOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L0NTU1B0clRhZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9DU1NQdHJUYWcuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3NqaXQvQ1NTUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9QdHJUYWcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3RleHByIEpTQzo6UHRyVGFnIENTU1NlbGVjdG9yUHRyVGFnID0gc3RhdGljX2Nhc3Q8SlND
OjpQdHJUYWc+KDB4YzU1MSk7CitzdGF0aWMgY29uc3RleHByIEpTQzo6UHRyVGFnIENTU09wZXJh
dGlvblB0clRhZyA9IHN0YXRpY19jYXN0PEpTQzo6UHRyVGFnPigweGM1NTIpOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaAkocmV2aXNpb24gMjMw
NzM0KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJ
VCkKIAorI2luY2x1ZGUgIkNTU1B0clRhZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3ICs1
OCw3IEBAIHByaXZhdGU6CiBzdHJ1Y3QgQ29tcGlsZWRTZWxlY3RvciB7CiAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgc3Rh
dHVzOwotICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWY7CisgICAgSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+IGNvZGVSZWY7CiAjaWYgZGVm
aW5lZChDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORykgJiYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9G
SUxJTkcKICAgICB1bnNpZ25lZCB1c2VDb3VudCB7IDAgfTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL1dl
YkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCisjaW5jbHVkZSAiQ1NTUHRy
VGFnLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdGFja0Fs
bG9jYXRvci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dQUkluZm8uaD4KQEAgLTM2LDcg
KzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGdW5jdGlvbkNhbGwgewogcHVi
bGljOgotICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJl
Z2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNr
QWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpT
Qzo6RnVuY3Rpb25QdHI+LCAzMj4mIGNhbGxSZWdpc3RyeSkKKyAgICBGdW5jdGlvbkNhbGwoSlND
OjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVyLCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJB
bGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBzdGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFp
cjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlv
blB0clRhZz4+LCAzMj4mIGNhbGxSZWdpc3RyeSkKICAgICAgICAgOiBtX2Fzc2VtYmxlcihhc3Nl
bWJsZXIpCiAgICAgICAgICwgbV9yZWdpc3RlckFsbG9jYXRvcihyZWdpc3RlckFsbG9jYXRvcikK
ICAgICAgICAgLCBtX3N0YWNrQWxsb2NhdG9yKHN0YWNrQWxsb2NhdG9yKQpAQCAtNDcsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgc2V0RnVuY3Rpb25BZGRyZXNz
KEpTQzo6RnVuY3Rpb25QdHIgZnVuY3Rpb25BZGRyZXNzKQorICAgIHZvaWQgc2V0RnVuY3Rpb25B
ZGRyZXNzKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbkFkZHJl
c3MpCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uQWRkcmVzcyA9IGZ1bmN0aW9uQWRkcmVzczsK
ICAgICB9CkBAIC0xNDcsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlKG1fZmlyc3RBcmd1bWVudCwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgICAgICB9CiAKLSAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
bV9hc3NlbWJsZXIuY2FsbChKU0M6OkNGdW5jdGlvblB0clRhZyk7CisgICAgICAgIEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IG1fYXNzZW1ibGVyLmNhbGwoQ1NTT3BlcmF0aW9uUHRy
VGFnKTsKICAgICAgICAgbV9jYWxsUmVnaXN0cnkuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGws
IG1fZnVuY3Rpb25BZGRyZXNzKSk7CiAgICAgfQogCkBAIC0xNzgsMTIgKzE3OSwxMiBAQCBwcml2
YXRlOgogICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXImIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVy
QWxsb2NhdG9yJiBtX3JlZ2lzdGVyQWxsb2NhdG9yOwogICAgIFN0YWNrQWxsb2NhdG9yJiBtX3N0
YWNrQWxsb2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMyPiYgbV9jYWxsUmVnaXN0cnk7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPENT
U09wZXJhdGlvblB0clRhZz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5OwogCiAgICAgUmVnaXN0ZXJW
ZWN0b3IgbV9zYXZlZFJlZ2lzdGVyczsKICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVu
Y2VWZWN0b3IgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIAotICAgIEpTQzo6
RnVuY3Rpb25QdHIgbV9mdW5jdGlvbkFkZHJlc3M7CisgICAgSlNDOjpGdW5jdGlvblB0cjxDU1NP
cGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rpb25BZGRyZXNzOwogICAgIHVuc2lnbmVkIG1fYXJndW1l
bnRDb3VudDsKICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fZmlyc3RBcmd1
bWVudDsKICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fc2Vjb25kQXJndW1l
bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw4ICsyMDEsOCBAQCBzdHJ1Y3QgU2VsZWN0b3JG
cmFnbWVudCB7CiAgICAgVmVjdG9yPGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+Kj4gbGFuZ3Vh
Z2VBcmd1bWVudHNMaXN0OwogICAgIFZlY3Rvcjxjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgOD4g
Y2xhc3NOYW1lczsKICAgICBIYXNoU2V0PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwotICAgIFZl
Y3RvcjxKU0M6OkZ1bmN0aW9uUHRyLCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXM7Ci0gICAg
VmVjdG9yPEpTQzo6RnVuY3Rpb25QdHIsIDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhD
b250ZXh0OworICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4s
IDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3NlczsKKyAgICBWZWN0b3I8SlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+LCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXNXaXRoQ29u
dGV4dDsKICAgICBWZWN0b3I8QXR0cmlidXRlTWF0Y2hpbmdJbmZvLCA0PiBhdHRyaWJ1dGVzOwog
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAyPiBudGhDaGlsZEZpbHRlcnM7CiAgICAg
VmVjdG9yPE50aENoaWxkT2ZTZWxlY3RvckluZm8+IG50aENoaWxkT2ZGaWx0ZXJzOwpAQCAtMjU4
LDcgKzI1OCw3IEBAIHN0cnVjdCBCYWNrdHJhY2tpbmdMZXZlbCB7CiBjbGFzcyBTZWxlY3RvckNv
ZGVHZW5lcmF0b3IgewogcHVibGljOgogICAgIFNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBD
U1NTZWxlY3RvciosIFNlbGVjdG9yQ29udGV4dCk7Ci0gICAgU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1cyBjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJik7CisgICAgU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1cyBjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1Nl
bGVjdG9yUHRyVGFnPiYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXI7CkBAIC0yOTIsOCArMjkyLDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1h
dGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdQ
b3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZv
aWQgZ2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVt
ZW50TGlua01hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxs
VGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIp
OwotICAgIHZvaWQgZ2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOworICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPik7CisgICAgdm9pZCBnZW5l
cmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KTsKICAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudElzQWN0aXZlKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNFbXB0
eShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVF
bGVtZW50SXNGaXJzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CkBA
IC0zMDksNyArMzA5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJp
YnV0ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgZGVjSW5kZXhSZWdpc3RlciwgY29uc3QgQXR0cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1
dGVJbmZvKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmco
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyYgYXR0
cmlidXRlSW5mbyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZUV4YWN0
TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhw
ZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5
KTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0
Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0
ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBK
U0M6OkZ1bmN0aW9uUHRyIGNhc2VTZW5zaXRpdmVUZXN0LCBKU0M6OkZ1bmN0aW9uUHRyIGNhc2VJ
bnNlbnNpdGl2ZVRlc3QpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rp
b25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWlj
U3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNl
U2Vuc2l0aXZpdHksIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vu
c2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNl
bnNpdGl2ZVRlc3QpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFtZShBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IENTU1NlbGVjdG9yJiB0YWdNYXRjaGlu
Z1NlbGVjdG9yKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc0lkKEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFBZGRy
ZXNzLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkVG9NYXRjaCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRIYXNDbGFzc2VzKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
TG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFBZGRyZXNzLCBjb25zdCBWZWN0b3I8Y29uc3QgQXRv
bWljU3RyaW5nSW1wbCosIDg+JiBjbGFzc05hbWVzKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwcml2
YXRlOgogICAgIEFzc2VtYmxlciBtX2Fzc2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRvciBt
X3JlZ2lzdGVyQWxsb2NhdG9yOwogICAgIFN0YWNrQWxsb2NhdG9yIG1fc3RhY2tBbGxvY2F0b3I7
Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+
LCAzMj4gbV9mdW5jdGlvbkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpD
YWxsLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4+LCAzMj4gbV9mdW5jdGlv
bkNhbGxzOwogCiAgICAgU2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1
bmN0aW9uVHlwZSBtX2Z1bmN0aW9uVHlwZTsKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMgRnVu
Y3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjCiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNr
dHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVu
dHMsIHVuc2lnbmVkIGxldmVsID0gMCk7CiAKLVNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBsYXN0U2VsZWN0b3IsIFNlbGVjdG9yQ29u
dGV4dCBzZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVm
KQorU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIGxhc3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+JiBjb2RlUmVmKQogewog
ICAgIGlmICghSlNDOjpWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzOjpDYW5ub3RDb21waWxlOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBmcmFnbWVudE1hdGNoZXNSaWdodG0KIAogRnVuY3Rpb25UeXBlIFNlbGVj
dG9yRnJhZ21lbnQ6OmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29s
ICgqbWF0Y2hlcikoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmKSkKIHsK
LSAgICB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cihtYXRjaGVyKSk7CisgICAgdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRl
eHQuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVyKSk7
CiAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29u
dGV4dDsKIH0KIApAQCAtNTM0LDgzICs1MzQsODMgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5
cGUgYWRkUHNldWRvQ2xhcwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIC8vIFVub3B0aW1pemVk
IHBzZXVkbyBzZWxlY3Rvci4gVGhleSBhcmUganVzdCBmdW5jdGlvbiBjYWxsIHRvIGEgc2ltcGxl
IHRlc3RpbmcgZnVuY3Rpb24uCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRv
ZmlsbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChK
U0M6OkZ1bmN0aW9uUHRyKGlzQXV0b2ZpbGxlZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRy
VGFnPihpc0F1dG9maWxsZWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQXV0b2Zp
bGxTdHJvbmdQYXNzd29yZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3Jk
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNrZWQ6Ci0gICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0No
ZWNrZWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNDaGVja2VkKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmF1bHQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRGVmYXVs
dFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNEZWZh
dWx0UHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlzYWJsZWQ6
Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cihtYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3Bl
cmF0aW9uUHRyVGFnPihtYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NFbmFibGVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0VuYWJsZWRQc2V1ZG9D
bGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRW5hYmxlZFBzZXVk
b0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmluZWQ6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cihpc0RlZmluZWRFbGVtZW50KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzRGVm
aW5lZEVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRm9jdXM6Ci0gICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlv
blB0cihTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKSk7CisgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+KFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNldWRv
Q2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVj
a2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFBhZ2VNZWRpYToKLSAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyKGlzTWVkaWFEb2N1bWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihp
c01lZGlhRG9jdW1lbnQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5SYW5nZToK
LSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1
bmN0aW9uUHRyKGlzSW5SYW5nZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0lu
UmFuZ2UpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVj
a2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5kZXRlcm1pbmF0ZToKLSAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyKG1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09w
ZXJhdGlvblB0clRhZz4obWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcykpOwogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJbnZhbGlkOgotICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNJbnZhbGlkKSk7Cisg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzSW52YWxpZCkpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NPcHRpb25hbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzT3B0aW9uYWxGb3JtQ29udHJvbCkp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzT3V0T2ZSYW5nZToKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzT3V0
T2ZSYW5nZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc091dE9mUmFuZ2UpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUmVhZE9ubHk6Ci0gICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVz
UmVhZE9ubHlQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRj
aGVzUmVhZE9ubHlQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NS
ZWFkV3JpdGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBl
bmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKSk7CiAg
ICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlcXVpcmVkOgotICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNSZXF1aXJl
ZEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzUmVxdWlyZWRG
b3JtQ29udHJvbCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWYWxpZDoKLSAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyKGlzVmFsaWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNWYWxpZCkpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlz
V2luZG93SW5hY3RpdmUpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNXaW5kb3dJ
bmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NGdWxsU2NyZWVuOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3JlZW5Qc2V1
ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVsbFNjcmVl
blBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3JlZW5E
b2N1bWVudDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVsbFNjcmVlbkRvY3VtZW50
UHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkFu
Y2VzdG9yOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3JlZW5BbmNlc3RvclBzZXVkb0NsYXNzKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuQW5jZXN0b3JQ
c2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbmltYXRpbmdGdWxs
U2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVs
bFNjcmVlblRyYW5zaXRpb25Qc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRy
VGFnPihtYXRjaGVzRnVsbFNjcmVlbkFuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uUHNldWRv
Q2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVj
a2VyOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzRnV0dXJlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0Ns
YXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdXR1cmVDdWVQc2V1
ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQYXN0OgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIo
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFn
PihtYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICNlbmRpZgogCkBAIC0xMjE2LDcgKzEyMTYsNyBA
QCB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVuCiAgICAgfQogfQogCi1p
bmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNv
bXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCitpbmxpbmUgU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+JiBjb2RlUmVmKQogewogICAg
IHN3aXRjaCAobV9mdW5jdGlvblR5cGUpIHsKICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOgpAQCAtMTI0NCwxMSArMTI0NCwxMCBAQCBpbmxpbmUgU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1cyBTZWxlY3RvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
ZnVuY3Rpb25DYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fZnVu
Y3Rpb25DYWxsc1tpXS5maXJzdCwgbV9mdW5jdGlvbkNhbGxzW2ldLnNlY29uZCk7CiAKLSAgICBK
U0M6OlB0clRhZyB0YWcgPSBwdHJUYWcoJmNvZGVSZWYsIG1fc2VsZWN0b3JDb250ZXh0KTsKICNp
ZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwotICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZp
bmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSh0YWcsICJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVz
XCIiLCBtX29yaWdpbmFsU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShDU1NT
ZWxlY3RvclB0clRhZywgIkNTUyBTZWxlY3RvciBKSVQgZm9yIFwiJXNcIiIsIG1fb3JpZ2luYWxT
ZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCkudXRmOCgpLmRhdGEoKSk7CiAjZWxzZQotICAgIGNvZGVS
ZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHRhZywgIkNTUyBTZWxlY3RvciBKSVQiKTsK
KyAgICBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBDU1NTZWxlY3RvclB0clRh
ZywgIkNTUyBTZWxlY3RvciBKSVQiKTsKICNlbmRpZgogCiAgICAgaWYgKG1fZnVuY3Rpb25UeXBl
ID09IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyIHx8IG1fZnVuY3Rpb25UeXBl
ID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTMwMTksNyArMzAxOCw3
IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICB9CiB9CiAK
LXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5j
dGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNh
c2VTZW5zaXRpdml0eSwgSlNDOjpGdW5jdGlvblB0ciBjYXNlU2Vuc2l0aXZlVGVzdCwgSlNDOjpG
dW5jdGlvblB0ciBjYXNlSW5zZW5zaXRpdmVUZXN0KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3Vy
cmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwg
QXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBKU0M6OkZ1bmN0
aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gY2FzZVNlbnNpdGl2ZVRlc3QsIEpTQzo6RnVuY3Rp
b25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVUZXN0KQogewogICAgIExv
Y2FsUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZSBleHBlY3RlZFZhbHVlUmVnaXN0ZXIobV9yZWdpc3Rl
ckFsbG9jYXRvciwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1fYXNzZW1ibGVy
Lm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGV4cGVjdGVkVmFsdWUuaW1wbCgpKSwgZXhw
ZWN0ZWRWYWx1ZVJlZ2lzdGVyKTsKQEAgLTMwNzUsNyArMzA3NCw3IEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCit2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3Bl
cmF0aW9uUHRyVGFnPiB0ZXN0RnVuY3Rpb24pCiB7CiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGVsZW1lbnRBZGRyZXNzID0gZWxlbWVudEFkZHJlc3NSZWdpc3RlcjsKICAgICBGdW5jdGlvbkNh
bGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNr
QWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwpAQCAtMzA4NCw3ICszMDgzLDcgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJs
ZXI6Olplcm8pKTsKIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29u
dGV4dEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBK
U0M6OkZ1bmN0aW9uUHRyIHRlc3RGdW5jdGlvbikKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IHRlc3RGdW5j
dGlvbikKIHsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0ID0gbV9y
ZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKCk7CiAgICAgbG9hZENoZWNraW5nQ29u
dGV4dChjaGVja2luZ0NvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywzNCArNTMsMzAgQEAgdHlw
ZWRlZiB1bnNpZ25lZCAoKlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZQogdHlwZWRlZiB1bnNpZ25lZCAo
KlJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KShjb25zdCBF
bGVtZW50KiwgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqLCB1bnNpZ25lZCopOwog
dHlwZWRlZiB1bnNpZ25lZCAoKlF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tp
bmdDb250ZXh0KShjb25zdCBFbGVtZW50KiwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHQqKTsKIAotU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqLCBTZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBvdXRwdXRDb2RlUmVmKTsKK1NlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGls
ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgU2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxDU1NTZWxlY3RvclB0clRhZz4mIG91dHB1dENvZGVSZWYpOwogCi1p
bmxpbmUgUnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBydWxlQ29sbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGVSZWYsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9u
U3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQoraW5saW5lIFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxl
Y3RvckNoZWNrZXIgcnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0
aW9uU3RhdHVzKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29tcGlsYXRpb25TdGF0dXMsIGNvbXBp
bGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcik7Ci0gICAgSlNDOjpQdHJUYWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVSZWYsIFNl
bGVjdG9yQ29udGV4dDo6UnVsZUNvbGxlY3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50YWdDRnVu
Y3Rpb25QdHI8UnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlcj4oZXhlY3V0YWJsZUFk
ZHJlc3MsIHRhZyk7CisgICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4ZWN1dGFibGVB
ZGRyZXNzKTsKIH0KIAotaW5saW5lIFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIg
cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbnN0IEpTQzo6TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmLCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2Vs
ZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKK2lubGluZSBRdWVyeVNl
bGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyIHF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNo
ZWNrZXJGdW5jdGlvbih2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGF0
aW9uU3RhdHVzLCBjb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpOwotICAgIEpTQzo6UHRyVGFnIHRhZyA9IEpTQzo6cHRy
VGFnKCZjb2RlUmVmLCBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwotICAgIHJldHVy
biBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNr
ZXI+KGV4ZWN1dGFibGVBZGRyZXNzLCB0YWcpOworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0
aW9uUHRyPFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIsIENTU1NlbGVjdG9yUHRy
VGFnPihleGVjdXRhYmxlQWRkcmVzcyk7CiB9CiAKLWlubGluZSBSdWxlQ29sbGVjdG9yU2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2Vy
RnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmJiBjb2RlUmVmLCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKK2lubGluZSBSdWxlQ29sbGVjdG9yU2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVu
Y3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAgIEFTU0VSVF9VTlVT
RUQoY29tcGlsYXRpb25TdGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwotICAgIEpT
Qzo6UHRyVGFnIHRhZyA9IEpTQzo6cHRyVGFnKCZjb2RlUmVmLCBTZWxlY3RvckNvbnRleHQ6OlJ1
bGVDb2xsZWN0b3IpOwotICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xs
ZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0PihleGVjdXRhYmxlQWRkcmVz
cywgdGFnKTsKKyAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9y
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4
ZWN1dGFibGVBZGRyZXNzKTsKIH0KIAotaW5saW5lIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlv
bldpdGhDaGVja2luZ0NvbnRleHQoY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNv
ZGVSZWYsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
IGNvbXBpbGF0aW9uU3RhdHVzKQoraW5saW5lIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJX
aXRoQ2hlY2tpbmdDb250ZXh0IHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldp
dGhDaGVja2luZ0NvbnRleHQodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb21w
aWxhdGlvblN0YXR1cywgY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7Ci0gICAgSlNDOjpQdHJU
YWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxl
Y3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQ+KGV4ZWN1dGFibGVBZGRyZXNzLCB0YWcp
OworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2VsZWN0b3JTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0LCBDU1NTZWxlY3RvclB0clRhZz4oZXhlY3V0YWJs
ZUFkZHJlc3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSwx
MSArNDUxLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUKICAg
ICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICAgICAgdm9pZCogY29tcGls
ZWRTZWxlY3RvckNoZWNrZXIgPSBzZWxlY3Rvci5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jb21waWxh
dGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9y
Q29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihzZWxl
Y3Rvci5jb21waWxlZFNlbGVjdG9yQ29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNl
bGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdG9y
Q2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNo
ZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRp
b25TdGF0dXMpOwogICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVs
ZW1lbnQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2Vs
ZWN0b3IuY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2Vs
ZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYXV0byBz
ZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JD
aGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0
b3JDb2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25T
dGF0dXMpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JD
b21waWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5n
Q29udGV4dChjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0
dXMpOwogICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQs
ICZjaGVja2luZ0NvbnRleHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1hdGNo
ZWQpIHsKQEAgLTU0MywxMSArNTQzLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRh
dGFMaXN0OjpleGUKICAgICAgICAgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEgPSBt
X3NlbGVjdG9ycy5maXJzdCgpOwogICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tl
ciA9IHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAg
ICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNo
ZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNp
bXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9y
Q29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlv
blN0YXR1cyk7CisgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1
ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9y
Q2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKICAgICAgICAgICAgIGV4
ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tlcjxTZWxlY3RvclF1ZXJ5VHJhaXQ+KCpz
ZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3JEYXRhLmNvbXBpbGF0
aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlT
ZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2Vy
ID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9u
V2l0aENoZWNraW5nQ29udGV4dChzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYs
IGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMp
OworICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hl
Y2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxl
cjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4
dChjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVz
KTsKICAgICAgICAgICAgIGV4ZWN1dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQ8U2VsZWN0b3JRdWVyeVRyYWl0Pihyb290Tm9kZSwgKnNlYXJjaFJvb3ROb2RlLCBz
ZWxlY3RvckNoZWNrZXIsIG91dHB1dCwgc2VsZWN0b3JEYXRhKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAkocmV2aXNpb24gMjMw
NzM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yOwogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQotICAgICAg
ICBtdXRhYmxlIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGVkU2VsZWN0b3JDb2Rl
UmVmOworICAgICAgICBtdXRhYmxlIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVj
dG9yUHRyVGFnPiBjb21waWxlZFNlbGVjdG9yQ29kZVJlZjsKICAgICAgICAgbXV0YWJsZSBTZWxl
Y3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzOwogI2lmIENTU19TRUxFQ1RP
Ul9KSVRfUFJPRklMSU5HCiAgICAgICAgIH5TZWxlY3RvckRhdGEoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338170</attachid>
            <date>2018-04-17 17:38:53 -0700</date>
            <delta_ts>2018-04-17 18:44:49 -0700</delta_ts>
            <desc>patch for landing + speculative build fix for Windows.</desc>
            <filename>bug-184702b.patch</filename>
            <type>text/plain</type>
            <size>627482</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyMCBA
QAorMjAxOC0wNC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGVtcGxhdGl6ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAg
UGl6bG8gYW5kIFNhYW0gQmFyYXRpLgorCisgICAgICAgIDEuIFRlbXBsYXRpemVkIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ci9SZWYsIEZ1bmN0aW9uUHRyLCBhbmQgQ29kZUxvY2F0aW9uIHZhcmlhbnRz
CisgICAgICAgICAgIHRvIHRha2UgYSBQdHJUYWcgdGVtcGxhdGUgYXJndW1lbnQuCisgICAgICAg
IDIuIFJlcGxhY2VkIHNvbWUgdXNlcyBvZiByYXcgcG9pbnRlcnMgd2l0aCB0aGUgZXF1aXZhbGVu
dCBDb2RlUHRyIC8gRnVuY3Rpb25QdHIuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Z2V0
TGlua2VyQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXBUb05vcCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDb21wYWN0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEludDMyKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZWFkUG9pbnRl
cik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoTG9h
ZCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRk
cmVzc0NvbXB1dGF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ29tbW9uOjpDb2RlTG9jYXRpb25Db21tb24pOgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25JbnN0cnVjdGlvbjo6Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24pOgorICAgICAg
ICAoSlNDOjpDb2RlTG9jYXRpb25MYWJlbDo6Q29kZUxvY2F0aW9uTGFiZWwpOgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25MYWJlbDo6cmV0YWdnZWQpOgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25MYWJlbDo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uSnVtcDo6Q29k
ZUxvY2F0aW9uSnVtcCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkp1bXA6OnJldGFnZ2Vk
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ2FsbDo6Q29kZUxvY2F0aW9uQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNhbGw6OnJldGFnZ2VkKToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uTmVhckNhbGw6OkNvZGVMb2NhdGlvbk5lYXJDYWxsKToKKyAgICAgICAgKEpT
Qzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzI6OkNvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKToKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDo6Q29kZUxvY2F0aW9uRGF0
YUxhYmVsQ29tcGFjdCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjo6
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkOjpDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6aW5zdHJ1Y3Rpb25BdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46Omp1bXBBdE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpjYWxsQXRPZmZzZXQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6bmVhckNhbGxBdE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxQdHJBdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWwzMkF0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0
aWJsZUxvYWRBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6aW5z
dHJ1Y3Rpb25BdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjo6bGFiZWxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjo6anVtcEF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uOjpjYWxsQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25Db21tb246Om5lYXJDYWxsQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWwzMkF0T2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21tb246OmNvbnZl
cnRpYmxlTG9hZEF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXRE
aXNhc3NlbWJseUltcGwpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVX
aXRoRGlzYXNzZW1ibHlJbXBsKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3Nl
bWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGF0Y2gpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjplbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZik6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAgICAgIChK
U0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OnRyYW1wb2xpbmVBdCk6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZWFk
Q2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXBsYWNlV2l0
aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cmVhZENhbGxUYXJnZXQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXBsYWNlV2l0aFZNSGFsdCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RhcnRPZlBhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk02NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk12Nzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
djc6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12
Nzo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
Y3BwOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5h
bWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjp0cnlUb0Rpc2Fz
c2VtYmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNz
ZW1ibHkpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50
Q29kZVB0cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
ZHVtcFdpdGhOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1ibGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkdW1wIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
Lmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0cik6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uUHRyOjpyZXRhZ2dlZCBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
UHRyOjpyZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25QdHI6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6
b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChKU0M6OlJldHVybkFkZHJlc3NQdHI6OlJldHVy
bkFkZHJlc3NQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpyZXRhZ2dlZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpk
dW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpyZXRhZ2dlZENvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2Vt
YmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkaXNhc3Nl
bWJseSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRyKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyTUlQUzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyTUlQUzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Mp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXBhdGNoQ2FsbCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bGlua0NhbGwpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Njo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6
c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Njo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVz
cyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Njo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpyZXBhdGNoQ29tcGFjdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpyZXBsYWNlV2l0aFZNSGFsdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Nl82NDo6c3RhcnRPZkJyYW5jaDMyV2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
T25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRy
V2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJlcGF0Y2hD
YWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmxpbmtDYWxsKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjpjb21waWxlKToK
KyAgICAgICAgKEpTQzo6aW52b2tlKToKKyAgICAgICAgKEpTQzo6dGVzdFByb2JlTW9kaWZpZXNQ
cm9ncmFtQ291bnRlcik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpDb21waWxhdGlvbjo6Q29tcGlsYXRpb24pOgorICAgICAgICAqIGIzL0IzQ29t
cGlsYXRpb24uaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpjb2RlUmVmIGNvbnN0KToKKyAgICAgICAg
KiBiMy9CM0NvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6CisgICAgICAg
ICogYjMvQjNMb3dlck1hY3Jvcy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckRpc2Fzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRpc2Fzc2VtYmxlcjo6ZHVtcCk6CisgICAg
ICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjppbnZva2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEludGVycHJldGVy
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFNpbXBsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmROb25Ucml2aWFsRW50cnlwb2ludCk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hMb29wKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToK
KyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAg
IChKU0M6OlNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5m
bzo6QnlWYWxJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6aG90UGF0aEJlZ2luKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzbG93UGF0
aFN0YXJ0KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpzZXRDYWxsTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjpob3RQYXRoT3RoZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJ5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6
R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29u
dGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmN1c3RvbUFjY2Vzc29yR2V0dGVyIGNvbnN0KToKKyAg
ICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6
OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmN1c3RvbUFjY2Vzc29yIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6SGFuZGxl
ckluZm86OmluaXRpYWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OmxpbmtDb2RlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
aDoKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
SnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OlNpbXBsZUp1bXBUYWJsZTo6
Y3RpRm9yVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkxMSW50Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlv
blN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
Ojpjb2RlIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2xvd1BhdGhDYWxsTG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZG9uZUxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNsb3dQYXRoU3RhcnRMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpwYXRjaGFibGVKdW1wRm9ySW4pOgorICAgICAgICAq
IGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YXBw
ZW5kQ2F0Y2hFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpub3RpY2VDYXRjaEVudHJ5cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxMaW5rUmVjb3JkOjpDYWxsTGlua1JlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFwcGVuZENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0NhbGxSZWNvcmQ6OkpTQ2FsbFJlY29yZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTRGlyZWN0Q2FsbFJlY29yZDo6SlNEaXJlY3RD
YWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNEaXJlY3RUYWls
Q2FsbFJlY29yZDo6SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR0pJ
VEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpKSVRGaW5h
bGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1l
bnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKdW1wUmVwbGFjZW1lbnQ6Okp1bXBSZXBsYWNlbWVu
dCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnku
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5o
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAg
KEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxs
RnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Q2Fs
bFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OnVucGFja0FuZEdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpzbG93UGF0aENhbGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2FsbERPTSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
YWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaEludEp1bXApOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0
cmluZ09uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXREaXJlY3RQbmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxTZXRSZXN1bHQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWRXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlND
OjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlU
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeVRvRGlz
YXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHA6
CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpkaXNhc3NlbWJsZSk6CisgICAgICAg
IChKU0M6OmRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAg
ICAgICogZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6
OnRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvVURp
czg2RGlzYXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGVXaXRoVURp
czg2KToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRp
b25UYXJnZXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvblRhcmdldDo6bGFiZWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvblRhcmdldDo6anVtcHMpOgorICAgICAgICAq
IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDoKKyAgICAgICAgKiBmdGwvRlRMR2VuZXJhdGVkRnVu
Y3Rpb24uaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6SklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2Rl
Ojppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmIzQ29kZSBjb25zdCk6CisgICAgICAgICogZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUNvbW1vbik6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRo
Lmg6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpwYXRjaGFibGVKdW1wIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmRvbmUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6c3R1YiBjb25zdCk6CisgICAgICAgICogZnRsL0ZU
TExhenlTbG93UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGlyZWN0Q2FsbE9yQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVj
dFZhcmFyZ3NTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVJbik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbERPTUdldHRlcik6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmxhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZU
TE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2ggY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0
dWIpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdEhhbmRsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdEhhbmRs
ZTo6ZW1pdEV4aXRUaHVuayk6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExMYXp5U2xvd1BhdGgpOgorICAgICAgICAqIGZ0bC9G
VExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCk6Cisg
ICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsQ29udGV4dDo6a2V5V2l0aFRhcmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZU
TDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93
UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0
aENhbGxLZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OlNsb3dQYXRoQ2FsbEtleSk6
CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpjYWxsVGFyZ2V0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OndpdGhDYWxsVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAo
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFB0clRhZyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3Rh
dGUpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omdl
bmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93
UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpr
ZXlGb3JUaHVuayk6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRTbG93UGF0aENhbGxU
aHVuayk6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjprZXlGb3JTbG93UGF0aENhbGxUaHVu
ayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpnZXRPcGNvZGVJRCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlv
bkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENh
bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAg
ICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6Omlu
aXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpwZXJmb3JtSklUTWVtY3B5KToK
KyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAo
SlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlv
bkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKToKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAqIGppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSklUU3R1YlJvdXRpbmUpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlND
OjpDYWxsUmVjb3JkOjpDYWxsUmVjb3JkKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgor
ICAgICAgICAqIGppdC9KSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQ29kZVdpdGhDb2Rl
UmVmOjpKSVRDb2RlV2l0aENvZGVSZWYpOgorICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVS
ZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRD
b2RlOjpEaXJlY3RKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6aW5pdGlh
bGl6ZUNvZGVSZWYpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bCk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUpOgorICAgICAg
ICAoSlNDOjpOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6
Ok5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5o
OgorICAgICAgICAqIGppdC9KSVRDb2RlTWFwLmg6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6
OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6OkVudHJ5Ojpjb2RlTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlND
OjpKSVRDb2RlTWFwOjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkpOgor
ICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1Vu
d2luZCk6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5ha2VkVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbik6CisgICAgICAgIChK
U0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoKKyAgICAgICAg
KEpTQzo6aXNQcm9maWxlRW1wdHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChKU0M6
OkpJVFN0dWJSb3V0aW5lOjpKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjphc0Nv
ZGVQdHIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OmN0aU5hdGl2ZUNhbGwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2
ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVk
VGFncyk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1
bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgICogaml0L1BDVG9Db2RlT3JpZ2luTWFwLmg6Cisg
ICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
KToKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlYWRQdXRJQ0NhbGxUYXJnZXQpOgor
ICAgICAgICAoSlNDOjpmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjph
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZUdldEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6
CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUluKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6bGlu
a1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Rp
cmVjdEZvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxp
bmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6Omxp
bmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAg
ICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAg
ICogaml0L1Nsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpKSVRTbG93UGF0aENhbGw6OmNh
bGwpOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6
OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybik6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5j
cHA6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnNsb3dQYXRoRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUNhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmludGVybmFsRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjp1bnJlYWNoYWJsZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpj
bHozMlRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnRydW5jVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpyb3VuZFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZXhwVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsb2dUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW11bFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6cmFuZG9tVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpi
b3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRDb2RlUHRyKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENvZGVSZWYpOgor
ICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyKToKKyAgICAgICAgKiBsbGlu
dC9MTEludEVudHJ5cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RnVuY3Rpb25F
bnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEV2YWxFbnRyeXBvaW50KToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OnNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKiBsbGludC9MTElu
dEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Y2FsbFRvVGhyb3cpOgorICAg
ICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxM
SU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6Cisg
ICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjp2bUVudHJ5VG9X
YXNtKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFy
aXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50OjpldmFsRW50cnlU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojpwcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojptb2R1bGVQcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUpOgorICAgICAgICAq
IHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9m
aWxlck9TUkV4aXRTaXRlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRl
Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0U2l0ZTo6T1NSRXhpdFNpdGUpOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdFNpdGU6OmNvZGVBZGRyZXNzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjogY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRh
YmxlQmFzZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNlLmg6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjplbnRyeXBvaW50Rm9yKToKKyAgICAgICAg
KiBydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYXRpdmVGdW5jdGlv
bi5oOgorICAgICAgICAoSlNDOjpUYWdnZWROYXRpdmVGdW5jdGlvbjo6VGFnZ2VkTmF0aXZlRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpUYWdnZWROYXRpdmVGdW5jdGlvbjo6b3BlcmF0b3IgTmF0
aXZlRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgIChKU0M6
OnRhZ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjp1bnRhZ0NvZGVQdHIpOgorICAgICAgICAoSlND
OjpyZXRhZ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjp0YWdDRnVuY3Rpb25QdHIpOgorICAgICAg
ICAoSlNDOjp1bnRhZ0NGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6Om5leHRQdHJUYWdJRCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAg
KEpTQzo6UHV0UHJvcGVydHlTbG90OjpQdXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQ
dXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbVZhbHVlKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVy
dHlTbG90OjpzZXRDdXN0b21BY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xv
dDo6Y3VzdG9tU2V0dGVyIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVN0
dWIpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5oOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9X
YXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNt
Q2FsbGVlLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCBjb25zdCk6
CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblByb2xvZ3VlIGNvbnN0KToKKyAg
ICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJs
b2NrOjplbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAg
ICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAq
IHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRocm93U3RhY2tPdmVyZmxvd0Zyb21X
YXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HVGllclVw
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnN0dWIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OmV4aXN0aW5nU3R1Yik6CisgICAgICAgICogd2FzbS9X
YXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmhhbmRsZUJhZEk2NFVzZSk6CisgICAgICAgIChKU0M6Oldhc206
Ondhc21Ub0pTKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmg6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6bG9hZEZyb21GcmFtZUFuZEp1bXAp
OgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6
bGlua0RhdGFMYWJlbHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21w
aWxlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
ckNvZGVCbG9jazo6c2V0OEJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQxNkJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpz
ZXQ4Qml0Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6
OnNldDE2Qml0Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxv
Y2s6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpjbGVhcik6
CisKIDIwMTgtMDQtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzw+Ojp2aXNpdENoaWxkcmVuIGhhcyBhIHJhY2UgY29u
ZGl0aW9uIHJlYWRpbmcgbV9tb2RlIGFuZCBtX3ZlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4g
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGU7CiAgICAgdHlwZWRlZiBBc3NlbWJsZXJUeXBlIEFz
c2VtYmxlclR5cGVfVDsKIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQ
dHI7Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz47CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjx0YWc+OwogCiAgICAgY2xhc3MgSnVtcDsKIApAQCAtMzk0LDcgKzM5NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNz
ZW1ibGVyVHlwZT47CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgREZHOjpPU1JFeGl0OwogICAgICAg
ICBmcmllbmQgY2xhc3MgSnVtcDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjsKKyAgICAgICAgdGVtcGxhdGU8UHRyVGFnPiBmcmllbmQgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOwogICAgICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIFdhdGNocG9pbnQ7CiAKQEAgLTg0Myw5ICs4NDMsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMo
ZnJvbS5tX2xhYmVsLCB0by5tX2xhYmVsKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGEs
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRh
ZywgUHRyVGFnIGJUYWc+CisgICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCiAgICAgewotICAgICAgICByZXR1cm4gYi5leGVjdXRh
YmxlQWRkcmVzczxwdHJkaWZmX3Q+KCkgLSBhLmV4ZWN1dGFibGVBZGRyZXNzPHB0cmRpZmZfdD4o
KTsKKyAgICAgICAgcmV0dXJuIGIudGVtcGxhdGUgZGF0YUxvY2F0aW9uPHB0cmRpZmZfdD4oKSAt
IGEudGVtcGxhdGUgZGF0YUxvY2F0aW9uPHB0cmRpZmZfdD4oKTsKICAgICB9CiAKICAgICB1bnNp
Z25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmRlYnVnT2Zmc2V0KCk7IH0K
QEAgLTg1Nyw3ICs4NTgsOCBAQCBwdWJsaWM6CiAKICAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1i
bGVyOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEp1bXAganVt
cCwgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDx0YWc+IHRhcmdldCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtK
dW1wKGNvZGUsIGp1bXAubV9sYWJlbCwgdGFyZ2V0LmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBA
IC04NjcsMTIgKzg2OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQ
b2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlu
a1BvaW50ZXIodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lk
IGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6Omxp
bmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJs
ZXJMYWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5vUHRyVGFnKQorICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CisgICAgc3RhdGljIHZvaWQqIGdldExpbmtlckFkZHJlc3Modm9pZCogY29kZSwgQXNz
ZW1ibGVyTGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4gdGFnQ29kZVB0cihBc3Nl
bWJsZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGxhYmVsKSwgdGFnKTsKICAgICB9
CkBAIC04ODIsNTYgKzg4Niw2NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBc3NlbWJsZXJU
eXBlOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KGNhbGwubV9sYWJlbCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmVwYXRjaEp1bXAoQ29kZUxvY2F0aW9uSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25M
YWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcganVtcFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEp1bXAoQ29kZUxvY2F0aW9uSnVtcDxqdW1w
VGFnPiBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7
CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0p1bXAoanVtcC5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoSnVtcFRvTm9wKENvZGVMb2NhdGlvbkp1bXAganVtcCkKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcganVtcFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSnVtcFRvTm9wKENvZGVMb2Nh
dGlvbkp1bXA8anVtcFRhZz4ganVtcCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJl
bGlua0p1bXBUb05vcChqdW1wLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCByZXBhdGNoTmVhckNhbGwoQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQ
dHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTmVhckNhbGwoQ29kZUxvY2F0
aW9uTmVhckNhbGw8Y2FsbFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+
IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5lYXJDb2RlUHRyVGFnKTsKICAgICAgICAgc3dpdGNo
IChuZWFyQ2FsbC5jYWxsTW9kZSgpKSB7CiAgICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWls
OgogICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rSnVtcChuZWFyQ2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIE5lYXJDYWxsTW9kZTo6UmVndWxhcjoKLSAgICAgICAgICAgIEFzc2Vt
YmxlclR5cGU6OnJlbGlua0NhbGwobmVhckNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5r
Q2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgZGF0YUxhYmVsQ29tcGFj
dCwgaW50MzJfdCB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8dGFnPiBkYXRh
TGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVsQ29tcGFjdC5kYXRhTG9jYXRpb24oKSwgdmFsdWUp
OworICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0
LnRlbXBsYXRlIGRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hJbnQzMihDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBkYXRhTGFiZWwzMiwg
aW50MzJfdCB2YWx1ZSkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZv
aWQgcmVwYXRjaEludDMyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4gZGF0YUxhYmVsMzIs
IGludDMyX3QgdmFsdWUpCiAgICAgewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoSW50
MzIoZGF0YUxhYmVsMzIuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCByZXBhdGNoUG9pbnRlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVs
UHRyLCB2b2lkKiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hQb2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGRhdGFMYWJl
bFB0ciwgdm9pZCogdmFsdWUpCiAgICAgewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNo
UG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBk
YXRhTGFiZWxQdHIpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lk
KiByZWFkUG9pbnRlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBkYXRhTGFiZWxQdHIp
CiAgICAgewogICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6cmVhZFBvaW50ZXIoZGF0YUxh
YmVsUHRyLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgcmVw
bGFjZVdpdGhMb2FkKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoTG9hZChDb2RlTG9j
YXRpb25Db252ZXJ0aWJsZUxvYWQ8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxl
clR5cGU6OnJlcGxhY2VXaXRoTG9hZChsYWJlbC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQotICAg
IAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKENvZGVMb2Nh
dGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9u
Q29udmVydGlibGVMb2FkPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBBc3NlbWJsZXJUeXBl
OjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbihsYWJlbC5kYXRhTG9jYXRpb24oKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2Nh
dGlvbi5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNSArMzMsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGVudW0gTmVhckNhbGxNb2RlIHsgUmVndWxhciwgVGFpbCB9OwogCi1j
bGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbjsKLWNsYXNzIENvZGVMb2NhdGlvbkxhYmVsOwot
Y2xhc3MgQ29kZUxvY2F0aW9uSnVtcDsKLWNsYXNzIENvZGVMb2NhdGlvbkNhbGw7Ci1jbGFzcyBD
b2RlTG9jYXRpb25OZWFyQ2FsbDsKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q7
Ci1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjsKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0cjsKLWNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDsKK3RlbXBsYXRlPFB0
clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb247Cit0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIENvZGVMb2NhdGlvbkxhYmVsOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25KdW1wOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsOwordGVtcGxh
dGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25OZWFyQ2FsbDsKK3RlbXBsYXRlPFB0clRhZz4g
Y2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDsKK3RlbXBsYXRlPFB0clRhZz4gY2xh
c3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9u
Q29udmVydGlibGVMb2FkOwogCiAvLyBUaGUgQ29kZUxvY2F0aW9uKiB0eXBlcyBhcmUgYWxsIHBy
ZXR0eSBtdWNoIGRvLW5vdGhpbmcgd3JhcHBlcnMgYXJvdW5kCiAvLyBDb2RlUHRyIChvciBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIsIHRvIGdpdmUgaXQgaXRzIGZ1bGwgbmFtZSkuICBUaGVzZQpAQCAt
NTQsMTY5ICs1NCwyMTIgQEAgY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwogLy8g
b2Zmc2V0cyBhcGFydC4gIFRvIHJlZHVjZSBtZW1vcnkgb3ZlcmhlYWQgd2Ugd2lsbCBvbmx5IHJl
dGFpbiBhIHBvaW50ZXIgdG8KIC8vIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2ls
bCB1c2UgdGhlICpBdE9mZnNldCBtZXRob2RzIHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25D
b21tb24gdG8gZmluZCB0aGUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KLWNs
YXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgewot
cHVibGljOgotICAgIENvZGVMb2NhdGlvbkluc3RydWN0aW9uIGluc3RydWN0aW9uQXRPZmZzZXQo
aW50IG9mZnNldCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxBdE9mZnNldChpbnQgb2Zm
c2V0KTsKLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAg
ICBDb2RlTG9jYXRpb25DYWxsIGNhbGxBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbCBuZWFyQ2FsbEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSk7
Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0ckF0T2Zmc2V0KGludCBv
ZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyQXRPZmZzZXQo
aW50IG9mZnNldCk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVM
b2FkIGNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KGludCBvZmZzZXQpOwordGVtcGxhdGU8UHRyVGFn
IHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPiB7CisgICAgdXNpbmcgQmFzZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
OworcHVibGljOgorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2Nh
dGlvbkluc3RydWN0aW9uPHJlc3VsdFRhZz4gaW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0
KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnID0gdGFnPiBDb2RlTG9jYXRpb25MYWJl
bDxyZXN1bHRUYWc+IGxhYmVsQXRPZmZzZXQoaW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSnVtcDxyZXN1bHRUYWc+IGp1bXBBdE9m
ZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnID0gdGFnPiBD
b2RlTG9jYXRpb25DYWxsPHJlc3VsdFRhZz4gY2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpOworICAg
IHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbk5lYXJDYWxsPHJl
c3VsdFRhZz4gbmVhckNhbGxBdE9mZnNldChpbnQgb2Zmc2V0LCBOZWFyQ2FsbE1vZGUpOworICAg
IHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjxyZXN1bHRUYWc+IGRhdGFMYWJlbFB0ckF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBs
YXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHJlc3Vs
dFRhZz4gZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgcmVzdWx0VGFnID0gdGFnPiBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHJlc3VsdFRh
Zz4gZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0
clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRU
YWc+IGNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KGludCBvZmZzZXQpOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
QmFzZTo6dGVtcGxhdGUgZGF0YUxvY2F0aW9uPFQ+KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIENv
ZGVMb2NhdGlvbkNvbW1vbigpCiAgICAgewogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkNvbW1v
bihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24pCi0gICAgICAgIDogTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKGxvY2F0aW9uKQorICAgIENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPihsb2NhdGlvbikKICAgICB7CiAgICAgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uSW5z
dHJ1Y3Rpb24gOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0
YWc+CitjbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1YmxpYyBDb2RlTG9jYXRpb25D
b21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oKSB7fQot
ICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkluc3RydWN0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9Cisg
ICAgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRp
b25JbnN0cnVjdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24odm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9j
YXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkxhYmVsIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9u
TGFiZWwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
KGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2NhdGlvbkxhYmVsKCkgeyB9CisgICAgZXhwbGljaXQg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisg
ICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxp
Y2l0IENvZGVMb2NhdGlvbkxhYmVsKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0
aW9uKSkgeyB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnPgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxuZXdU
YWc+KENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCkp
OyB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCByZXRhZ2dlZChQdHJUYWcgb2xkVGFnLCBQdHJU
YWcgbmV3VGFnKSB7IHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
ID0gdm9pZCo+CisgICAgVCB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QgeyByZXR1
cm4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3M8VD4oKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQg
ZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRl
bXBsYXRlIGRhdGFMb2NhdGlvbjxUPigpOyB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25KdW1w
IDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xh
c3MgQ29kZUxvY2F0aW9uSnVtcCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBw
dWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCgpIHt9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0
aW9uSnVtcChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2NhdGlvbkp1bXAoKSB7IH0KKyAg
ICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0K
ICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQor
ICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+KGxvY2F0aW9uKSkgeyB9CiAKLSAgICBDb2RlTG9jYXRpb25KdW1wIHJldGFnZ2VkKFB0clRh
ZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpyZXRhZ2dlZChvbGRUYWcsIG5ld1RhZykpOyB9CisgICAgdGVtcGxh
dGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2RlTG9jYXRpb25KdW1wPG5ld1RhZz4gcmV0YWdnZWQo
KSB7IHJldHVybiBDb2RlTG9jYXRpb25KdW1wPG5ld1RhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIH07CiAKLWNsYXNzIENvZGVM
b2NhdGlvbkNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRh
ZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+IHsKIHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25DYWxsKCkge30KLSAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uQ2Fs
bCgpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9j
YXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNhbGwodm9pZCogbG9jYXRpb24p
Ci0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2Nh
dGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdU
YWc+CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxuZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29k
ZUxvY2F0aW9uQ2FsbDxuZXdUYWc+KENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSBy
ZXRhZ2dlZDxuZXdUYWc+KCkpOyB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25OZWFyQ2FsbCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNz
IENvZGVMb2NhdGlvbk5lYXJDYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsK
IHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCgpIHt9Ci0gICAgZXhwbGljaXQgQ29k
ZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uLCBOZWFyQ2Fs
bE1vZGUgY2FsbE1vZGUpCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0K
KyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9k
ZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKGxvY2F0aW9uKSksIG1fY2FsbE1vZGUoY2FsbE1vZGUpIHsgfQorICAgICAgICA6IENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9u
KSksIG1fY2FsbE1vZGUoY2FsbE1vZGUpIHsgfQogICAgIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSgp
IHsgcmV0dXJuIG1fY2FsbE1vZGU7IH0KIHByaXZhdGU6CiAgICAgTmVhckNhbGxNb2RlIG1fY2Fs
bE1vZGUgPSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI7CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25E
YXRhTGFiZWwzMiA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFn
IHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVMb2NhdGlv
bkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMigpIHt9
Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikge30K
KyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMigpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMih2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNz
IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9u
PHRhZz4gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoKSB7IH0K
LSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24p
IHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
PHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbENv
bXBhY3Qodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9Owog
Ci1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29t
bW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgotICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cigpIHt9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb24obG9jYXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkg
eyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIodm9p
ZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENv
ZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewor
dGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0
aW9uQ29udmVydGlibGVMb2FkKCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVy
dGlibGVMb2FkKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb24obG9jYXRpb24pIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNv
bnZlcnRpYmxlTG9hZChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQg
Q29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENv
ZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7IH0KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
Pihsb2NhdGlvbikpIHsgfQogfTsKIAotaW5saW5lIENvZGVMb2NhdGlvbkluc3RydWN0aW9uIENv
ZGVMb2NhdGlvbkNvbW1vbjo6aW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxh
dGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxv
Y2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6aW5z
dHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09G
RlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihkYXRhTG9j
YXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25JbnN0cnVj
dGlvbjxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+
KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsIENvZGVMb2NhdGlv
bkNvbW1vbjo6bGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4K
K3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8cmVz
dWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6bGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0
KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBD
b2RlTG9jYXRpb25MYWJlbChkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25MYWJlbDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihk
YXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlv
bkp1bXAgQ29kZUxvY2F0aW9uQ29tbW9uOjpqdW1wQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBs
YXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVM
b2NhdGlvbkp1bXA8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6anVtcEF0T2Zm
c2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7
Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zm
c2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8
cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5l
IENvZGVMb2NhdGlvbkNhbGwgQ29kZUxvY2F0aW9uQ29tbW9uOjpjYWxsQXRPZmZzZXQoaW50IG9m
ZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgor
aW5saW5lIENvZGVMb2NhdGlvbkNhbGw8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFn
Pjo6Y2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZG
U0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkNhbGwoZGF0YUxvY2F0aW9uPGNo
YXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbDxyZXN1bHRUYWc+
KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsK
IH0KIAotaW5saW5lIENvZGVMb2NhdGlvbk5lYXJDYWxsIENvZGVMb2NhdGlvbkNvbW1vbjo6bmVh
ckNhbGxBdE9mZnNldChpbnQgb2Zmc2V0LCBOZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCit0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpuZWFyQ2Fs
bEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBBU1NF
UlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVh
ckNhbGwoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0LCBjYWxsTW9kZSk7CisgICAgcmV0
dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPHJlc3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+
KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCksIGNhbGxNb2RlKTsKIH0KIAotaW5saW5l
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBDb2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbFB0
ckF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8cmVzdWx0VGFn
PiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNl
dCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7
CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxyZXN1bHRUYWc+KHRhZ0NvZGVQ
dHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5s
aW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIENvZGVMb2NhdGlvbkNvbW1vbjo6ZGF0YUxhYmVs
MzJBdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0
clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8cmVzdWx0VGFn
PiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0
KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBD
b2RlTG9jYXRpb25EYXRhTGFiZWwzMihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOwor
ICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8
cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5l
IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgQ29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1w
bGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBh
Y3Q8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6ZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNl
dCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoZGF0YUxvY2F0aW9u
PGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29t
cGFjdDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+
KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBD
b2RlTG9jYXRpb25Db21tb246OmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KGludCBvZmZzZXQpCit0
ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBD
b2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248
dGFnPjo6Y29udmVydGlibGVMb2FkQXRPZmZzZXQoaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRf
VkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVy
dGlibGVMb2FkKGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFn
PihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIwICs0NCwyMCBAQCBib29s
IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqCiAgICAgcmV0dXJuIE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpOwogfQogCi1MaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6
OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseShQdHJUYWcgdGFnKQorTGlua0J1ZmZlcjo6
Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0
RGlzYXNzZW1ibHlJbXBsKCkKIHsKICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CiAgICAgCiAg
ICAgQVNTRVJUKG1fZGlkQWxsb2NhdGUpOwogICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCi0g
ICAgICAgIHJldHVybiBDb2RlUmVmKCptX2V4ZWN1dGFibGVNZW1vcnksIHRhZyk7CisgICAgICAg
IHJldHVybiBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+KCptX2V4ZWN1dGFibGVNZW1vcnkpOwog
ICAgIAotICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKHRhZ0NvZGVQdHIobV9jb2RlLCB0YWcpKSk7CisgICAgcmV0dXJuIENv
ZGVSZWY8TGlua0J1ZmZlclB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPihtX2NvZGUpKSk7CiB9CiAKLUxpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6Zmlu
YWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KFB0clRhZyB0YWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwg
Li4uKQorTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVmZmVyOjpm
aW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQog
ewotICAgIENvZGVSZWYgcmVzdWx0ID0gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRh
Zyk7CisgICAgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVX
aXRob3V0RGlzYXNzZW1ibHlJbXBsKCk7CiAKICAgICBpZiAobV9hbHJlYWR5RGlzYXNzZW1ibGVk
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzAsMTggKzcwLDE5IEBAIExpbmtCdWZmZXI6
OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemUKICAgICB2YV9lbmQoYXJnTGlzdCk7CiAgICAg
b3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJl
bW92ZUNvZGVQdHJUYWc8dWludDhfdCo+KHJlc3VsdC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgdWludDhfdCogZXhlY3V0YWJsZUFkZHJlc3MgPSByZXN1bHQuY29kZSgpLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDhfdCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENv
ZGUgYXQgWyVwLCAlcCk6XG4iLCBleGVjdXRhYmxlQWRkcmVzcywgZXhlY3V0YWJsZUFkZHJlc3Mg
KyByZXN1bHQuc2l6ZSgpKTsKICAgICAKICAgICBDU3RyaW5nIGhlYWRlciA9IG91dC50b0NTdHJp
bmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSB7Ci0gICAg
ICAgIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoaGVhZGVyLCByZXN1bHQsIG1fc2l6ZSwgIiAg
ICAiKTsKKyAgICAgICAgQ29kZVJlZjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVJlZkZvckRpc2Fz
c2VtYmx5ID0gcmVzdWx0LnJldGFnZ2VkPERpc2Fzc2VtYmx5UHRyVGFnPigpOworICAgICAgICBk
aXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KGhlYWRlciwgV1RGTW92ZShjb2RlUmVmRm9yRGlzYXNz
ZW1ibHkpLCBtX3NpemUsICIgICAgIik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAogICAgIGRhdGFMb2coaGVhZGVyKTsKLSAgICBkaXNhc3NlbWJsZShyZXN1bHQuY29kZSgp
LCBtX3NpemUsICIgICAgIiwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkaXNhc3NlbWJsZShyZXN1
bHQucmV0YWdnZWRDb2RlPERpc2Fzc2VtYmx5UHRyVGFnPigpLCBtX3NpemUsICIgICAgIiwgV1RG
OjpkYXRhRmlsZSgpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIExpbmtC
dWZmZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpbmtCdWZmZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICAKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBD
b2RlUmVmOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+OworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVSZWYgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBM
YWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wIEp1bXA7CiAgICAgdHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBQYXRjaGFibGVKdW1wOwpAQCAtMTIxLDMy
ICsxMjEsMzYgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQg
dG8gbGluayBvciBzZXQgdmFsdWVzIGF0IGNvZGUgZ2VuZXJhdGlvbiB0aW1lLgogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
ZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jPjo6dHlwZT46OnZhbHVl
Pj4KLSAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jIGZ1bmNOYW1lLCBQdHJUYWcgdGFnKQor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWcsIHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8
RnVuYz46OnR5cGU+Ojp2YWx1ZT4+CisgICAgdm9pZCBsaW5rKENhbGwgY2FsbCwgRnVuYyBmdW5j
TmFtZSkKICAgICB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKGZ1bmNOYW1lLCB0YWcp
OworICAgICAgICBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAg
bGluayhjYWxsLCBmdW5jdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBsaW5rKENhbGwgY2FsbCwg
RnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICB2b2lk
IGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7CiAgICAgICAgIGNhbGwu
bV9sYWJlbCA9IGFwcGx5T2Zmc2V0KGNhbGwubV9sYWJlbCk7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rQ2FsbChjb2RlKCksIGNhbGwsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBsaW5rKENhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IGxhYmVsKQogICAgIHsKLSAgICAgICAgbGluayhjYWxsLCBGdW5jdGlvblB0cihsYWJl
bCkpOworICAgICAgICBsaW5rKGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4obGFiZWwpKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBsaW5rKEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwp
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAganVtcC5tX2xhYmVsID0g
YXBwbHlPZmZzZXQoanVtcC5tX2xhYmVsKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtK
dW1wKGNvZGUoKSwganVtcCwgbGFiZWwpOwogICAgIH0KIAotICAgIHZvaWQgbGluayhjb25zdCBK
dW1wTGlzdCYgbGlzdCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICB2b2lkIGxpbmsoY29uc3QgSnVtcExpc3QmIGxpc3QsIENvZGVMb2NhdGlv
bkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAg
OiBsaXN0Lmp1bXBzKCkpCiAgICAgICAgICAgICBsaW5rKGp1bXAsIGxhYmVsKTsKQEAgLTE1OCw3
ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihj
b2RlKCksIHRhcmdldCwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgcGF0Y2goRGF0YUxhYmVs
UHRyIGxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHZvaWQgcGF0Y2goRGF0YUxhYmVsUHRyIGxhYmVsLCBDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IHZhbHVlKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyTGFiZWwgdGFyZ2V0ID0gYXBw
bHlPZmZzZXQobGFiZWwubV9sYWJlbCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9p
bnRlcihjb2RlKCksIHRhcmdldCwgdmFsdWUpOwpAQCAtMTY2LDU0ICsxNzEsNjMgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBvYnRhaW4gaGFuZGxlcyB0byBh
bGxvdyB0aGUgY29kZSB0byBiZSByZWxpbmtlZCAvIHJlcGF0Y2hlZCBsYXRlci4KICAgICAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeXBvaW50KCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gZW50cnlwb2ludCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoY29kZSgpKTsKKyAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4odGFnQ29kZVB0cjx0YWc+KGNvZGUoKSkpOwogICAgIH0KIAotICAg
IENvZGVMb2NhdGlvbkNhbGwgbG9jYXRpb25PZihDYWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25DYWxsPHRhZz4gbG9jYXRpb25PZihDYWxsIGNhbGwp
CiAgICAgewogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsK
ICAgICAgICAgQVNTRVJUKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNv
ZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uQ2FsbDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29k
ZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0
aW9uTmVhckNhbGwgbG9jYXRpb25PZk5lYXJDYWxsKENhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPHRhZz4gbG9jYXRpb25PZk5lYXJD
YWxsKENhbGwgY2FsbCkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxs
OjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikp
OwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXI6Omdl
dExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSwKKyAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExp
bmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0KGNhbGwubV9sYWJlbCkpLAogICAg
ICAgICAgICAgY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkgPyBOZWFyQ2FsbE1vZGU6OlRhaWwg
OiBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxvY2F0aW9uT2YoUGF0Y2hhYmxlSnVtcCBqdW1wLCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGxvY2F0
aW9uT2YoUGF0Y2hhYmxlSnVtcCBqdW1wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlP
ZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCksIHRhZykpOworICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNv
ZGUoKSwgYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsb2NhdGlvbk9mKExhYmVsIGxhYmVsLCBQdHJUYWcgdGFnID0gTm9Q
dHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDx0
YWc+IGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBs
eU9mZnNldChsYWJlbC5tX2xhYmVsKSwgdGFnKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRp
b25MYWJlbDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgp
LCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0ciBsb2NhdGlvbk9mKERhdGFMYWJlbFB0ciBsYWJlbCkKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxvY2F0aW9u
T2YoRGF0YUxhYmVsUHRyIGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFw
cGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNv
ZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBsb2NhdGlvbk9mKERhdGFMYWJlbDMyIGxhYmVsKQorICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsb2NhdGlv
bk9mKERhdGFMYWJlbDMyIGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbDMyKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBw
bHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyPHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2Rl
KCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7CiAgICAgfQogICAgIAotICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgbG9jYXRpb25PZihEYXRhTGFiZWxDb21wYWN0IGxhYmVs
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29t
cGFjdDx0YWc+IGxvY2F0aW9uT2YoRGF0YUxhYmVsQ29tcGFjdCBsYWJlbCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KE1hY3JvQXNzZW1ibGVyOjpn
ZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAg
ICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8dGFnPihNYWNyb0Fzc2Vt
Ymxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9s
YWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgbG9jYXRp
b25PZihDb252ZXJ0aWJsZUxvYWRMYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDx0YWc+IGxvY2F0aW9uT2YoQ29udmVy
dGlibGVMb2FkTGFiZWwgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9u
Q29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwg
YXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkNvbnZlcnRpYmxlTG9hZDx0YWc+KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRh
Zz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAogICAgIC8v
IFRoaXMgbWV0aG9kIG9idGFpbnMgdGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBjYWxsLCBnaXZl
biBhcyBhbiBvZmZzZXQgZnJvbQpAQCAtMjM4LDEzICsyNTIsMzEgQEAgcHVibGljOgogICAgIC8v
IGNvbXBsZXRlIGdlbmVyYXRpb24gb2YgdGhlIGNvZGUuIEFsdGVybmF0aXZlbHksIGNhbGwKICAg
ICAvLyBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSBkaXJlY3RseSBpZiB5b3UgaGF2
ZSB5b3VyIG93biB3YXkgb2YKICAgICAvLyBkaXNwbGF5aW5nIGRpc2Fzc2VtYmx5LgotICAgIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWYgZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5KFB0clRhZyk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZiBmaW5hbGl6ZUNvZGVX
aXRoRGlzYXNzZW1ibHkoUHRyVGFnLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJ
QlVURV9QUklOVEYoMywgNCk7CiAKLSAgICBDb2RlUHRyIHRyYW1wb2xpbmVBdChMYWJlbCBsYWJl
bCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVSZWY8dGFnPiBmaW5hbGl6ZUNv
ZGVXaXRob3V0RGlzYXNzZW1ibHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKS50ZW1wbGF0ZSByZXRhZ2dlZDx0YWc+KCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBDb2Rl
UmVmPHRhZz4gZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZvcm1hdCwg
QXJncy4uLiBhcmdzKQorICAgIHsKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3Jt
YXQtbm9ubGl0ZXJhbCIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1h
dC1zZWN1cml0eSIKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmluYWxpemVDb2RlV2l0aERpc2Fz
c2VtYmx5SW1wbChmb3JtYXQsIGFyZ3MuLi4pLnRlbXBsYXRlIHJldGFnZ2VkPHRhZz4oKTsKKyNp
ZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgor
ICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZVB0cjx0YWc+IHRyYW1w
b2xpbmVBdChMYWJlbCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBh
cHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZVB0cjx0YWc+
KE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29k
ZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkpOwogICAgIH0KIAogICAgIHZvaWQqIGRl
YnVnQWRkcmVzcygpCkBAIC0yNTgsNiArMjkwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQWxy
ZWFkeURpc2Fzc2VtYmxlKCkgeyBtX2FscmVhZHlEaXNhc3NlbWJsZWQgPSB0cnVlOyB9CiAKIHBy
aXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBm
aW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHlJbXBsKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJ
bXBsKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKTsK
KwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNl
dEZvcihpbnQgbG9jYXRpb24pCiAgICAgewpAQCAtMzE2LDggKzM1MSw4IEBAIHByaXZhdGU6CiAK
ICNkZWZpbmUgRklOQUxJWkVfQ09ERV9JRihjb25kaXRpb24sIGxpbmtCdWZmZXJSZWZlcmVuY2Us
IHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIChVTkxJS0VMWSgoY29uZGl0aW9uKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICA/IChsaW5r
QnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkocmVzdWx0UHRyVGFn
LCBfX1ZBX0FSR1NfXykgXAotICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6
ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkocmVzdWx0UHRyVGFnKSkKKyAgICAgICAgPyAobGlua0J1
ZmZlclJlZmVyZW5jZSkuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5PHJlc3VsdFB0clRhZz4o
X19WQV9BUkdTX18pIFwKKyAgICAgICAgOiAobGlua0J1ZmZlclJlZmVyZW5jZSkuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5PHJlc3VsdFB0clRhZz4oKSkKIAogYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3MiwxNyArMzc3MiwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0
clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFk
Q2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihBc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBG
dW5jdGlvblB0cjxyZXN1bHRUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxyZXN1bHRUYWc+KEFz
c2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbCBpbnN0
cnVjdGlvblN0YXJ0KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQg
cmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0
KQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBsYWNlV2l0aFZNSGFsdChpbnN0cnVjdGlv
blN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGxhY2VX
aXRoVk1IYWx0KGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxv
Y2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBc3NlbWJs
ZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0
aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQpAQCAtMzgwNiw0NSArMzgwOSw1MyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
Ci0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hP
blJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBsYXRl
PFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4g
bGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgwKTsKICAg
ICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKQorCisg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFn
PiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICByZXR1
cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNz
KENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPikKICAgICB7CiAg
ICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsK
ICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0
ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQq
IGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIHJlZW1pdEluaXRpYWxNb3ZlV2l0aFBhdGNo
KGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCB2b2lkKikKKworICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwg
QWRkcmVzcywgdm9pZCopCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0
YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BP
SU5URVIpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFn
LCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQog
ICAgIHsKICAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0
ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCks
IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KQEAgLTQ0MzgsMTcgKzQ0
NDksMTUgQEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAg
ICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRy
IGZ1bmN0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlu
a0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQog
ICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSkKICAgICAgICAg
ICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZz
ZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKSB7
Ci0gICAgICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNh
bGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQorICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVt
cChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3M8Tm9QdHJUYWc+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBc3NlbWJs
ZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgQ2FjaGVkVGVt
cFJlZ2lzdGVyIG1fZGF0YU1lbW9yeVRlbXBSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTUwNSwxMiArMTUwNSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLmRtYklTSFNUKCk7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0
aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+CisgICAgc3RhdGljIEZ1bmN0
aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDx0YWc+IGNh
bGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKCopKCk+KEFSTUFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24o
KSkpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4o
cmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KEFSTUFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQo
Y2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNl
V2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9u
TGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcg
ZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWw8c3RhcnRUYWc+IGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+
IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQVJNQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1
bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0
aW9uKCkpOwogICAgIH0KQEAgLTE1MjgsNDQgKzE1MzAsNTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRp
b25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsMzIpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
Q29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hP
bkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPikKICAgICB7CiAgICAgICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIpCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBz
dGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0
aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJlbCkKICAgICB7CiAgICAgICAgIHJldHVybiBsYWJl
bC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQs
IFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBBUk1B
c3NlbWJsZXI6OnJldmVydEJyYW5jaFB0cldpdGhQYXRjaChpbnN0cnVjdGlvblN0YXJ0LmRhdGFM
b2NhdGlvbigpLCByZWcsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUp
ICYgMHhmZmZmKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNz
LCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRp
b25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWws
IEFkZHJlc3MsIHZvaWQqKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZv
aWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29k
ZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCopCiAgICAgewogICAgICAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNo
Q2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9u
KQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQVJNQXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRh
Zz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJlbGlua0NhbGwo
Y2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgfQpAQCAtMTYxOSw3ICsxNjI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNtcChBUk1SZWdpc3RlcnM6OlMxLCBtX2Fzc2VtYmxlci5nZXRJbW0ocmlnaHQubV92YWx1
ZSwgQVJNUmVnaXN0ZXJzOjpTMCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxs
KHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2Fs
bC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCiAgICAgICAgICAgICBBUk1Bc3NlbWJsZXI6OmxpbmtK
dW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzODIs
NyArMTM4Miw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuZG1iSVNIU1QoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVt
cGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9uU3Rh
cnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAg
ICAgQVJNdjdBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQpAQCAtMTk5Mywy
MiArMTk5NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgp
OwogICAgIH0KIAotICAgIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChD
b2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRy
VGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRD
YWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAg
ICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KEFSTXY3
QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJU
YWcpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9j
YXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxv
Y2F0aW9uKCkpKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0
aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVs
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBjb25zdCB1bnNpZ25lZCB0d29X
b3JkT3BTaXplID0gNDsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXR3b1dv
cmRPcFNpemUgKiAyKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rp
b25TdGFydCwgUmVnaXN0ZXJJRCByZCwgdm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHRlbXBsYXRl
PFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBS
ZWdpc3RlcklEIHJkLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogI2lmIE9TKExJTlVYKQog
ICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdlQzbW92dGNtcFQyKGluc3Ry
dWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIHJkLCBkYXRhVGVtcFJlZ2lzdGVyLCByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSk7CkBAIC0yMDE3LDM1ICsyMDIwLDQx
IEBAIHB1YmxpYzoKICAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZUMyhp
bnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkYXRhVGVtcFJlZ2lzdGVyLCBBUk1UaHVt
YkltbWVkaWF0ZTo6bWFrZVVJbnQxNihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5pdGlh
bFZhbHVlKSAmIDB4ZmZmZikpOwogI2VuZGlmCiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2Rl
TG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNz
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cikKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPikKICAgICB7
CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4o
KTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMikK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyPHRhZz4pCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENv
ZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCB2b2lkKikKKworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCopCiAg
ICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQz
Ml90KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywg
UHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0
VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRh
Zz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0yMTQ0LDcgKzIxNTMsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCi0gICAg
c3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBm
dW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtD
YWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKICAg
ICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKICAgICAgICAgICAg
IEFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAkocmV2aXNpb24gMjMw
NzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2MiArMjgsNDEgQEAKIAogI2luY2x1ZGUg
IkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMTElu
dERhdGEuaCIKKyNpbmNsdWRlICJQdHJUYWcuaCIKICNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUxMSW50Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK3ZvaWQgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lk
KiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0g
ICAgQVNTRVJUKG9wY29kZUlEID49IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMpOwotICAgIHJldHVy
biBjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoTExJbnQ6OmdldENvZGVQdHIob3Bjb2RlSUQp
KTsKLX0KLQotdm9pZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZShjb25zdCBj
aGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmICghbV92YWx1ZSkg
eworICAgIGlmICghZXhlY3V0YWJsZUFkZHJlc3MpIHsKICAgICAgICAgb3V0LnByaW50KG5hbWUs
ICIobnVsbCkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoZXhlY3V0YWJsZUFk
ZHJlc3MoKSA9PSBkYXRhTG9jYXRpb24oKSkgewotICAgICAgICBvdXQucHJpbnQobmFtZSwgIigi
LCBSYXdQb2ludGVyKGV4ZWN1dGFibGVBZGRyZXNzKCkpLCAiKSIpOworICAgIGlmIChleGVjdXRh
YmxlQWRkcmVzcyA9PSBkYXRhTG9jYXRpb24pIHsKKyAgICAgICAgb3V0LnByaW50KG5hbWUsICIo
IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcyksICIpIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MoKSksICIsIGRhdGFMb2NhdGlvbiA9ICIsIFJhd1BvaW50ZXIoZGF0
YUxvY2F0aW9uKCkpLCAiKSIpOwotfQotCi12b2lkIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIs
IG91dCk7CisgICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRhTG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFM
b2NhdGlvbiksICIpIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihPcGNvZGVJRCBvcGNvZGVJRCkKK2Jvb2wgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihvcGNv
ZGVJRCkpOworICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwg
cHJlZml4LCBvdXQpOwogfQogCi1ib29sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6dHJ5VG9EaXNh
c3NlbWJsZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Citib29s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3Qg
Y2hhciogcHJlZml4KQogewotICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9jb2Rl
UHRyLCBzaXplKCksIHByZWZpeCwgb3V0KTsKKyAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShj
b2RlUHRyLCBzaXplLCBwcmVmaXgsIFdURjo6ZGF0YUZpbGUoKSk7CiB9CiAKLWJvb2wgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IGNoYXIqIHByZWZpeCkgY29u
c3QKLXsKLSAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShXVEY6OmRhdGFGaWxlKCksIHByZWZp
eCk7Ci19Ci0KLUNTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkaXNhc3NlbWJseSgpIGNv
bnN0CitDU3RyaW5nIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUp
CiB7CiAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OwotICAgIGlmICghdHJ5VG9EaXNhc3NlbWJs
ZShvdXQsICIiKSkKKyAgICBpZiAoIXRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgIiIs
IG91dCkpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CiAgICAgcmV0dXJuIG91dC50b0NTdHJp
bmcoKTsKIH0KIAotdm9pZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBtX2NvZGVQdHIuZHVtcFdpdGhOYW1lKCJDb2RlUmVmIiwgb3V0
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDE0IEBACiAvLyBpbnRv
IHRoZSBwcm9jZXNzb3IgYXJlIGRlY29yYXRlZCB3aXRoIHRoZSBib3R0b20gYml0IHNldCwgd2hp
bGUgdHJhZGl0aW9uYWwgQVJNIGhhcwogLy8gdGhlIGxvd2VyIGJpdCBjbGVhci4gU2luY2Ugd2Ug
ZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgcG9pbnRlciwgd2UgY2hlY2sgZm9yIGJvdGgKIC8vIGRl
Y29yYXRlZCBhbmQgdW5kZWNvcmF0ZWQgbnVsbC4KKyNkZWZpbmUgQVNTRVJUX05VTExfT1JfVkFM
SURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VSVCghcHRyIHx8IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHB0cikgJiB+MSkKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRF
UihwdHIpIFwKICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRyKSAmIH4x
KQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KSBcCiAgICAgQVNTRVJU
KCEob2Zmc2V0ICYgMSkpIC8vIE11c3QgYmUgbXVsdGlwbGUgb2YgMi4KICNlbHNlCisjZGVmaW5l
IEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIC8vIEFueXRoaW5nIGdvZXMh
CiAjZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIocHRyKSBcCiAgICAgQVNTRVJUKHB0
cikKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCkgLy8gQW55dGhpbmcg
Z29lcyEKQEAgLTUyLDcgKzU1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOwogCiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKQEAgLTYwLDE3ICs2MywxOSBA
QCBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAvLwogLy8gRnVuY3Rpb25QdHIgc2hvdWxkIGJl
IHVzZWQgdG8gd3JhcCBwb2ludGVycyB0byBDL0MrKyBmdW5jdGlvbnMgaW4gSlNDCiAvLyAocGFy
dGljdWxhcmx5LCB0aGUgc3R1YiBmdW5jdGlvbnMpLgordGVtcGxhdGU8UHRyVGFnIHRhZyA9IENG
dW5jdGlvblB0clRhZz4KIGNsYXNzIEZ1bmN0aW9uUHRyIHsKIHB1YmxpYzoKICAgICBGdW5jdGlv
blB0cigpIHsgfQorICAgIEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSB7IH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBG
dW5jdGlvblB0cihSZXR1cm5UeXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9
IENGdW5jdGlvblB0clRhZykKLSAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4odmFsdWUsIHRhZykpCisgICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgqdmFsdWUpKEFyZ3Vt
ZW50cy4uLikpCisgICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIHRhZz4o
dmFsdWUpKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOworICAg
ICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVk
TWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKLSAgICAgICAgQVNTRVJUX1ZB
TElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFMSURf
Q09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8g
dHJlYXQgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKQEAg
LTc4LDEyICs4MywxMiBAQCBwdWJsaWM6CiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENB
TEwgJiYgIU9TKFdJTkRPV1MpCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShDREVDTCAq
dmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcpCi0gICAg
ICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgIEZ1
bmN0aW9uUHRyKFJldHVyblR5cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVudHMuLi4pKQorICAgICAg
ICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCB0YWc+KHZhbHVlKSkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxs
T3JDRnVuY3Rpb25QdHIodmFsdWUpOwogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElz
Tm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIo
bV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihtX3Zh
bHVlKTsKICAgICB9CiAKICNlbmRpZiAvLyBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAm
JiAhT1MoV0lORE9XUykKQEAgLTkxLDU0ICs5Niw3NCBAQCBwdWJsaWM6CiAjaWYgQ09NUElMRVJf
U1VQUE9SVFMoRkFTVENBTExfQ0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRy
KFJldHVyblR5cGUoRkFTVENBTEwgKnZhbHVlKShBcmd1bWVudHMuLi4pLCBQdHJUYWcgdGFnID0g
Q0Z1bmN0aW9uUHRyVGFnKQotICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQq
Pih2YWx1ZSwgdGFnKSkKKyAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1
ZSkoQXJndW1lbnRzLi4uKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lk
KiwgdGFnPih2YWx1ZSkpCiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1
ZSk7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAg
UG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9P
Ul9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCiAjZW5kaWYgLy8gQ09NUElM
RVJfU1VQUE9SVFMoRkFTVENBTExfQ0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9p
bnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcG9pbnRlcjxQdHJUeXBlPjo6dHlwZT46OnZhbHVlPj4KLSAgICBleHBsaWNpdCBGdW5j
dGlvblB0cihQdHJUeXBlIHZhbHVlLCBQdHJUYWcgdGFnKQorICAgIGV4cGxpY2l0IEZ1bmN0aW9u
UHRyKFB0clR5cGUgdmFsdWUpCiAgICAgICAgIC8vIFVzaW5nIGEgQy1jdHlsZSBjYXN0IGhlcmUg
dG8gYXZvaWQgY29tcGlsZXIgZXJyb3Igb24gUlZUQzoKICAgICAgICAgLy8gRXJyb3I6ICAjNjk0
OiByZWludGVycHJldF9jYXN0IGNhbm5vdCBjYXN0IGF3YXkgY29uc3Qgb3Igb3RoZXIgdHlwZSBx
dWFsaWZpZXJzCiAgICAgICAgIC8vIChJIGd1ZXNzIG9uIFJWVEMgZnVuY3Rpb24gcG9pbnRlcnMg
aGF2ZSBhIGRpZmZlcmVudCBjb25zdG5lc3MgdG8gR0NDL01TVkM/KQotICAgICAgICA6IG1fdmFs
dWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVl
KHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFnPih2YWx1ZSkpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9u
UHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVk
KG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwor
ICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAg
fQogCi0gICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoRnVuY3Rpb25QdHIgb3RoZXIsIFB0clRhZyB0
YWcpCi0gICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG90aGVyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHRhZykpCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4pOworCisgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgorICAg
IEZ1bmN0aW9uUHRyPG90aGVyVGFnPiByZXRhZ2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICBh
c3NlcnRJc0NGdW5jdGlvblB0cihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAg
UG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBpZiAoIW1fdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8b3RoZXJUYWc+KCk7CisgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cjxvdGhlclRhZz4oKnRoaXMpOwogICAgIH0KIAotICAgIGV4cGxpY2l0
IEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Ci0KICAgICB2b2lkKiBleGVjdXRh
YmxlQWRkcmVzcygpIGNvbnN0CiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2Vy
dElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0K
IAorICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgdm9pZCogcmV0YWdnZWRFeGVjdXRh
YmxlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2Vy
dElzTm90UG9pc29uZWQobV92YWx1ZSk7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dGFn
LCBuZXdUYWc+KG1fdmFsdWUpOworICAgIH0KKwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFtX3ZhbHVlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnVuY3Rp
b25QdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7IH0KKwogcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgb3RoZXJUYWc+CisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoY29uc3QgRnVuY3Rp
b25QdHI8b3RoZXJUYWc+JiBvdGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKHJldGFnQ29kZVB0cjxv
dGhlclRhZywgdGFnPihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpKSkKKyAgICB7CisgICAgICAg
IFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKKyAgICAgICAg
QVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgIH0KKwogICAg
IHZvaWQqIG1fdmFsdWUgeyBudWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVu
ZCBjbGFzcyBGdW5jdGlvblB0cjsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEZ1bmN0aW9u
UHRyKSA9PSBzaXplb2Yodm9pZCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7CiAjaWYgQ09NUElM
RVJfU1VQUE9SVFMoQlVJTFRJTl9JU19UUklWSUFMTFlfQ09QWUFCTEUpCi1zdGF0aWNfYXNzZXJ0
KF9faXNfdHJpdmlhbGx5X2NvcHlhYmxlKEZ1bmN0aW9uUHRyKSwgIiIpOworc3RhdGljX2Fzc2Vy
dChfX2lzX3RyaXZpYWxseV9jb3B5YWJsZShGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KSwg
IiIpOwogI2VuZGlmCiAKIC8vIFJldHVybkFkZHJlc3NQdHI6CkBAIC0xNTgsOCArMTgzLDkgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAg
IH0KIAotICAgIGV4cGxpY2l0IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIgZnVuY3Rpb24p
Ci0gICAgICAgIDogbV92YWx1ZShmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlv
blB0cjx0YWc+IGZ1bmN0aW9uKQorICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4o
ZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCiAgICAgewogICAgICAgICBQb2lzb25lZE1h
c21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJ
RF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CkBAIC0xODMsOSArMjA5LDE2IEBAIHByaXZhdGU6CiAv
LyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6CiAvLwogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNo
b3VsZCBiZSB1c2VkIHRvIHdyYXAgcG9pbnRlcnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xh
c3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJh
c2UgeworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGR1bXBXaXRoTmFtZSh2b2lkKiBleGVj
dXRhYmxlQWRkcmVzcywgdm9pZCogZGF0YUxvY2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmlu
dFN0cmVhbSYgb3V0KTsKK307CisKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogcHVi
bGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cigpID0gZGVmYXVsdDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RkOjpudWxs
cHRyX3QpIDogbV92YWx1ZShudWxscHRyKSB7IH0KIAogICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cih2b2lkKiB2YWx1ZSkKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTE5NSw2ICsy
MjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICNlbmRpZgogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHZhbHVlLCB0YWcpOwogICAgICAgICBtX3ZhbHVl
LmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICNpZiBDUFUoQVJN
X1RIVU1CMikKQEAgLTIwNywxNyArMjQxLDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIodmFsdWUpOwor
ICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgodmFsdWUsIHRhZyk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gUG9pc29uZWRN
YXNtUHRyKHZhbHVlKTsKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3JlYXRlTExJbnRDb2RlUHRyKE9wY29kZUlEIGNvZGVJZCk7Ci0KICAgICBl
eHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoUmV0dXJuQWRkcmVzc1B0ciByYSkKLSAgICAg
ICAgOiBtX3ZhbHVlKHJhLnZhbHVlKCkpCisgICAgICAgIDogbV92YWx1ZSh0YWdDb2RlUHRyPHRh
Zz4ocmEudmFsdWUoKSkpCiAgICAgeworICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChyYS52YWx1
ZSgpKTsKICAgICAgICAgQVNTRVJUKHJhLnZhbHVlKCkpOwogICAgICAgICBtX3ZhbHVlLmFzc2Vy
dElzUG9pc29uZWQoKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVl
LnVucG9pc29uZWQoKSk7CkBAIC0yMjUsOSArMjU5LDEyIEBAIHB1YmxpYzoKIAogICAgIFBvaXNv
bmVkTWFzbVB0ciBwb2lzb25lZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXRhZ2dlZChQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3
VGFnKSBjb25zdAorICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPG5ld1RhZz4gcmV0YWdnZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cihleGVjdXRhYmxlQWRkcmVzcygpLCBvbGRUYWcsIG5ld1RhZykpOworICAgICAgICBp
ZiAoIW1fdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5l
d1RhZz4oKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+Ojpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxuZXdU
YWc+KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KQEAgLTIz
Niw2ICsyNzMsMjEgQEAgcHVibGljOgogICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQo
KTsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUudW5wb2lzb25lZDxUPigpOwogICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7
CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFnPihtX3ZhbHVlLnVucG9pc29uZWQo
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgVCA9IHZv
aWQqPgorICAgIFQgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAg
ICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKKyAgICAgICAgcmV0dXJuIHJldGFnQ29k
ZVB0cjxULCB0YWcsIG5ld1RhZz4obV92YWx1ZS51bnBvaXNvbmVkKCkpOworICAgIH0KKwogI2lm
IENQVShBUk1fVEhVTUIyKQogICAgIC8vIFRvIHVzZSB0aGlzIHBvaW50ZXIgYXMgYSBkYXRhIGFk
ZHJlc3MgcmVtb3ZlIHRoZSBkZWNvcmF0aW9uLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2
b2lkKj4KQEAgLTI1MSw3ICszMDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3ZhbHVl
LmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiht
X3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihtX3ZhbHVlID8gcmVtb3Zl
Q29kZVB0clRhZyhtX3ZhbHVlLnVucG9pc29uZWQoKSkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0
dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUudW5wb2lzb25lZCgpKTsKICAgICB9CiAj
ZW5kaWYKIApAQCAtMjgxLDEwICszMzMsMTMgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+
Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgpID0gZGVsZXRlOwogCi0gICAgdm9pZCBkdW1wV2l0
aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0g
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgIAorICAgIHZvaWQgZHVt
cFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0
YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRy
Iiwgb3V0KTsgfQorCiAgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwogICAg
IGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CiAgICAgCkBAIC0zMTAsOSAr
MzY1LDEwIEBAIHByaXZhdGU6CiAgICAgUG9pc29uZWRNYXNtUHRyIG1fdmFsdWU7CiB9OwogCit0
ZW1wbGF0ZTxQdHJUYWcgdGFnPgogc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgcHRy
KSB7IHJldHVybiBwdHIuaGFzaCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyJiBhLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGIpCisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4m
IHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBhLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPiYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQpAQCAtMzI0
LDIzICszODAsMjkgQEAgc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2ggewogLy8gQSBy
ZWZlcmVuY2UgdG8gYSBzZWN0aW9uIG9mIEpJVCBnZW5lcmF0ZWQgY29kZS4gIEEgQ29kZVJlZiBj
b25zaXN0cyBvZiBhCiAvLyBwb2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0
byB0aGUgcG9vbCBmcm9tIHdpdGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KLWNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNl
IHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJl
Zml4LCBQcmludFN0cmVhbSYgb3V0KTsKKyAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwgY29uc3Qg
Y2hhciogcHJlZml4KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0cmluZyBkaXNh
c3NlbWJseShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+LCBzaXplX3Qp
OworfTsKKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZSB7CiBwcml2YXRlOgogICAgIC8v
IFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgZGFuZ2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdh
bnQgdXNlcyBvZiBpdAogICAgIC8vIHRvIGJlIGVhc3kgdG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0
aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KLSAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgZXhwbGljaXQgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGVQdHIpCiAgICAgICAg
IDogbV9jb2RlUHRyKGNvZGVQdHIpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2RlUHRyKTsK
ICAgICB9CiAKIHB1YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKQotICAgIHsKLSAg
ICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkgPSBkZWZhdWx0OwogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKFJlZjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiYmIGV4ZWN1dGFibGVN
ZW1vcnksIFB0clRhZyB0YWcpCi0gICAgICAgIDogbV9jb2RlUHRyKHRhZ0NvZGVQdHIoZXhlY3V0
YWJsZU1lbW9yeS0+c3RhcnQoKSwgdGFnKSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoUmVm
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+JiYgZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBt
X2NvZGVQdHIodGFnQ29kZVB0cjx0YWc+KGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpKQogICAg
ICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVNZW1vcnkpKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOwpAQCAt
MzUxLDI3ICs0MTMsMzEgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Ug
a25vdyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0byBjb2RlIHRoYXQgaXMKICAgICAvLyBhbHJl
YWR5IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkg
dGhpcyBtZWFucwogICAgIC8vIHRoYXQgY29kZVB0ciBpcyBpbW1vcnRhbC4KLSAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cikKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBjb2RlUHRy
KQogICAgIHsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsK
ICAgICB9CiAgICAgCi0gICAgLy8gSGVscGVyIGZvciBjcmVhdGluZyBzZWxmLW1hbmFnZWQgY29k
ZSByZWZzIGZyb20gTExJbnQuCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVh
dGVMTEludENvZGVSZWYoT3Bjb2RlSUQgY29kZUlkKTsKLQogICAgIEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
ZXhlY3V0YWJsZU1lbW9yeS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZVB0cjsKICAgICB9CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdnZWRDb2RlKFB0clRhZyBvbGRUYWcsIFB0clRhZyBu
ZXdUYWcpIGNvbnN0CisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8bmV3VGFnPiByZXRhZ2dlZENvZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fY29kZVB0ci50ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8bmV3
VGFnPiByZXRhZ2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jb2RlUHRyLnJl
dGFnZ2VkKG9sZFRhZywgbmV3VGFnKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxuZXdUYWc+KCp0aGlzKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBA
IC0zODEsMjIgKzQ0Nyw0MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVN
ZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKKyAgICBi
b29sIHRyeVRvRGlzYXNzZW1ibGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
ID0gIiIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShyZXRh
Z2dlZENvZGU8RGlzYXNzZW1ibHlQdHJUYWc+KCksIHNpemUoKSwgcHJlZml4LCBvdXQpOworICAg
IH0KICAgICAKLSAgICBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4ID0g
IiIpIGNvbnN0OworICAgIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBjaGFyKiBwcmVmaXgg
PSAiIikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKHJldGFn
Z2VkQ29kZTxEaXNhc3NlbWJseVB0clRhZz4oKSwgc2l6ZSgpLCBwcmVmaXgpOworICAgIH0KICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGRpc2Fzc2VtYmx5KCkgY29uc3Q7Cisg
ICAgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkocmV0YWdnZWRDb2RlPERpc2Fzc2Vt
Ymx5UHRyVGFnPigpLCBzaXplKCkpOworICAgIH0KICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2NvZGVQdHI7IH0KICAgICAKLSAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBtX2NvZGVQdHIuZHVtcFdpdGhOYW1lKCJDb2RlUmVm
Iiwgb3V0KTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1f
Y29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29k
ZVJlZikKKyAgICAgICAgOiBtX2NvZGVQdHIob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSBy
ZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRhZz4oKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVN
ZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICB7IH0KKworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OworCisgICAgdGVtcGxhdGU8UHRyVGFn
PiBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogfTsKIAotaW5saW5lIEZ1bmN0
aW9uUHRyOjpGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQordGVtcGxhdGU8
UHRyVGFnIHRhZz4KK2lubGluZSBGdW5jdGlvblB0cjx0YWc+OjpGdW5jdGlvblB0cihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8dGFnPiBwdHIpCiAgICAgOiBtX3ZhbHVlKHB0ci5leGVjdXRhYmxlQWRk
cmVzcygpKQogewogICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3Zh
bHVlKTsKQEAgLTQwNywxMSArNDk0LDExIEBAIGlubGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25Q
dHIoTWFjcm9Bc3MKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cj4gewotICAgIHR5cGVkZWYgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQ
dHJIYXNoIEhhc2g7Cit0ZW1wbGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+PiB7CisgICAgdHlwZWRlZiBKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g8dGFnPiBIYXNoOwogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiB7IH07Cit0ZW1wbGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0
cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4+IDogcHVibGlj
IEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPj4geyB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM5NSwxMiArMzM5NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGFib3J0
V2l0aFJlYXNvbihyZWFzb24pOwogICAgIH0KIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFk
Q2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1
bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwp
CiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
KCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkp
KSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihNSVBTQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VX
aXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25M
YWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBk
ZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJl
bDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4g
ZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1
bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0
aW9uKCkpOwogICAgIH0KQEAgLTM0MTksNDQgKzM0MjEsNTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRp
b25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsMzIpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
Q29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hP
bkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI8dGFnPikKICAgICB7CiAgICAgICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFi
ZWwpCiAgICAgewogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgwKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQ
YXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lk
KiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9p
ZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25M
YWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1
ZSkKICAgICB7CiAgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJldmVydEp1bXBUb01vdmUoaW5zdHJ1
Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwgaW1tVGVtcFJlZ2lzdGVyLCByZWludGVycHJldF9j
YXN0PGludD4oaW5pdGlhbFZhbHVlKSAmIDB4ZmZmZik7CiAgICAgfQogCi0gICAgc3RhdGljIENv
ZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJl
c3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPikKICAgICB7
CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4o
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0
YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3Ms
IHZvaWQqKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCopCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRl
bXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRh
ZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBA
IC0zNDY4LDcgKzM0NzgsOCBAQCBwcml2YXRlOgogCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZm
ZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQog
ICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDE3ICsyOTgsMTkgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgeyByZXR1cm4gaXNTU0UyUHJl
c2VudCgpOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIHsg
cmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQotICAgIAotICAgIHN0YXRp
YyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+CisgICAgc3Rh
dGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2Fs
bDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGNhbGwuZGF0YUxvY2F0aW9uKCkpWy0xXTsKLSAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihjYWxsLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldCksIENvZGVQdHJU
YWcpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24o
KSkgKyBvZmZzZXQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMg
Ym9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0
YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVz
ID0gMTsKICAgICAgICAgY29uc3QgaW50IG1vZFJNQnl0ZXMgPSAxOwpAQCAtMzE3LDggKzMxOSw5
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2Vt
ZW50U2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0
ZXMpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9j
YXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJl
c3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBj
b25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwogICAgICAgICBjb25zdCBpbnQgbW9kUk1CeXRlcyA9
IDE7CkBAIC0zMjgsOCArMzMxLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodG90YWxCeXRl
cyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAgICByZXR1cm4gbGFiZWwubGFi
ZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9j
YXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQog
ICAgIHsKICAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVzID0gMTsKICAgICAgICAgY29uc3Qg
aW50IG1vZFJNQnl0ZXMgPSAxOwpAQCAtMzM5LDMwICszNDMsMzUgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAg
ICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAot
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNo
KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lk
KiBpbml0aWFsVmFsdWUpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2
b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlv
bkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCByZWcsIHZvaWQqIGluaXRp
YWxWYWx1ZSkKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX2NtcGxf
aXJfZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSksIHJlZyk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCB2
b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
dm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywg
dm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFhZGRyZXNzLm9mZnNl
dCk7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX2NtcGxfaW1fZm9yY2UzMihp
bnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGluaXRpYWxWYWx1ZSksIDAsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIGlu
dDMyX3QgaW5pdGlhbFZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywg
aW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoIWFkZHJlc3Mub2Zm
c2V0KTsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fY21wbF9pbV9mb3JjZTMy
KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgaW5pdGlhbFZhbHVlLCAwLCBh
ZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVt
cGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFi
ZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJl
bGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
Y2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5h
dGlvbikKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0z
NzAsNyArMzc5LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1
ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
RnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0
aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4g
ZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkp
CiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwg
ZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMDMsOCArMTIwMyw5IEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcl9kaXNwOChhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3Qo
dGhpcyk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVM
b2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBh
Y3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+IGRhdGFMYWJlbENvbXBhY3QsIGlu
dDMyX3QgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNDb21wYWN0UHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQodmFsdWUpKTsKICAgICAgICAgQXNzZW1ibGVyVHlwZV9UOjpyZXBhdGNoQ29t
cGFjdChkYXRhTGFiZWxDb21wYWN0LmRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7CkBAIC0zODc5LDEy
ICszODgwLDE0IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChD
b2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQpCiAgICAgewogICAgICAgICBY
ODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSGx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVM
b2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBzdGFydFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAg
c3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsPHN0YXJ0VGFnPiBp
bnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikK
ICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9u
U3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODg0LDkgKzE4ODQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1
cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAg
IHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwp
CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAg
IHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlv
bkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25Q
dHIoWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1S
RVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCkpLCBDb2RlUHRyVGFnKTsKKyAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4oWDg2QXNzZW1ibGVyOjpyZWFkUG9p
bnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSku
ZGF0YUxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICBib29sIGhhdmVTY3JhdGNoUmVnaXN0ZXJG
b3JCbGluZGluZygpIHsgcmV0dXJuIG1fYWxsb3dTY3JhdGNoUmVnaXN0ZXI7IH0KQEAgLTE4OTQs
OCArMTg5NSw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBi
b29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQ
dHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKwor
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRh
Zz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBjb25zdCBpbnQgcmV4Qnl0ZXMgPSAx
OwogICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwpAQCAtMTkwNCw4ICsxOTA2LDkg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1l
bnRTaXplKCkpOwogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRl
cyk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJh
bmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxhYmVsKQor
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8
dGFnPiBzdGFydE9mQnJhbmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFM
YWJlbDMyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBjb25zdCBpbnQgcmV4Qnl0ZXMgPSAx
OwogICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwpAQCAtMTkxNCwzOCArMTkxNyw0
NSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBsYWNl
bWVudFNpemUoKSk7CiAgICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3RhbEJ5
dGVzKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxv
Y2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRy
ZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGxhYmVsKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxhYmVsKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3Rh
cnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFM
YWJlbDMyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhcnRPZkJyYW5jaDMy
V2l0aFBhdGNoT25SZWdpc3RlcihsYWJlbCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lk
IHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVM
b2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIEFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1
ZSkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFi
ZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAg
ICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1
Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzLCBpbnQzMl90IGluaXRp
YWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVy
dEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzLCBpbnQzMl90IGluaXRpYWxWYWx1
ZSkKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdmxfaTMycihp
bnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGluaXRpYWxWYWx1ZSwgc19zY3Jh
dGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNl
bWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3Rh
cnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0
aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJ
RCwgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZl
cnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0
ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNh
bGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRy
VGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRh
Zz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5k
YXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5j
dGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFn
IGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxj
YWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAg
ICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9m
ZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0xOTY2LDcgKzE5NzYsOCBAQCBwcml2
YXRlOgogCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBs
aW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSkKICAgICAgICAgICAgIFg4NkFzc2VtYmxl
cjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoLVJFUEFUQ0hf
T0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCwxOCArMTQ0LDE4IEBAIGJvb2wgaXNTcGVjaWFsR1BSKE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGUoR2VuZXJhdG9yJiYgZ2VuZXJhdGUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29tcGlsZShHZW5lcmF0b3ImJiBnZW5l
cmF0ZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKGppdCk7CiAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RtYXNtIGNvbXBpbGF0aW9uIik7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgInRl
c3RtYXNtIGNvbXBpbGF0aW9uIik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorVCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhl
Y3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9
IHVudGFnQ0Z1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2Fz
dDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKICAgICByZXR1cm4gZnVu
Y3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIHRlc3RQcm9i
ZU1vZGlmaWVzUHJvZ3JhbUNvdW50ZXIoKQogICAgIHVuc2lnbmVkIHByb2JlQ2FsbENvdW50ID0g
MDsKICAgICBib29sIGNvbnRpbnVhdGlvbldhc1JlYWNoZWQgPSBmYWxzZTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb250aW51YXRpb24gPSBjb21waWxlKFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29udGlu
dWF0aW9uID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFZh
bGlkYXRlIHRoYXQgd2UgcmVhY2hlZCB0aGUgY29udGludWF0aW9uLgogICAgICAgICBqaXQucHJv
YmUoWyZdIChQcm9iZTo6Q29udGV4dCYpIHsKICAgICAgICAgICAgIHByb2JlQ2FsbENvdW50Kys7
CkBAIC02MTAsNyArNjEwLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVy
KCkKICAgICAgICAgLy8gV3JpdGUgZXhwZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4K
ICAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAg
ICAgICAgIHByb2JlQ2FsbENvdW50Kys7Ci0gICAgICAgICAgICBjb250ZXh0LmNwdS5wYygpID0g
dW50YWdDb2RlUHRyKGNvbnRpbnVhdGlvbi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklU
Q29kZVB0clRhZyk7CisgICAgICAgICAgICBjb250ZXh0LmNwdS5wYygpID0gdW50YWdDb2RlUHRy
KGNvbnRpbnVhdGlvbi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7
CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBu
ZXZlciBnZXQgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxh
dGlvbi5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLUNvbXBpbGF0aW9uOjpDb21waWxhdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJv
ZHVjdHM+IGJ5cHJvZHVjdHMpCitDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxP
cGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQogICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCiAg
ICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4LDE3ICs0OCwxNyBAQCBjbGFzcyBDb21waWxhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEIzQ29tcGlsYXRpb25QdHJUYWc+LCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4p
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWY7IH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4gY29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2RlKCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8QjNDb21waWxhdGlvblB0clRhZz4gY29kZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJl
ZjsgfQogICAgIAogICAgIENTdHJpbmcgZGlzYXNzZW1ibHkoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVSZWYuZGlzYXNzZW1ibHkoKTsgfQogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBtX2NvZGVSZWY7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25Q
dHJUYWc+IG1fY29kZVJlZjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
bV9ieXByb2R1Y3RzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGls
ZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIENvbXBpbGF0aW9uIGNv
bXBpbGUoUHJvY2VkdXJlJiBwcm9jKQogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAKLSAgICByZXR1cm4gQ29tcGlsYXRp
b24oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAiQjM6OkNvbXBpbGF0
aW9uIiksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9u
KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkIzOjpDb21w
aWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDIwICs0OTksMjAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cioganVt
cFRhYmxlID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKj4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXplb2YoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKSAqIHRhYmxlU2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEp1bXBUYWJsZUNvZGVQdHIgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+OworICAgICAgICAgICAgICAgICAg
ICAgICAgSnVtcFRhYmxlQ29kZVB0cioganVtcFRhYmxlID0gc3RhdGljX2Nhc3Q8SnVtcFRhYmxl
Q29kZVB0cio+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wcm9jKCkuYWRk
RGF0YVNlY3Rpb24oc2l6ZW9mKEp1bXBUYWJsZUNvZGVQdHIpICogdGFibGVTaXplKSk7CisKICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBpbmRleCA9IHBhcmFtc1swXS5ncHIoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgw
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBwb2lzb25TY3JhdGNoID0gcGFyYW1z
LmdwU2NyYXRjaCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBzd2l0Y2hUYWcg
PSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSklUQ29k
ZVBvaXNvbjo6a2V5KCkpLCBwb2lzb25TY3JhdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFibGUpLCBzY3JhdGNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaCwgaW5kZXgsIENDYWxsSGVscGVyczo6dGltZXNQdHIoKSksIHNjcmF0Y2gp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0
Y2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgc3dpdGNoVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIEpTU3dpdGNoUHRy
VGFnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgbGFiZWxzIGFyZSBndWFy
YW50ZWVkIHRvIGJlIHBvcHVsYXRlZCBiZWZvcmUgZWl0aGVyIGxhdGUgcGF0aHMgb3IKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgdGFza3MgcnVuLgpAQCAtNTIxLDE0ICs1MjEsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VuaGFuZGxlZEluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgZmFsbFRocm91Z2ggPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVscy5sYXN0KCksIHN3
aXRjaFRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wVGFibGVD
b2RlUHRyIGZhbGxUaHJvdWdoID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFn
PigqbGFiZWxzLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSB0YWJsZVNpemU7IGktLTspCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganVtcFRhYmxlW2ldID0gZmFsbFRocm91Z2g7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhYmVsSW5kZXggPSAw
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRhYmxlSW5k
ZXggOiBoYW5kbGVkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGp1bXBUYWJsZVt0YWJsZUluZGV4XSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2xh
YmVsSW5kZXgrK10sIHN3aXRjaFRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wVGFibGVbdGFibGVJbmRleF0gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0
Y2hQdHJUYWc+KCpsYWJlbHNbbGFiZWxJbmRleCsrXSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMzA3MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDkgKzEyNSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZVBy
b2MKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotVCBp
bnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
K1QgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBwdHIs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB1bnRhZ0NGdW5jdGlvblB0cihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRh
Zyk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxCM0Nv
bXBpbGF0aW9uUHRyVGFnPihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgVCAoKmZ1bmN0
aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oZXhl
Y3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwogfQpA
QCAtMTMwMzMsOCArMTMwMzMsOCBAQCB2b2lkIHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAg
ICAgICAgICBWZWN0b3I8Qm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBsYWJlbHMgPSBwYXJhbXMu
c3VjY2Vzc29yTGFiZWxzKCk7CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciog
anVtcFRhYmxlID0gYml0d2lzZV9jYXN0PE1hY3JvQXNzZW1ibGVyQ29kZVB0cio+KAotICAgICAg
ICAgICAgICAgIHBhcmFtcy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cikgKiBsYWJlbHMuc2l6ZSgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4qIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2FzdDxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4qPigKKyAgICAgICAgICAg
ICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4pICogbGFiZWxzLnNpemUoKSkpOwogCiAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICBH
UFJSZWcgcG9pc29uU2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CkBAIC0xMzA0MywxMyAr
MTMwNDMsMTIgQEAgdm9pZCB0ZXN0SW50ZXJwcmV0ZXIoKQogICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSklUQ29kZVBvaXNvbjo6a2V5KCkpLCBwb2lzb25T
Y3JhdGNoKTsKICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaCwgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3Jh
dGNoKTsKICAgICAgICAgICAgIGppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIHN3aXRjaFRhZyk7
CisgICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoLCBCM0NvbXBpbGF0aW9uUHRyVGFnKTsKIAog
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgIFsmLCBqdW1wVGFi
bGUsIGxhYmVsc10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGFiZWxzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2ld
LCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW2ldID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KCpsYWJlbHNbaV0pOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICAKQEAgLTEzMjk4LDExICsxMzI5Nywx
MSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFNpbXBsZSgpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgy
KSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0
clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRh
Zz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29t
cGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGls
YXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAog
ICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVsT25lLCAxLCAyKSA9PSAzKTsKICAgICBDSEVDSyhp
bnZva2U8aW50PihsYWJlbFR3bywgMSwgMikgPT0gLTEpOwpAQCAtMTMzMzEsMTEgKzEzMzMwLDEx
IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoTm9FbnRyeVN3aXRjaCgpCiAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihw
cm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRM
YWJlbCgyKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxh
dGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlv
blB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIz
Q29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24i
KTsKIAogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsT25lLCAxLCAyKSwgMyk7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxUd28sIDEsIDIpLCAzKTsKQEAgLTEzNDE4LDExICsx
MzQxNywxMSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocygpCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25l
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2Rl
UHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjND
b21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFRocmVlID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExh
YmVsKDIpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29t
cGlsYXRpb24iKTsKIAogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsT25lLCAxLCAyLCAx
MCksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsVHdvLCAxLCAyLCAxMCksIC0x
KTsKQEAgLTEzNTM1LDExICsxMzUzNCwxMSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21t
b25QYXRoc0FuZE5vCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBq
aXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlw
b2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJl
bFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklU
Q29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFi
ZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVs
VHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50
cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRy
VGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJU
YWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVz
dGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRp
b25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAogICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KGxhYmVsT25lLCAxLCAyLCAxMCwgZmFsc2UpLCAzKTsKICAgICBDSEVDS19FUShpbnZva2U8
aW50PihsYWJlbFR3bywgMSwgMiwgMTAsIGZhbHNlKSwgLTEpOwpAQCAtMTM2MTMsMTAgKzEzNjEy
LDEwIEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoTG9vcCgpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjND
b21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsK
IAogICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVsT25lLCAwKSA9PSAxKTsKICAgICBDSEVDSyhp
bnZva2U8aW50PihsYWJlbE9uZSwgNDIpID09IDQzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NCwxMCArNzQsMTAgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoQ29kZSYg
Y29kZSwgUHJpbgogICAgIGF1dG8gZHVtcEFzbVJhbmdlID0gWyZdIChDQ2FsbEhlbHBlcnM6Okxh
YmVsIHN0YXJ0TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwgZW5kTGFiZWwpIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhcnRMYWJlbC5pc1NldCgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZW5kTGFiZWwuaXNTZXQoKSk7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXJ0TGFiZWwpOwotICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZW5kTGFiZWwpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwotICAgICAgICBkaXNhc3NlbWJsZShzdGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5k
LmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhl
Y3V0YWJsZUFkZHJlc3MoKSksIGFzbVByZWZpeCwgb3V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERp
c2Fzc2VtYmx5UHRyVGFnPihzdGFydExhYmVsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
RGlzYXNzZW1ibHlQdHJUYWc+IGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJs
eVB0clRhZz4oZW5kTGFiZWwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlbmQuZGF0YUxvY2F0
aW9uPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0cl90PigpKTsKKyAg
ICAgICAgZGlzYXNzZW1ibGUoc3RhcnQsIGVuZC5kYXRhTG9jYXRpb248dWludHB0cl90PigpIC0g
c3RhcnQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSwgYXNtUHJlZml4LCBvdXQpOwogICAgIH07
CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ibG9ja3MpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTAsMTMgKzkwLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBp
bGUKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RhaXIgY29tcGlsYXRpb24iKSwgcHJv
Yy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVzdGFpciBjb21waWxhdGlvbiIpLCBwcm9jLnJlbGVh
c2VCeXByb2R1Y3RzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CiBUIGludm9rZShjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NG
dW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFn
KTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyKGNvZGUu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEIzQ29tcGlsYXRpb25QdHJUYWcpOwogICAgIFQg
KCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4u
Lik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4u
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDE0ICs4MTgsMTMgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygp
LT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpKSwKLSAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKGFkZHJl
c3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0VudHJ5UHRyVGFnPihzbG93UGF0aENhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RQ
YXRoQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlu
a0NhbGxQdHJUYWcsICZ2bSk7CiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0gICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVy
IHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CkBAIC04NTUsMTAgKzg1NCw5IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZt
LnRvcENhbGxGcmFtZSk7CiAKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEdl
dHRlclNldHRlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOworICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsKKyAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgdGhpcy0+YXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yKTsKICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvckdldHRlcikKQEAgLTEwMDAsMTIgKzk5OCwxMSBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRp
bmcpIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KT4oYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwog
ICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgY2FsbFRhZykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
UmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFs
bG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CkBAIC0xMDEzLDEyICsx
MDEwLDExIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpPigKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgLyBzaXpl
b2YoSlNWYWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lE
KCkpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bCA9IGppdC5jYWxsKGNhbGxUYWcpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0
eVN0b3JhZ2UsIGNhbGxUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNu
aXBwZXRQYXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMSArNjEsMTAgQEAgcHVibGlj
OgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxGdW5jdGlvblR5cGU+KHN0ZDo6Z2V0PEFy
Z3VtZW50c0luZGV4PihtX2FyZ3VtZW50cykuLi4pOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9mdW5jdGlvbjsKICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKTsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHMobV9yZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAg
aW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JTdHJ1Ywogc3RydWN0IEJ5VmFsSW5m
byB7CiAgICAgQnlWYWxJbmZvKCkgeyB9CiAKLSAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgQ29kZUxvY2F0aW9uSnVtcCBub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkp1bXAg
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBpbnQxNl90IGJhZFR5
cGVKdW1wVG9Eb25lLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9OZXh0SG90UGF0aCwgaW50MTZfdCBy
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBub3RJbmRleEp1bXAsIENvZGVM
b2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4gYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvbkhhbmRsZXIsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBpbnQxNl90IGJhZFR5cGVKdW1w
VG9Eb25lLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9OZXh0SG90UGF0aCwgaW50MTZfdCByZXR1cm5B
ZGRyZXNzVG9TbG93UGF0aCkKICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICwgbm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKICAgICAgICAgLCBiYWRUeXBl
SnVtcChiYWRUeXBlSnVtcCkKQEAgLTI0NCw5ICsyNDQsOSBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsK
ICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwotICAgIENvZGVMb2NhdGlvbkp1
bXAgbm90SW5kZXhKdW1wOwotICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcjsKKyAgICBDb2RlTG9jYXRpb25KdW1w
PEpTRW50cnlQdHJUYWc+IG5vdEluZGV4SnVtcDsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTRW50
cnlQdHJUYWc+IGJhZFR5cGVKdW1wOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IGV4Y2VwdGlvbkhhbmRsZXI7CiAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBj
b2RlLgogICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOwogICAgIGludDE2X3QgYmFkVHlw
ZUp1bXBUb0RvbmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05
NywyNSArOTcsMjUgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbCBDYWxs
TGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0Vu
dHJ5UHRyVGFnPiBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2Fs
bChtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwgUmVndWxhcik7CisgICAgcmV0
dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0
aW9uT3JQYXRjaGFibGVKdW1wLCBSZWd1bGFyKTsKIH0KIAotQ29kZUxvY2F0aW9uSnVtcCBDYWxs
TGlua0luZm86OnBhdGNoYWJsZUp1bXAoKQorQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFn
PiBDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1bXAoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxUeXBlKCkgPT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1w
KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKKyAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxl
SnVtcCk7CiB9CiAKLUNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBDYWxsTGlua0luZm86OmhvdFBh
dGhCZWdpbigpCitDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNFbnRyeVB0clRhZz4gQ2FsbExp
bmtJbmZvOjpob3RQYXRoQmVnaW4oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgp
KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKG1faG90UGF0aEJlZ2luT3JT
bG93UGF0aFN0YXJ0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTRW50
cnlQdHJUYWc+KG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0KTsKIH0KIAotQ29kZUxvY2F0
aW9uTGFiZWwgQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKK0NvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CiAgICAgcmV0dXJuIG1faG90UGF0aEJlZ2luT3JTbG93
UGF0aFN0YXJ0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY1LDkgKzE2
NSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIHNldENhbGxMb2NhdGlvbnMoCi0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwK
LSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAot
ICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIpCisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxl
SnVtcCwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gaG90UGF0aEJl
Z2luT3JTbG93UGF0aFN0YXJ0LAorICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5
UHRyVGFnPiBob3RQYXRoT3RoZXIpCiAgICAgewogICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlv
bk9yUGF0Y2hhYmxlSnVtcCA9IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKICAg
ICAgICAgbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQ
YXRoU3RhcnQ7CkBAIC0xODEsMTIgKzE4MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dT
dHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxSZXR1
cm5Mb2NhdGlvbigpOwotICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCgpOwotICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW4oKTsKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93UGF0aFN0YXJ0KCk7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRy
eVB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKCk7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0Vu
dHJ5UHRyVGFnPiBwYXRjaGFibGVKdW1wKCk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PEpTRW50cnlQdHJUYWc+IGhvdFBhdGhCZWdpbigpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
IGhvdFBhdGhPdGhlcigpCisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4g
aG90UGF0aE90aGVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hvdFBhdGhPdGhlcjsKICAg
ICB9CkBAIC0zMjcsOSArMzI3LDExIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgbV9ob3RQYXRoT3RoZXI7CisgICAgLy8gRklYTUU6IFRoZXNl
IHNob3VsZCBiZSB0YWdnZWQgd2l0aCBKU0ludGVybmFsUHRyVGFnIGluc3RlYWQgb2YgSlNFbnRy
eVRhZy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0
NzEyCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9jYWxsUmV0dXJuTG9j
YXRpb25PclBhdGNoYWJsZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7CisgICAgQ29kZUxvY2F0aW9uTmVhckNh
bGw8SlNFbnRyeVB0clRhZz4gbV9ob3RQYXRoT3RoZXI7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2Vs
bD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RT
ZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZT4gbV9zdHViOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVubGlua2VkQ29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRs
ZXIsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0
clRhZz4ob3BfY2F0Y2gpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKICNl
bHNlCiAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1
Niw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7CiAgICAgICAg
ICAgICAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVy
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9N
QXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwogCiAgICAgICAgICAgICAgICAgc3dp
dGNoIChhY2Nlc3MudHlwZSgpKSB7CkBAIC0yNzgsNyArMjc4LDcgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21B
Y2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nlc3NvckdldHRl
ciA9IGJpdHdpc2VfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oYWNjZXNzLmFzPEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsKICAgICAgICAgICAgICAgICAgICAgZG9tQXR0cmli
dXRlID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuZG9tQXR0cmlidXRlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tQXR0cmlidXRlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5j
cHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBHZXRC
eUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzLAogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLAot
ICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyLAorICAg
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIsCiAgICAg
c3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiAgICAg
OiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCiAgICAgLCBtX2NvbmRpdGlvblNldChjb25k
aXRpb25TZXQpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dChQcmludAogICAgIGlmIChtX2ludHJpbnNpY0Z1bmN0aW9uKQogICAgICAgICBvdXQu
cHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1faW50cmluc2ljRnVuY3Rpb24pOwogICAgIGlmICht
X2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICBvdXQucHJpbnQoIiwgY3VzdG9tYWNjZXNz
b3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDxjb25zdCB2b2lkKj4obV9jdXN0
b21BY2Nlc3NvckdldHRlcikpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGN1c3RvbWFjY2Vzc29y
Z2V0dGVyID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yR2V0dGVyLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKICAgICBpZiAobV9kb21BdHRyaWJ1dGUpIHsKICAgICAgICAgb3V0LnByaW50
KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRlcihtX2RvbUF0dHJpYnV0ZS0+Y2xhc3NJbmZvKSk7
CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0ZS0+ZG9tSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
LAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVsbHB0ciwKICAg
ICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRyLAotICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4g
Y3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxscHRyLAogICAgICAgICBzdGQ6Om9wdGlvbmFsPERP
TUF0dHJpYnV0ZUFubm90YXRpb24+ID0gc3RkOjpudWxsb3B0KTsKIAogICAgIH5HZXRCeUlkVmFy
aWFudCgpOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNh
bGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQog
ICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRy
aW5zaWNGdW5jdGlvbjsgfQogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVy
biBtX2ludHJpbnNpY0Z1bmN0aW9uID8gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50cmluc2ljKCkg
OiBOb0ludHJpbnNpYzsgfQotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFj
Y2Vzc29yR2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsgfQor
ICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CiAgICAgc3RkOjpvcHRpb25h
bDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBt
X2RvbUF0dHJpYnV0ZTsgfQogCiAgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJl
dHVybiBvZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0OyB9CkBAIC04Niw3ICs4Niw3IEBAIHByaXZh
dGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogICAgIEpTRnVuY3Rpb24qIG1faW50cmlu
c2ljRnVuY3Rpb247Ci0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgbV9jdXN0b21BY2Nl
c3NvckdldHRlcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBt
X2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OkdldHRlclNldHRlckFjY2UKIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAg
ICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwK
KyAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RC
YXNlLAogICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmli
dXRlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjUsMTcgKzY1LDE3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nh
c2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQ
cm94eSwgYWRkaXRpb25hbFNldCwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKSk7CiAgICAgcmVzdWx0LT5tX2RvbUF0dHJpYnV0ZSA9IGRvbUF0dHJpYnV0ZTsK
LSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAg
IHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1c3RvbUdldHRlciA/IEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4oY3VzdG9tR2V0dGVyKSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBjdXN0b21TZXR0ZXIsCiAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAg
IEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93
bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxzZSwgbnVsbHB0
ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7Ci0gICAg
cmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsKKyAgICByZXN1
bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0
dGVyU2V0dGVyQWNjZQogICAgIDogQmFzZShvdGhlcikKICAgICAsIG1fY3VzdG9tU2xvdEJhc2Uo
b3RoZXIubV9jdXN0b21TbG90QmFzZSkKIHsKLSAgICBtX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9
IG90aGVyLm1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOworICAgIG1fY3VzdG9tQWNjZXNzb3IgPSBv
dGhlci5tX2N1c3RvbUFjY2Vzc29yOwogICAgIG1fZG9tQXR0cmlidXRlID0gb3RoZXIubV9kb21B
dHRyaWJ1dGU7CiB9CiAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmR1bXBJbXBsKFByCiAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tU2xvdEJhc2Ug
PSAiLCBSYXdQb2ludGVyKGN1c3RvbVNsb3RCYXNlKCkpKTsKICAgICBpZiAoY2FsbExpbmtJbmZv
KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5mbyA9ICIsIFJhd1BvaW50
ZXIoY2FsbExpbmtJbmZvKCkpKTsKLSAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3Nv
ciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICBvdXQucHJp
bnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nv
ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBE
T01KSVQ6OkdldHRlclNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQUikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCiAjaW5jbHVkZSAiUHJveHlhYmxlQWNjZXNzQ2FzZS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTQ4LDE5ICs0OSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRp
dGlvbmFsU2V0LCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBh
ZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwK
ICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6Om9wdGlvbmFsPERPTUF0dHJp
YnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsK
IAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCiAgICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiwKLSAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmMgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKKyAgICAg
ICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBK
U09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwo
UHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIH5HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlKCk7CiAKLSAgICB2b2lkKiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlOyB9CisgICAgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNj
ZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlND
ZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+KTsKQEAgLTY5LDExICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3VzdG9tU2xvdEJhc2U7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci0gICAgdW5pb24gewotICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7Ci0gICAgICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKLSAgICAgICAgdm9pZCogb3BhcXVlOwotICAgIH0gbV9j
dXN0b21BY2Nlc3NvcjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY3VzdG9t
QWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2Rv
bUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9I
YW5kbGVySW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9IYW5kbGVySW5mby5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDE0ICsxMDks
MTMgQEAgc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQgogICAgIH0KIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdm9pZCBp
bml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwpCiAgICAgewogICAgICAg
ICBpbml0aWFsaXplKHVubGlua2VkSW5mbyk7CiAgICAgICAgIG5hdGl2ZUNvZGUgPSBsYWJlbDsK
LSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbmF0aXZlQ29kZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBuYXRpdmVDb2RlOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtD
b2RlSW5saW5lCiAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBh
dGNoLnN0YXJ0LmRhdGFMb2NhdGlvbigpLCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICBB
U1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVy
KTsKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAiSW5s
aW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUpOworICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIE5vUHRyVGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7
CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQordm9pZCBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChTdHJ1CiAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkp
OwogICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCB0YXJnZXQpOwogCi0gICAgRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25z
dGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIklu
bGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nl
c3MuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwogICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CiAgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkq
KTsKLSAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiwg
Q29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXAoU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4p
OwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2Yg
YW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBsYXRmb3Jtcy4gV2hlbiBhZGRpbmcgYSBuZXcgdHlw
ZSBvZiBJQywgaW1wbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SnVtcFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0p1bXBUYWJsZS5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSnVtcFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CiAgICAgICAgIGludDMyX3QgYnJh
bmNoT2Zmc2V0OwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGN0
aU9mZnNldDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0aU9m
ZnNldDsKICNlbmRpZgogICAgIH07CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIE9mZnNldExvY2F0
aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0
VGFibGU7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY3RpRGVm
YXVsdDsgLy8gRklYTUU6IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMu
CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZhdWx0OyAv
LyBGSVhNRTogaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gc3RvcmUgdGhpcy4KICNlbmRp
ZgogCiAgICAgICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZh
bHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBpbmxpbmUgQ29kZUxv
Y2F0aW9uTGFiZWwgY3RpRm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUpCisgICAgICAgIGlubGlu
ZSBDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4gY3RpRm9yVmFsdWUoU3RyaW5nSW1w
bCogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgICAgIFN0cmluZ09m
ZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsK
QEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxpbnQzMl90
PiBicmFuY2hPZmZzZXRzOwogICAgICAgICBpbnQzMl90IG1pbjsKICNpZiBFTkFCTEUoSklUKQot
ICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw+IGN0aU9mZnNldHM7Ci0gICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGN0aURlZmF1bHQ7CisgICAgICAgIFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxKU1N3aXRjaFB0clRhZz4+IGN0aU9mZnNldHM7CisgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZhdWx0OwogI2VuZGlmCiAKICAgICAgICAgaW50MzJf
dCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOwpA
QCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGN0aU9mZnNldHMu
Z3JvdyhicmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBjdGlGb3JWYWx1ZShpbnQzMl90IHZhbHVlKQorICAg
ICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0aUZvclZhbHVl
KGludDMyX3QgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICh2YWx1ZSA+PSBtaW4g
JiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlIC0gbWluKSA8IGN0aU9mZnNldHMuc2l6ZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBjdGlPZmZzZXRzW3ZhbHVlIC0gbWluXTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTQgKzUwLDE0IEBAIHN0
cnVjdCBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1IKICAgICB2b2lkIHVubGluaygp
CiAgICAgewogICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgbWFjaGluZUNvZGVUYXJn
ZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbWFjaGluZUNvZGVUYXJnZXQg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgaWYgKGlz
T25MaXN0KCkpCiAgICAgICAgICAgICByZW1vdmUoKTsKICAgICB9CiAgICAgCiAgICAgV3JpdGVC
YXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBsYXN0
U2VlbkNhbGxlZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFjaGluZUNvZGVUYXJnZXQ7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1hY2hpbmVDb2RlVGFy
Z2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMSArMTk5LDEwIEBAIHZvaWQgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFu
ZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25Q
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKHRhZyk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC0+Y2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25I
YW5kbGVyLCB0YWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhj
ZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhj
ZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAgICB9CkBAIC01MzksNyArNTM4LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVD
b2RlKTsKIAogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0g
b2xkSGFuZGxlcjsKLSAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2Rl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwgRXhjZXB0aW9u
SGFuZGxlclB0clRhZyk7CisgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIubmF0aXZl
Q29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihtYWtl
c2hpZnRDYXRjaEhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGhhbmRsZXJUb1JlZ2lzdGVyLnN0
YXJ0ID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5iaXRzKCk7CiAgICAgICAgICAgICAg
ICAgaGFuZGxlclRvUmVnaXN0ZXIuZW5kID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5i
aXRzKCkgKyAxOwogICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+YXBwZW5kRXhjZXB0aW9uSGFu
ZGxlcihoYW5kbGVyVG9SZWdpc3Rlcik7CkBAIC01NTksOCArNTU4LDggQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJh
dGlvblJlc3VsdDo6R2F2ZVVwOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigpOwotICAgICAgICAKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5kb25lTG9j
YXRpb24oKTsKKwogICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFi
ZWwpOwogCiAgICAgbGlua0J1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbigpKTsKQEAgLTU2OCw4ICs1NjcsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFBvbHltb3JwaGljQWNjZXNzCiAgICAgaWYgKFBvbHltb3JwaGljQWNjZXNzSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgIGRhdGFMb2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2NrLCBzdHViSW5m
by5jb2RlT3JpZ2luKSwgIjogR2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3Ig
IiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwg
TmVhckNvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVCbG9jaywgbGlu
a0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICIlcyIsIHRvQ1N0cmluZygi
QWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwg
IiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1wKGNhc2Vz
KSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAhPSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0K
ICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGUpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdChLaW5kIGtpbmQsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSkKICAgICAgICAg
OiBtX2tpbmQoa2luZCkKICAgICAgICAgLCBtX2NvZGUoY29kZSkKICAgICB7CkBAIC05Myw3ICs5
Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KICAgICAKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
U3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CiAgICAg
CiAgICAgYm9vbCBtYWRlTm9DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IE1hZGVO
b0NoYW5nZXM7IH0KICAgICBib29sIGdhdmVVcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBH
YXZlVXA7IH0KQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAg
IEtpbmQgbV9raW5kOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURldGFpbD4+IG1f
d2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCBi
dWZmZXJlZFN0cnVjdHVyZXM7CiAgICAgCiAgICAgc3RydWN0IHsKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5l
IElDIGZvciAqYnlJZCBjYWNoZXMsIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBm
b3IgJ2luJyBjYWNoZXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUg
SUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZv
ciAnaW4nIGNhY2hlcy4KICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKICAgICAg
ICAgdWludDMyX3QgaW5saW5lU2l6ZTsKICAgICAgICAgaW50MzJfdCBkZWx0YUZyb21TdGFydFRv
U2xvd1BhdGhDYWxsTG9jYXRpb247CkBAIC0xODUsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICB9IHBhdGNoOwogCi0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2Nh
dGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldChwYXRjaC5kZWx0YUZyb21T
dGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9u
ZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5pbmxp
bmVTaXplKTsgfQotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigp
IHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wRm9y
SW4oKQorICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5zdGFydC5jYWxsQXRPZmZzZXQ8SlNJbnRlcm5hbFB0
clRhZz4ocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJu
IHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQ8SlNFbnRyeVB0clRhZz4ocGF0Y2guaW5saW5lU2l6
ZSk7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChwYXRj
aC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7IH0KKyAgICBDb2RlTG9jYXRpb25KdW1w
PEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXBGb3JJbigpCiAgICAgeyAKICAgICAgICAg
QVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6SW4pOwotICAgICAgICByZXR1cm4gcGF0
Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOworICAgICAgICByZXR1cm4gcGF0Y2guc3RhcnQuanVt
cEF0T2Zmc2V0PEpTSW50ZXJuYWxQdHJUYWc+KDApOwogICAgIH0KIAogICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCw3ICs5OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhKiBpdGVtKSB7IHJl
dHVybiBpdGVtLT5ieXRlY29kZUluZGV4OyB9KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZENh
dGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBtYWNoaW5lQ29kZSwg
VmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB2b2lkIGFwcGVuZENh
dGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1h
dD4mJiBhcmd1bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBjYXRjaEVudHJ5cG9pbnRzLmFw
cGVuZChDYXRjaEVudHJ5cG9pbnREYXRhIHsgbWFjaGluZUNvZGUsICBXVEZNb3ZlKGFyZ3VtZW50
Rm9ybWF0cyksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTY1LDExICsxNjUsMTEgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3Nl
bWJseShQcmludAogICAgICAgICBwcmVmaXhCdWZmZXJbaSArIHByZWZpeExlbmd0aF0gPSAnICc7
CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExlbmd0aCArIGFtb3VudE9mTm9kZVdoaXRlU3BhY2Vd
ID0gMDsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcmV2aW91c0xhYmVsKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbmQgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoY3VycmVudExhYmVsKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxE
aXNhc3NlbWJseVB0clRhZz4gc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1i
bHlQdHJUYWc+KHByZXZpb3VzTGFiZWwpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2Vt
Ymx5UHRyVGFnPiBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+
KGN1cnJlbnRMYWJlbCk7CiAgICAgcHJldmlvdXNMYWJlbCA9IGN1cnJlbnRMYWJlbDsKLSAgICBB
U1NFUlQoZW5kLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5leGVjdXRh
YmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwotICAgIGRpc2Fzc2VtYmxlKHN0YXJ0LCBlbmQuZXhl
Y3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpIC0gc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3M8dWlu
dHB0cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0YSgpLCBvdXQpOworICAgIEFTU0VSVChlbmQuZGF0
YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0cl90Pigp
KTsKKyAgICBkaXNhc3NlbWJsZShzdGFydCwgZW5kLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkg
LSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0YSgpLCBv
dXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyAr
MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUQ29k
ZTsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2Ug
REZHIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsOCBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRU
aHVua0dlbmVyYXRvcik7Ci0gICAgUHRyVGFnIG9zckV4aXRUaHVua1RhZyA9IHB0clRhZyhERkdP
U1JFeGl0UHRyVGFnLCB2bSgpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBvc3JFeGl0VGh1bmtM
YWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5yZXRhZ2dlZENvZGUob3NyRXhp
dFRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0VGh1
bmtHZW5lcmF0b3IpOworICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAg
ICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ld
OwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsK
QEAgLTE2Miw4ICsxNjEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFu
ZGxlCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyBjYWxsVGFn
ID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBt
X2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKGNhbGxUYWcpLCBGdW5jdGlvblB0cihs
b29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBjYWxsVGFnKSkpOworICAgICAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxs
ZXJGcmFtZSkpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAg
ICB9CkBAIC0xODIsOCArMTgwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZQogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBv
a2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBQdHJUYWcgY2Fs
bFRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChjYWxsVGFnKSwgRnVuY3Rpb25Q
dHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwgY2FsbFRhZykpKTsKKyAgICAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAKICAgICAgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQpAQCAtMjE3LDE1ICsyMTQsMTQgQEAg
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAKICAgICAg
ICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBwdHJUYWcoU3dp
dGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmlu
ZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNldHMuZ3Jvdyh0YWJsZS5icmFu
Y2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRhYmxlLmN0aU9m
ZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tqXSA9IHRh
YmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6
ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2Vz
W2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUuc3dpdGNoTG9v
a3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxlLm1pbl0gPQotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhd
LCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3
aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2stPmluZGV4XSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNDgsOSArMjQ0LDggQEAgdm9pZCBKSVRDb21waWxl
cjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQdHJUYWcgc3dp
dGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogCi0gICAgICAgIHRh
YmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEu
ZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAgdGFibGUuY3Rp
RGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hl
YWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRh
YmxlLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjU5LDcgKzI1NCw3IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2Fz
ZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUu
ZmluZChteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5k
ZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAgaXRlci0+dmFsdWUuY3RpT2Zmc2V0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRh
cmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc3LDUyICsyNzIs
NTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgaW5mbyA9ICptX2luc1tpXS5tX3N0dWJJbmZvOwogCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVt
cCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFy
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9pbnNbaV0u
bV9qdW1wKTsKICAgICAgICAgaW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIHB0
cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0u
bV9kb25lKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fZG9uZSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bmxpbmVTaXplID49IDApOwogICAgICAgICBpbmZvLnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVT
aXplOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExv
Y2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdl
bmVyYXRvci0+Y2FsbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwo
KSkpOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAg
c3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9y
LT5sYWJlbCgpKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsK
ICAgICB9CiAgICAgCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcs
IHZtKCkpOwotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyKHZtKCktPmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJD
b2RlUHRyVGFnKSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9QdHJU
YWc+KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwogICAgICAgICBpbmZvLnNl
dENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQudGFyZ2V0VG9DaGVjaykp
LAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLmZhc3RD
YWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihyZWNvcmQuc2xvd0NhbGwp
KSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAorICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4ocmVj
b3JkLmZhc3RDYWxsKSk7CiAgICAgfQogICAgIAogICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3Jk
JiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxp
bmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFnKSk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFnKSwKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5jYWxsKSk7CisgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPigpLAorICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHJlY29yZC5zbG93UGF0aCksCisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihy
ZWNvcmQuY2FsbCkpOwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0VGFpbENhbGxSZWNv
cmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWlsQ2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJsZUp1bXApLAot
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCwgTmVhckNv
ZGVQdHJUYWcpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVj
b3JkLmNhbGwpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHJlY29yZC5jYWxsKSk7CiAg
ICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgp
LT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwotICAgIFB0clRh
ZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0oKSk7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5r
LnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5n
ZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gdGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2Rl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhp
dENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VQcm9iZU9TUkV4
aXQoKSkgewpAQCAtMzMyLDggKzMyNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgfQogICAgICAgICBpZiAoaW5mby5tX3JlcGxhY2VtZW50U291
cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNl
bWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLCBOZWFyQ29kZVB0clRhZyksCi0g
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERl
c3RpbmF0aW9uLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50U291cmNlKSwK
KyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8T1NSRXhpdFB0clRhZz4oaW5m
by5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24pKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0zNDEsOSArMzM0LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9qaXRDb2RlLT5v
c3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4aXRT
aXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWZWN0b3I8TGFiZWw+JiBsYWJl
bHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwotICAgICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQq
PiBhZGRyZXNzZXM7CisgICAgICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
SW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQotICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy5h
cHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsc1tqXSwgREZHT1NSRXhpdFB0clRhZyku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obGFiZWxzW2pdKSk7CiAgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFkZE9TUkV4aXRTaXRlKGFkZHJlc3Nlcyk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTM2MCw3ICszNTMsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAgICAvLyBpLmUsIHdlIGV4cGxp
Y2l0bHkgZW1pdHRlZCBhbiBleGNlcHRpb25DaGVjayB0aGF0IHdlIGtub3cgd2lsbCBiZSBjYXVn
aHQgaW4gdGhpcyBtYWNoaW5lIGZyYW1lLgogICAgICAgICAgICAgLy8gSWYgdGhpcyAqaXMgc2V0
KiwgaXQgbWVhbnMgd2Ugd2lsbCBiZSBsYW5kaW5nIGF0IHRoaXMgY29kZSBsb2NhdGlvbiBmcm9t
IGdlbmVyaWNVbndpbmQgZnJvbSBhbgogICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBp
biBhIGNoaWxkIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYXRj
aExhYmVsID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0
aW9uLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNhdGNoTGFiZWwgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRp
b24pOwogICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3RXhjZXB0aW9uSGFuZGxlciA9IG1fZXhj
ZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVy
OwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1fZXhjZXB0aW9uSGFuZGxl
ck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNpdGVJbmRleDsKICAgICAgICAgICAgIG5ld0V4Y2Vw
dGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZS5iaXRzKCk7CkBAIC01MzksMTEgKzUzMiwxMSBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIG1faml0Q29kZS0+c2hy
aW5rVG9GaXQoKTsKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRl
U2hyaW5rKTsKIAotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9u
UHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0
clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgpKSwgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgbGlu
a0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+
KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7CiAKICAgICBk
aXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0
aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgQ29kZVB0
clRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hl
Y2spOwogCiAgICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxK
SVRGaW5hbGl6ZXI+KAogICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VO
b25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKQEAgLTU4Myw3
ICs1NzYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VDYXRjaEVudHJ5cG9pbnQoCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pc0NhdGNoRW50cnlwb2ludCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0ZWQpOyAvLyBB
biBlbnRyeXBvaW50IGlzIHJlYWNoYWJsZSBieSBkZWZpbml0aW9uLgotICAgIG1faml0Q29kZS0+
Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2ludChiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihibG9ja0hlYWQsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRD
b2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGJsb2NrSGVh
ZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhpdDsKIC8vIEV2ZXJ5IENhbGxMaW5rUmVjb3JkIGNv
bnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsIGluc3RydWN0aW9uICYgdGhlIGZ1bmN0aW9u
CiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCB0by4KIHN0cnVjdCBDYWxsTGlua1JlY29y
ZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgOiBt
X2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgIHsKICAgICB9
CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7Ci0gICAgRnVuY3Rpb25QdHIgbV9m
dW5jdGlvbjsKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rpb247CiB9
OwogCiBzdHJ1Y3QgSW5SZWNvcmQgewpAQCAtMTU2LDEwICsxNTYsMTAgQEAgcHVibGljOgogICAg
IH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7Ci0gICAg
ICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0YWcpOwotICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcp
KSk7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0
aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMCw2ICszMTAsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAgICAsIGluZm8o
aW5mbykKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGZhc3RDYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSk7CisgICAgICAgICAgICBBU1NFUlQoc2xvd0NhbGwuaXNGbGFnU2V0KENhbGw6
Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ2FsbCBmYXN0Q2FsbDsKQEAg
LTMyNCw2ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0
aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBDYWxsIGNhbGw7CkBAIC0zMzgsNiArMzQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICwgc2xvd1BhdGgoc2xvd1BhdGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwu
aXNGbGFnU2V0KENhbGw6OlRhaWwpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUGF0
Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotSklURmlu
YWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwg
c3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciB3aXRoQXJpdHlDaGVjaykKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVyKFBsYW4mIHBs
YW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUsIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBs
aW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCiAgICAgOiBGaW5hbGl6ZXIocGxhbikKICAgICAsIG1faml0Q29kZShXVEZNb3ZlKGpp
dENvZGUpKQogICAgICwgbV9saW5rQnVmZmVyKFdURk1vdmUobGlua0J1ZmZlcikpCkBAIC01Niw3
ICs1Niw3IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9
IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIENvZGVQdHJUYWcsICJERkcgSklUIGNv
ZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxv
Y2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVy
LCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkp
OwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoY29kZVJlZiwgY29kZVJlZi5jb2Rl
KCkpOwogICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNv
cHlSZWYoKSk7CkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5
VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKLSAgICAgICAgRklO
QUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgQ29kZVB0clRhZywgIkRGRyBKSVQgY29kZSBm
b3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywg
SklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1f
bGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSkuZGF0YSgpKSwKICAgICAgICAgbV93aXRoQXJpdHlDaGVjayk7CiAgICAgbV9wbGFuLmNvZGVC
bG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMjMwNzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
Y2xhc3MgSklURmluYWxpemVyIDogcHVibGljIEZpbmFsaXplciB7CiBwdWJsaWM6Ci0gICAgSklU
RmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpFbXB0eVZhbHVlKSk7CisgICAgSklURmlu
YWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVy
KCk7CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgb3ZlcnJpZGU7CkBAIC00Nyw3ICs0Nyw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVmPEpJVENvZGU+IG1faml0Q29kZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbV9saW5rQnVmZmVyOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNl
bWVudC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0p1bXBSZXBsYWNlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEp1bXBSZXBsYWNlbWVudCB7CiBw
dWJsaWM6Ci0gICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSwgQ29k
ZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNvdXJjZSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NS
RXhpdFB0clRhZz4gZGVzdGluYXRpb24pCiAgICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAg
ICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgewpAQCAtNDQsOCArNDQsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UuZGF0YUxvY2F0aW9uKCk7IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBt
X3NvdXJjZTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rlc3RpbmF0aW9uOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc291cmNlOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPE9TUkV4aXRQdHJUYWc+IG1fZGVzdGluYXRpb247CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiB9
OwogCiBzdHJ1Y3QgQ2FsbERPTUdldHRlckRhdGEgewotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyIHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgY29uc3QgRE9NSklU
OjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51bGxwdHIgfTsKICAgICBET01KSVQ6OkNhbGxET01H
ZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgdXNpbmcgdGFyZ2V0IFBDICVwLlxu
IiwgdGFyZ2V0UEMpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKLSAgICAqYml0d2lz
ZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBDb2Rl
UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgKmJpdHdpc2VfY2FzdDx2
b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHJldGFnQ29kZVB0cih0YXJnZXRQQywgSlNFbnRyeVB0clRh
ZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogCiAgICAgUmVnaXN0ZXIqIHBpdm90ID0g
c2NyYXRjaCArIDIgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKICAgICAKQEAg
LTMzNyw3ICszMzcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLXZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFy
ZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKIHsgCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpG
VExKSVQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKQEAgLTczLDcgKzc0LDcgQEAgaW5saW5lIHVuc2lnbmVk
IGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSQogc3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewog
ICAgIC8vIFdlIHVzZSB0aGlzIHdoZW4gZG9pbmcgT1NSIGVudHJ5IGF0IGNhdGNoLiBXZSBwcm92
ZSB0aGUgYXJndW1lbnRzCiAgICAgLy8gYXJlIG9mIHRoZSBleHBlY3RlZCB0eXBlIGJlZm9yZSBl
bnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgotICAgIHZvaWQqIG1hY2hpbmVDb2RlOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZTsK
ICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4OwogfTsKQEAgLTgzLDkgKzg0LDkgQEAgc3RydWN0IENhdGNoRW50cnlwb2lu
dERhdGEgewogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVkLCB3ZSBjYW4n
dCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi12
b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9CitpbmxpbmUg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JF
bnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsg
fQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkw
LDExICszOTAsMTAgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjbwog
CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5l
Q29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9j
a0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxv
Y2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBj
b2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEFT
U0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRh
ZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tGb3JFeGl0LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dl
ZChsb2NhdGlvblRhZywgQ29kZVB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
dm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgICAgIE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwpAQCAtNzkxLDcgKzc5MCw3IEBAIHN0YXRpYyB2b2lk
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGUKIAogI2lmIFVTRShQT0lOVEVSX1BST0ZJTElO
RykKICAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAg
ICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0
clRhZz4obmV3RW50cnlTUCkpOworICAgICAgICAgICAganVtcFRhcmdldCA9IHJldGFnQ29kZVB0
cihqdW1wVGFyZ2V0LCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKICAgICAgICAgfQpAQCAtODY2LDcg
Kzg2NSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXgKICAgICB9
CiAKICAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7Ci0gICAg
Y29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyKGp1bXBUYXJnZXQsIENvZGVQdHJUYWcpOworICAg
IGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsK
IH0KIAogc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90
IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKQEAgLTkzMSw5ICs5MzAsOSBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0OjpnZXRQYXRjaGFiCiAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wKEFzc2VtYmxlckxhYmVsKG1fcGF0Y2hhYmxlQ29kZU9mZnNldCkpOwog
fQogCi1Db2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2spIGNvbnN0CitDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBkZmdDb2Rl
QmxvY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGZnQ29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRhdGFBZGRyZXNzQXRPZmZzZXQobV9wYXRjaGFibGVDb2RlT2Zmc2V0KSk7
CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4odGFnQ29kZVB0
cjxKU0ludGVybmFsUHRyVGFnPihkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGF0YUFkZHJlc3NB
dE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKSk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6Y29y
cmVjdEp1bXAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk5NSwxOSArOTk0LDE4IEBAIHZv
aWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRz
RHVyaW5nRXhpdCksIGRlY2x0eXBlKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmlu
Z0V4aXQpPjo6dmFsdWUsICJXZSBhc3N1bWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUg
c2lnbmF0dXJlIGJlbG93LiIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk+KAogICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIEdQUkluZm86
OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoREZH
T3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5tb3Zl
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvbmVk
QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25DcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0LCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKICAg
ICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwpAQCAtMTA0
Niw3ICsxMDQ0LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeAog
ICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkKICAgICAgICAgcmVjb3Zl
cnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4
aXQubV9yZWNvdmVyeUluZGV4XTsKIAotICAgIFB0clRhZyBleGl0VGFnID0gcHRyVGFnKERGR09T
UkV4aXRQdHJUYWcsIHZtKTsKICAgICB7CiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJs
b2NrKTsKIApAQCAtMTA3NywxNCArMTA3NCwxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhp
dDo6Y29tcGlsZU9TUkV4CiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2Rl
QmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAg
ICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwg
T3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLCBl
eGl0VGFnLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcsCiAgICAgICAg
ICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0g
JXMiLAogICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3Jp
Z2luKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2lu
ZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgdG9DU3Ry
aW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwogICAg
IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUucmV0YWdn
ZWRDb2RlKGV4aXRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxv
Y2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAKICAgICB2
bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDkgKzE0NSw5IEBAIHN0cnVjdCBPU1JFeGl0IDog
cHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKICAgICBzdGF0aWMgdm9pZCBleGVj
dXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwogCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJv
YmxlbS8zOTQ5ODI0ND4uCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0IHsgMCB9
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIAogICAgIFJlZlB0cjxPU1JFeGl0
U3RhdGU+IGV4aXRTdGF0ZTsKICAgICAKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdHJ1Y3QgT1NSRXhp
dCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICB2b2lkIHNldFBhdGNoYWJsZUNvZGVPZmZz
ZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKLSAgICBDb2RlTG9jYXRp
b25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7CisgICAgQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayopIGNvbnN0OwogICAgIHZvaWQgY29ycmVjdEp1bXAoTGlua0J1ZmZlciYpOwogCiAg
ICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw4IEBAIHZvaWQgaGFuZGxlRXhp
dENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
LSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
UHRyKHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gaml0Lmp1bXAoKTsKICAgICAK
ICAgICB0b29GZXdGYWlscy5saW5rKCZqaXQpOwpAQCAtMTg4LDcgKzE4Nyw3IEBAIHZvaWQgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Y2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAg
IGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2Fs
bEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogCi0gICAgICAgICAgICAgICAganVtcFRh
cmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uKCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogCkBAIC0yNzYsOSArMjc1LDggQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKEND
YWxsSGVscGVycwogI2VuZGlmCiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4ob3duZXIpOwotICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
REZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbk9TUldyaXRl
QmFycmllciwgdGFnKSksIHNjcmF0Y2gpOwotICAgIGppdC5jYWxsKHNjcmF0Y2gsIHRhZyk7Cisg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gpOwor
ICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CiAKICNpZiBDUFUoWDg2KQog
ICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yodm9pZCop
ICogNCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0zMTksMTIg
KzMxNywxMCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4
aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9PSBjb2RlQmxv
Y2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4
aXQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQo
ZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1h
cCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNv
ZGVMb2NhdGlvbik7CiAKLSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZVB0clRh
ZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgbmV4dFB0clRhZ0lE
KCkpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQobG9jYXRp
b25UYWcsIGV4aXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCoganVtcFRhcmdl
dCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAg
ICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQg
Y2FsbEZyYW1lRm9yQ2F0Y2guCkBAIC0zMzIsNyArMzI4LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIH0KICAgICAKICAgICBqaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKLSAg
ICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwgZXhpdFRhZyk7CisgICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDQsNyArMzA0NCw3IEBAIHN0YXRpYyBjaGFyKiB0
aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJPU1Ig
ZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sgIiwg
UmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAodm9pZCogYWRk
cmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywg
b3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdp
bkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNo
YXIqPihhZGRyZXNzLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRy
eVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMzE2Niw3ICszMTY2LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENv
bW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9z
ckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAgIGlm
ICghYWRkcmVzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJldGFnQ29k
ZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhl
YykpOworICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJU
YWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTIgKzE2
MiwxMSBAQCBjbGFzcyBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lCiAgICAgOiBw
dWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3Vs
dFR5cGU+IHsKIHB1YmxpYzoKICAgICBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0
aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCisgICAgICAgIEp1bXBUeXBlIGZyb20s
IFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAgICAgICAgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1
aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAg
ICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3Vs
dFR5cGU+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXF1
aXJlbWVudCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pCi0gICAgICAgICwgbV9jYWxsVGFnKGNhbGxUYWcpCiAgICAg
ewogICAgIH0KIApAQCAtMTc2LDcgKzE3NSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHVucGFj
a0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8QXJn
dW1lbnRzSW5kZXguLi4+KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKLSAgICAg
ICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwg
bV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1l
bnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGpp
dC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1f
cmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOwogICAg
ICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwogICAgIH0KIApAQCAtMTg2LDM2ICsxODUsMTYgQEAg
cHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3Vt
ZW50czsKLSAgICBQdHJUYWcgbV9jYWxsVGFnOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVt
cFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRv
cj4gc2xvd1BhdGhDYWxsKAotICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCi0gICAgU3BpbGxSZWdpc3Rl
cnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1aXJlbWVudCwK
LSAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLXsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRzLi4uPj4o
Ci0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIHNwaWxsTW9kZSwgcmVxdWly
ZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSnVt
cFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRv
cj4gc2xvd1BhdGhDYWxsKAogICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
LCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LAogICAgIFJlc3VsdFR5cGUg
cmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewogICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwg
RnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudHMuLi4+PigKLSAgICAgICAgZnJvbSwg
aml0LCBmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50LCBy
ZXN1bHQsIGFyZ3VtZW50cy4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0
eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQ
YXRoQ2FsbCgKLSAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlv
blR5cGUgZnVuY3Rpb24sIFB0clRhZyBjYWxsVGFnLAotICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQotewotICAgIHJldHVybiBzbG93UGF0aENhbGwoCi0gICAg
ICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25D
aGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworICAg
ICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50LCByZXN1bHQs
IGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFt
ZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KQEAgLTIyNCw3ICsyMDMsNyBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yCiAgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwg
Q0Z1bmN0aW9uUHRyVGFnLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6
Q2hlY2tOZWVkZWQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVl
ZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBU
eXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHVuc2ln
bmVkIG51bWJlck9mQXNzaWdubWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogCiAg
ICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksIEdldFByb3BlcnR5
UHRyVGFnLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dl
dEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAgICAgc3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1Jl
cXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgCkBAIC0y
MDcsNyArMjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaAog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKICAgICBhdXRv
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRhZywKKyAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAg
ICAgRG9udFNwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAg
ICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRp
ZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgCkBAIC0yNTA2LDcgKzI1MDYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCiAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjU2Miw3
ICsyNTYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFnLAorICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2Rl
KTsKQEAgLTI2MTQsNyArMjYxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOwpAQCAtMjc3Myw3ICsyNzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5vZGUtPm9wKCkgPT0gUHV0
QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCksCi0gICAgICAgICAgICAgICAgICAgIFB1
dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVn
KSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
dmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTI4NTcsNyArMjg1Nyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5vcCgpID09IFB1
dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QpLAot
ICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVB0clRhZywgTm9SZXN1bHQsIGJhc2VSZWcs
IHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MzIsOCArMzkzMiw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZShtX2ppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmls
aW5nKTsKLSAgICBQdHJUYWcgbWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbWF0aElD
LT5pbnN0cnVjdGlvbigpKTsKLQogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAg
QVNTRVJUKCFhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKIApA
QCAtMzk2Miw5ICszOTYwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhO
b2RlKgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYWRkSUNHZW5lcmF0aW9uU3Rh
dGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRp
b25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fRUpKTWljPihyZXBhdGNoaW5nRnVuY3Rpb24pLCBtYXRoSUNUYWcsIHJlc3VsdFJl
Z3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hp
bmdGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBp
bm5lclJpZ2h0UmVncyk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRS
ZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CiAKICAgICAgICAgICAgIHNpbGVu
dEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBA
IC0zOTkzLDcgKzM5OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5v
ZGUqCiAgICAgICAgIH0KIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5n
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgIH0KIApAQCAtNDYzOCw4ICs0NjM2LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogCiAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdl
bmVyYXRlSW5saW5lKG1faml0LCAqaWNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVtaXRQcm9maWxp
bmcpOwotICAgIFB0clRhZyBtYXRoSUNUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBtYXRoSUMt
Pmluc3RydWN0aW9uKCkpOwotCiAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICBB
U1NFUlQoIWljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOwogCkBAIC00
NjU4LDkgKzQ2NTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUq
CiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwogCiAgICAgICAgICAgICBpZiAo
aWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAg
ICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiksIG1hdGhJQ1Rh
ZywgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwg
cmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRS
ZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVn
cywgY2hpbGRSZWdzKTsKIAogICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxhbnMpOwogICAg
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTQ2ODEsNyArNDY3Nyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAgfSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIGNoaWxkUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgfQog
CkBAIC05MDAwLDYgKzg5OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERP
TShOb2RlCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKICAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZWludGVycHJldF9j
YXN0PHZvaWQqPihzaWduYXR1cmUtPnVuc2FmZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9uUHRyVGFnKTsK
ICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykg
ewogICAgIGNhc2UgMToKQEAgLTkwMjQsNyArOTAyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDYWxsRE9NR2V0dGUKIHsKICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0
KiBzbmlwcGV0ID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+c25pcHBldDsKICAgICBpZiAo
IXNuaXBwZXQpIHsKLSAgICAgICAgYXV0byogZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRh
dGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNz
b3JHZXR0ZXI7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAK
QEAgLTkwMzUsNyArOTAzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9N
R2V0dGUKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRpb25fRUpJPihD
Q2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxs
RE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIG1faml0LnN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9qaXQudm0oKS0+dG9wQ2FsbEZyYW1l
KTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnROb2RlLT5vcmln
aW4uc2VtYW50aWMpOwotICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKGdldHRlcik7CisgICAgICAg
IG1faml0LmFwcGVuZENhbGwoZ2V0dGVyLnJldGFnZ2VkPENGdW5jdGlvblB0clRhZz4oKSk7CiAg
ICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKIAogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwpAQCAtMTAyMjIsOCArMTAyMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0U3dpdGNoSW50SnVtcCgKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG1faml0Lnhv
cjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gpOwogI2VuZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0
clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLSAgICBtX2ppdC5qdW1wKHNjcmF0Y2gs
IHRhZyk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7CiAgICAgZGF0
YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKIH0KIApAQCAtMTAyNDksOCArMTAyNDUsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAKICAgICAgICAgdmFsdWUu
dXNlKCk7CiAKLSAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1faml0LmNvZGVCbG9j
aygpLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0
clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CiAgICAgICAgIGF1
dG8gbm90SW50MzIgPSBtX2ppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7CiAgICAgICAg
IGVtaXRTd2l0Y2hJbnRKdW1wKGRhdGEsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gs
IHNjcmF0Y2gyKTsKICAgICAgICAgbm90SW50MzIubGluaygmbV9qaXQpOwpAQCAtMTAyNTksNyAr
MTAyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwg
c2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0gICAgICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgdGFn
KTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7CiAgICAgICAg
IG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTEwNTE2LDE2ICsxMDUxMCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAgICAgIH0KICAgICAgICAgdG90YWxMZW5ndGggKz0g
c3RyaW5nLT5sZW5ndGgoKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byogY29kZUJsb2NrID0gbV9q
aXQuY29kZUJsb2NrKCk7CisKICAgICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVu
Z3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsK
LSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBQdHJUYWcgdGFnID0g
cHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgb3BlcmF0aW9uU3dpdGNo
U3RyaW5nLCBzdHJpbmcsIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRl
eCksIHN0cmluZyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIG1f
aml0Lmp1bXAoc3RyaW5nLCB0YWcpOworICAgICAgICBtX2ppdC5qdW1wKHN0cmluZywgSlNTd2l0
Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTA1NTgsMTUgKzEw
NTQ5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICBl
bWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSgKICAgICAgICAgZGF0YSwgY2FzZXMsIDAsIDAs
IGNhc2VzLnNpemUoKSwgc3RyaW5nLCBsZW5ndGhHUFIsIHRlbXBHUFIsIDAsIGZhbHNlKTsKICAg
ICAKLSAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKLQogICAgIHNsb3dDYXNlcy5saW5rKCZtX2pp
dCk7CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RyaW5nKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIG1faml0Lmp1bXAoc3RyaW5n
LCB0YWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0
YSogZGF0YSkKQEAgLTEyNzEzLDcgKzEyNzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUhhc0luZGV4ZWRQcgogICAgIH0KICAgICB9CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlCeUludCwgSGFzUHJvcGVydHlQdHJUYWcsIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIs
IHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSkpOworICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BS
LCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKIAog
ICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEyNzgx
LDcgKzEyNzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYQog
CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgR2V0UHJvcGVy
dHlQdHJUYWcsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHBy
b3BlcnR5R1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBD
Q2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUikpKTsKIAogICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CiAjZW5kaWYKQEAgLTEyODg5LDcgKzEyODc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKIAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENh
bGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgUHV0
UHJvcGVydHlQdHJUYWcsIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAorICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAKICAgICBtX2pp
dC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjMwNzM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MzEsMzAgKzkzMSwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjplbmFibGVfaWZfdDwK
ICAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwKICAgICBK
SVRDb21waWxlcjo6Q2FsbD4KLSAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQotICAg
IHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgdGFnLCByZXN1
bHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lIFJlc3VsdFJlZ1R5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RkOjplbmFibGVfaWZf
dDwKLSAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwKLSAg
ICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3Vs
dCwgYXJncy4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0Ci0gICAg
ICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZhbHVlLAotICAgIEpJVENv
bXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFB0clRhZyB0YWcsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZywgYXJncy4uLik7Ci0gICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBBcmcsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05
NjQsMTcgKzk0NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxs
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmcgYXJnLCBBcmdzLi4uIGFyZ3Mp
CiAgICAgewotICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIENGdW5jdGlv
blB0clRhZywgYXJnLCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0g
ICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJ
VENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIFB0clRhZyB0YWcsIE5vUmVzdWx0VGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgewotICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0YWcpOworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmcsIGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05ODMsMTcgKzk1NCw4IEBAIHB1YmxpYzoK
ICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIE5vUmVzdWx0LCBh
cmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlPgot
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRp
b24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcpCi0gICAgewotICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOwotICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9w
ZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRp
b24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGU+CkBAIC0x
MDAyLDcgKzk2NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxs
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcpOworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPigpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogI3VuZGVmIEZJUlNUX0FSR1VNRU5UX1RZUEUKQEAg
LTEwMzksNjIgKzEwMDIsNTYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJlc3VsdHMsIGFu
ZCBvcHRpb25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBleGNlcHRpb24u
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0
LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAg
ICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIHJl
dHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrV2l0
aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oZnVuY3Rpb24p
OwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKSAmJiAocmVzdWx0ICE9IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
IGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0KQorCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNl
dFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHQpOwotICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0
MikKICAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1
bmN0aW9uLCB0YWcpOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHQxLCByZXN1bHQy
KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFw
cGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQxLCBHUFJSZWcgcmVzdWx0MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0
UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdDEsIHJlc3VsdDIpOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQorCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQogICAg
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHJlc3VsdFJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVu
ZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5j
dGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHRSZWdzKTsKLSAgICB9CisKICNpZiBDUFUoWDg2
KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJl
c3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5m
c3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3Vs
dCk7CkBAIC0xMTAyLDI2ICsxMDU5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQogI2VsaWYgQ1BVKEFSTSkgJiYgIUNQVShBUk1fSEFSREZQKQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlk
RlBSUmVnKQogICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihyZXN1bHQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgICAgICBy
ZXR1cm4gY2FsbDsKICAgICB9CiAjZWxzZSAvLyBDUFUoWDg2XzY0KSB8fCAoQ1BVKEFSTSkgJiYg
Q1BVKEFSTV9IQVJERlApKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlk
RlBSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2VuZGlmCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdCk7Ci0gICAgfQogCiAg
ICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBG
UFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAgICBqaXQucHJv
YmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsIHZtKTsKLSAgICBQdHJUYWcgb3NyRXhpdFRodW5r
VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgb3NyRXhpdFRodW5rVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9T
UiBleGl0IHRodW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
TWFjcm9Bc3NlbWJsZXIgaml0OwogCkBAIC04Myw4ICs4Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCi0gICAgUHRyVGFnIGNh
bGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwog
ICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTEwMSwxNyArOTks
MTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogI2VuZGlmCiAg
ICAgfQogCi0gICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0t
Pm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pKTsK
KyAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhp
dEp1bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0LCBjYWxs
VGFnKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4oT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpKTsKIAotICAgIFB0clRhZyBv
c3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JFeGl0VGh1bmtUYWcsICJERkcgT1NSIGV4
aXQgZ2VuZXJhdGlvbiB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRyKTsKIApAQCAt
MTQ5LDkgKzE0Niw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXIK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAKLSAgICBQdHJUYWcgb3NyRW50cnlUaHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0
clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBvc3JFbnRyeVRodW5r
VGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZW50cnkgdGh1bmsiKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBWTTsK
IAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtH
ZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JF
eGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJldmlz
aW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjRE
aXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50
U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNo
YXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBBNjRET3Bjb2RlIGFybTY0T3Bj
b2RlOwogCi0gICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IHJlbW92ZUNvZGVQdHJUYWc8dWludDMy
X3QqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHVpbnQzMl90KiBjdXJyZW50
UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDMyX3QqPigpOwogICAg
IHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgd2hpbGUgKGJ5dGVDb3VudCkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12
N0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0
IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBz
aXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAg
IEFSTXY3RE9wY29kZSBhcm1PcGNvZGU7CiAKLSAgICB1aW50MTZfdCogY3VycmVudFBDID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpJn4xKTsKKyAgICB1aW50MTZfdCogY3VycmVudFBDID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
b2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkmfjEpOwogICAgIHVpbnQxNl90KiBl
bmRQQyA9IGN1cnJlbnRQQyArIChzaXplIC8gc2l6ZW9mKHVpbnQxNl90KSk7CiAKICAgICB3aGls
ZSAoY3VycmVudFBDIDwgZW5kUEMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDEyICszNywxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9p
ZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVf
dCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCit2b2lkIGRpc2Fz
c2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNv
ZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
CiB7CiAgICAgaWYgKHRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgb3V0LnByaW50ZigiJXNkaXNhc3NlbWJseSBu
b3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSArIHNpemUp
OworICAgIG91dC5wcmludGYoIiVzZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2Ug
JXAuLi4lcFxuIiwgcHJlZml4LCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwg
Y29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6ZSk7CiB9CiAK
IG5hbWVzcGFjZSB7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
Y2hhciogaGVhZGVyIHsgbnVsbHB0ciB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVJl
ZjsKICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICBjb25zdCBjaGFyKiBwcmVmaXggeyBudWxs
cHRyIH07CiB9OwpAQCAtMTI4LDcgKzEyOCw3IEBAIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciYg
YXN5bmNocm9ub3VzRGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiB2b2lkIGRpc2Fzc2Vt
YmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVm
aXgpCisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUmVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciog
cHJlZml4KQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2sgPSBz
dGQ6Om1ha2VfdW5pcXVlPERpc2Fzc2VtYmx5VGFzaz4oKTsKICAgICB0YXNrLT5oZWFkZXIgPSBz
dHJkdXAoaGVhZGVyLmRhdGEoKSk7IC8vIFl1Y2shIFdlIG5lZWQgdGhpcyBiZWNhdXNlIENTdHJp
bmcgZG9lcyByYWN5IHJlZmNvdW50aW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE5ICsyNiwyMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgIlB0clRhZy5oIgogI2luY2x1ZGUgPGZ1
bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOwotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwordGVtcGxhdGU8UHRyVGFnPiBj
bGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjsKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi1ib29sIHRyeVRv
RGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBj
aGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29uc3Qg
Y2hhciogcHJlZml4LCBQcmludFN0cmVhbSYpOwogI2Vsc2UKLWlubGluZSBib29sIHRyeVRvRGlz
YXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFy
KiwgUHJpbnRTdHJlYW0mKQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFy
KiwgUHJpbnRTdHJlYW0mKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2LDEyICs0Nywx
MiBAQCBpbmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvCiAKIC8vIFByaW50
cyBlaXRoZXIgdGhlIGRpc2Fzc2VtYmx5LCBvciBhIGxpbmUgb2YgdGV4dCBpbmRpY2F0aW5nIHRo
YXQgZGlzYXNzZW1ibHkgZmFpbGVkIGFuZAogLy8gdGhlIHJhbmdlIG9mIG1hY2hpbmUgY29kZSBh
ZGRyZXNzZXMuCi12b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYs
IHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKK3ZvaWQgZGlz
YXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYs
IHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKIAogLy8gQXN5
bmNocm9ub3VzIGRpc2Fzc2VtYmx5LiBUaGlzIGhhcHBlbnMgb24gYW5vdGhlciB0aHJlYWQsIGFu
ZCBjYWxscyB0aGUgcHJvdmlkZWQKIC8vIGNhbGxiYWNrIHdoZW4gdGhlIGRpc2Fzc2VtYmx5IGlz
IGRvbmUuCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmlu
ZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBzaXplX3QsIGNvbnN0IGNo
YXIqIHByZWZpeCk7CisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVm
aXgpOwogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3Nl
bWJseSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4
NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywxNyArMzMsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVh
bSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIHVkX3QgZGlzYXNzZW1i
bGVyOwogICAgIHVkX2luaXQoJmRpc2Fzc2VtYmxlcik7Ci0gICAgdWRfc2V0X2lucHV0X2J1ZmZl
cigmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVuc2lnbmVkIGNoYXIq
PigpLCBzaXplKTsKKyAgICB1ZF9zZXRfaW5wdXRfYnVmZmVyKCZkaXNhc3NlbWJsZXIsIGNvZGVQ
dHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1bnNpZ25lZCBjaGFyKj4oKSwgc2l6ZSk7CiAj
aWYgQ1BVKFg4Nl82NCkKICAgICB1ZF9zZXRfbW9kZSgmZGlzYXNzZW1ibGVyLCA2NCk7CiAjZWxz
ZQogICAgIHVkX3NldF9tb2RlKCZkaXNhc3NlbWJsZXIsIDMyKTsKICNlbmRpZgotICAgIHVkX3Nl
dF9wYygmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4o
KSk7CisgICAgdWRfc2V0X3BjKCZkaXNhc3NlbWJsZXIsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwogICAgIHVkX3NldF9zeW50YXgoJmRpc2Fzc2VtYmxl
ciwgVURfU1lOX0FUVCk7CiAgICAgCiAgICAgdWludDY0X3QgY3VycmVudFBDID0gZGlzYXNzZW1i
bGVyLnBjOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZE
aXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNz
ZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDExICszMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShVRElTODYp
CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0KTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciog
cHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKIAogI2Vsc2UgLy8gVVNFKFVESVM4NikKIAotaW5s
aW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7IHJldHVybiBmYWxz
ZTsgfQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhcios
IFByaW50U3RyZWFtJikgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8vIFVTRShVRElTODYp
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1i
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L1g4NkRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2Vt
YmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQ
dHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7
CiAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHBy
ZWZpeCwgb3V0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEyICsxMzQsMTEgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0g
aml0LmNhbGwoY2FsbFRhZyk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsK
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpKTsKICAgICAgICAgfSk7CiAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwpAQCAtMTUzLDkgKzE1Miw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYg
c3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3Jp
Z2luTWFwcGluZygpKQogICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0
ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1
ZmZlcikpOwogCi0gICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFnKEZUTENvZGVQdHJUYWcsIGNv
ZGVCbG9jayk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVs
KDApLCBlbnRyeVRhZyk7Ci0gICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBsYWJlbC5leGVj
dXRhYmxlQWRkcmVzczxHZW5lcmF0ZWRGdW5jdGlvbj4oKTsKKyAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
ci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwo
MCkpOworICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gbGFiZWw7CiAgICAgc3RhdGUuaml0
Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9kdWN0
cygpKTsKIAogICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGgubV9lbnRyeXBvaW50SW5k
ZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsKQEAgLTE2Myw3ICsxNjEsNyBAQCB2b2lkIGNvbXBp
bGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9p
bnRJbmRleCA9IHBhaXIua2V5OwogICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50
Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07
CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hcHBlbmRDYXRjaEVudHJ5cG9pbnQoCi0g
ICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxp
bmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKGVudHJ5cG9p
bnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdU
Rk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0
LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRl
eCkpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOwogICAgIH0KICAgICBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBAIEV4Y2VwdGlvblRhcmdldDo6fkV4
Y2VwdGlvblRhcmdldCgpCiB7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvblRhcmdl
dDo6bGFiZWwoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgUHRyVGFnIGhhbmRsZXJUYWcpCitDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBFeGNlcHRpb25UYXJnZXQ6Omxh
YmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgaWYgKG1faXNEZWZhdWx0SGFuZGxl
cikKLSAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigqbV9kZWZhdWx0SGFuZGxl
ciwgaGFuZGxlclRhZyk7Ci0gICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2hhbmRs
ZS0+bGFiZWwsIGhhbmRsZXJUYWcpOworICAgICAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCptX2RlZmF1bHRIYW5kbGVyKTsKKyAgICByZXR1
cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG1faGFuZGxl
LT5sYWJlbCk7CiB9CiAKIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRpb25UYXJn
ZXQ6Omp1bXBzKENDYWxsSGVscGVycyYgaml0KQpAQCAtNTAsMTMgKzUwLDEzIEBAIEJveDxDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRpb25UYXIKICAgICAgICAgQm94PENDYWxsSGVscGVy
czo6TGFiZWw+IGRlZmF1bHRIYW5kbGVyID0gbV9kZWZhdWx0SGFuZGxlcjsKICAgICAgICAgaml0
LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtCdWZmZXIubG9j
YXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpKTsKKyAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCpkZWZhdWx0SGFuZGxlcikpOwogICAgICAgICAgICAg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9
IG1faGFuZGxlOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
KnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwsIERGR09TUkV4aXRQ
dHJUYWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mPE9TUkV4aXRQdHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsKICAgICAgICAg
ICAgIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+RXhjZXB0aW9uVGFyZ2V0KCk7
CiAKICAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2luZywgYnV0IG5vdCBh
bnkgc29vbmVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtCdWZmZXImLCBQdHJU
YWcgaGFuZGxlclRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gbGFiZWwoTGlua0J1ZmZlciYpOwogCiAgICAgLy8gT3IsIHlvdSBjYW4gZ2V0IGEgSnVt
cExpc3QgYXQgYW55IHRpbWUuIEFueXRoaW5nIHlvdSBhZGQgdG8gdGhpcyBKdW1wTGlzdCB3aWxs
IGJlIGxpbmtlZCB0bwogICAgIC8vIHRoZSB0YXJnZXQncyBsYWJlbC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
IAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlvbikoRXhlY1N0YXRlKik7CisvLyBQb2ludHMgdG8g
YSBmdW5jdGlvbiBvZiBwcm90b3R5cGU6IEVuY29kZWRKU1ZhbHVlICgqKShFeGVjU3RhdGUqKS4K
K3VzaW5nIEdlbmVyYXRlZEZ1bmN0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz47CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICB9CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5p
dGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29kZSkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIz
Q29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZSkKIHsKICAgICBtX2IzQ29kZSA9IGIz
Q29kZTsKIH0KQEAgLTYxLDE3ICs2MSwxNyBAQCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVCM0J5
cHJvZHVjdHMoc3RkCiAgICAgbV9iM0J5cHJvZHVjdHMgPSBXVEZNb3ZlKGJ5cHJvZHVjdHMpOwog
fQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyIGFkZHJl
c3MpCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGFkZHJlc3MpCiB7CiAgICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFkZHJlc3M7CiB9
CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYg
ZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludCkKIHsKICAgICBtX2FyaXR5Q2hlY2tF
bnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjph
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQorSklUQ29kZTo6Q29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBh
cml0eUNoZWNrKQogewogICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgewogICAgIGNhc2UgQXJpdHlD
aGVja05vdFJlcXVpcmVkOgpAQCAtODAsMTggKzgwLDE2IEBAIEpJVENvZGU6OkNvZGVQdHIgSklU
Q29kZTo6YWRkcmVzc0ZvckNhbGwKICAgICAgICAgcmV0dXJuIG1fYXJpdHlDaGVja0VudHJ5cG9p
bnQuY29kZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBDb2RlUHRyKCk7CisgICAgcmV0dXJuIENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsK
IH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zm
c2V0KQogewotICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpICsgb2Zmc2V0OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2FkZHJlc3NGb3JDYWxs
LmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwogICAgIGlmICghb2Zmc2V0KQogICAg
ICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpOwogCi0gICAg
Y2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1fYWRkcmVzc0Zv
ckNhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgcmV0dXJuIHRhZ0Nv
ZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVQdHJUYWcpOworICAgIGNoYXIq
IGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9yQ2FsbC51bnRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVybiB0YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGV4
ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENv
ZGUuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMTcgKzQ0LDE3IEBAIHB1YmxpYzoKICAg
ICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKIAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNh
bGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwogICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCog
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlkZTsKICAgICB1bnNpZ25l
ZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIG92ZXJyaWRlOwogICAgIHNpemVfdCBz
aXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKikgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQjND
b2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgaW5pdGlhbGl6ZUIzQnlwcm9k
dWN0cyhzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+KTsKLSAgICB2b2lkIGlu
aXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyKTsKLSAgICB2b2lkIGluaXRpYWxpemVBcml0
eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9y
Q2FsbChDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIGluaXRpYWxpemVBcml0eUNo
ZWNrRW50cnlwb2ludChDb2RlUmVmPEpTRW50cnlQdHJUYWc+KTsKICAgICAKICAgICB2b2lkIHZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIG92ZXJyaWRlOwogCkBA
IC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBvdmVycmlkZTsKIAotICAgIENvZGVSZWYgYjND
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KKyAgICBDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGIzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYjNDb2RlOyB9CiAgICAgCiAgICAgSklUQ29k
ZSogZnRsKCkgb3ZlcnJpZGU7CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVy
cmlkZTsKQEAgLTc0LDEwICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0ZToKLSAgICBD
b2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7Ci0gICAgQ29kZVJlZiBtX2IzQ29kZTsKKyAgICBDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IG1fYWRkcmVzc0ZvckNhbGw7CisgICAgQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBtX2IzQ29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVj
dHM+IG1fYjNCeXByb2R1Y3RzOwotICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsK
KyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDE0ICs3MywxNCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogewog
ICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0
aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBiM0NvZGVSZWYgPQotICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwg
KmIzQ29kZUxpbmtCdWZmZXIsIENvZGVQdHJUYWcsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKICAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVy
Ci0gICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50
TGlua0J1ZmZlciwgQ29kZVB0clRhZywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgorICAgICAg
ICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZm
ZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9y
ICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5j
dGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKyAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29k
ZSgpKTsKIAogICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKICAgICBq
aXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNw
cAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5
U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIExhenlTbG93UGF0
aDo6fkxhenlTbG93UGF0aCgpCiB9CiAKIHZvaWQgTGF6eVNsb3dQYXRoOjppbml0aWFsaXplKAot
ICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZG9u
ZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgQ29kZUxvY2F0
aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBkb25lLAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9y
PiBnZW5lcmF0b3IKICAgICApCiB7CkBAIC02MywxNCArNjMsMTMgQEAgdm9pZCBMYXp5U2xvd1Bh
dGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogCiAgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBh
cmFtcyk7CiAKLSAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRo
UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPih0aGlzKSk7CiAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKLSAgICBs
aW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9kb25lLnJldGFnZ2VkKHNsb3dQYXRo
VGFnLCBOZWFyQ29kZVB0clRhZykpOworICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1
bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKLSAgICAgICAgbGlua0J1
ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldC5yZXRhZ2dlZChzbG93
UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKTsKLSAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZP
Uihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIHNsb3dQYXRoVGFnLCAiTGF6eSBzbG93IHBhdGggY2Fs
bCBzdHViIik7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNl
cHRpb25UYXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywg
bGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsICJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0
dWIiKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChtX3BhdGNoYWJsZUp1bXAu
cmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJDb2RlUHRyVGFnKSwgQ29kZUxvY2F0aW9uTGFiZWwo
bV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi5jb2RlKCkpKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
YXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwyNyArNjksMjkg
QEAgcHVibGljOgogICAgIH5MYXp5U2xvd1BhdGgoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgK
LSAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bCBkb25lLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBDb2RlTG9jYXRpb25KdW1wPEpT
SW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGRvbmUsCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+IGV4Y2VwdGlvblRhcmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
CiAgICAgICAgIENhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+CiAgICAgICAgICk7CiAK
LSAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGNoYWJsZUp1bXA7IH0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lKCkgY29uc3QgeyByZXR1
cm4gbV9kb25lOyB9CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRj
aGFibGVKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9wYXRjaGFibGVKdW1wOyB9CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9uZTsg
fQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV91c2VkUmVnaXN0ZXJzOyB9CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4OyB9CiAKICAgICB2b2lkIGdlbmVyYXRlKENvZGVC
bG9jayopOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVy
biBtX3N0dWI7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KIAogcHJpdmF0ZToKLSAgICBDb2Rl
TG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rv
bmU7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7CisgICAgQ29kZUxv
Y2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXA7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHRhZ2dlZCB3aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5zdGVhZCBv
ZiBKU0VudHJ5VGFnLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODQ3MTIKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2RvbmU7
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbV9leGNlcHRp
b25UYXJnZXQ7CiAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgIENhbGxTaXRl
SW5kZXggbV9jYWxsU2l0ZUluZGV4OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3N0dWI7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX3N0dWI7
CiAgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaAkocmV2aXNpb24g
MjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudFR5cGVzPgogUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcigKLSAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRU
eXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgVk0mIHZtLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJn
dW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3Jl
YXRlR2VuZXJhdG9yKAogICAgICAgICBbPSwgJnZtXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlT
bG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxNSArMTQwLDEz
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKLSAgICAgICAgICAg
IFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lE
KCkpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0
LmNhbGwoY2FsbFRhZyk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5
Q2hlY2sgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgICAgICAgICBhdXRvIG5v
RXhjZXB0aW9uID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFs
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
OwogICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKLSAgICAgICAgICAgIFB0clRhZyBsb29rdXBUYWcgPSBwdHJUYWcoRlRMT3BlcmF0
aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbChs
b29rdXBUYWcpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNl
cHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICAgICAgICAg
IG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAKQEAgLTE3MiwxNCArMTcwLDEzIEBAIHZvaWQgbGlu
ayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgRnVuY3Rpb25QdHIoY29kZUJsb2Nr
LT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIGNhbGxUYWcpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRy
KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOwotICAg
ICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0u
Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5
Rml4dXBQdHJUYWcsICZ2bSksIE5lYXJDb2RlUHRyVGFnKSkpOwotICAgICAgICAgICAgbGlua0J1
ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBDb2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgbGlua0J1ZmZl
ci0+bGluayhjYWxsQXJpdHlDaGVjaywgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb2Rl
QmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjaykpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhj
YWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wcywgc3RhdGUuZ2Vu
ZXJhdGVkRnVuY3Rpb24pOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQdHJUYWcgZW50
cnlUYWcgPSBwdHJUYWcoRlRMQ29kZVB0clRhZywgY29kZUJsb2NrKTsKLSAgICAgICAgc3RhdGUu
aml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihy
ZXRhZ0NvZGVQdHI8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uLCBlbnRyeVRhZywgQ29k
ZVB0clRhZykpKTsKKworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0Zv
ckNhbGwoc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMTk4LDkgKzE5NSw5IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlv
bikpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXAsIHN0YXRlLmdlbmVy
YXRlZEZ1bmN0aW9uKTsKIAotICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVz
c0ZvckNhbGwobGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGFydCwgQ29kZVB0clRhZykpOworICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwobGlua0J1ZmZlci0+
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGFydCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsMTkgKzI4NiwxNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGhyb3dU
YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCB0aHJvd0NhbGwgPSBqaXQuY2FsbCh0aHJv
d1RhZyk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCB0aHJvd0NhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBQdHJUYWcg
bG9va3VwVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9uSGFu
ZGxlckNhbGwgPSBqaXQuY2FsbChsb29rdXBUYWcpOworICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAg
ICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0aHJvd0NhbGwsIEZ1bmN0aW9u
UHRyKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCB0aHJvd1RhZykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRpb25IYW5k
bGVyQ2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFt
ZSwgbG9va3VwVGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7
CkBAIC0zNjUsNyArMzYzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIu
bG9jYXRpb25PZigqZXhjZXB0aW9uSGFuZGxlciwgRXhjZXB0aW9uSGFuZGxlclB0clRhZykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigqZXhjZXB0aW9uSGFuZGxlcikpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwpAQCAtNzE3MCwxNSArNzE2OCwxMyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5r
VGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0
cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dD
YWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCkBAIC03MzE4LDkgKzczMTQsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hhYmxlSnVtcExvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBhdGNoYWJsZUp1bXApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGgsIFNsb3dQYXRoUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBwYXRjaGFibGVKdW1wTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4ocGF0Y2hhYmxlSnVtcCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRy
eVB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNF
bnRyeVB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxs
TG9jYXRpb25zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1w
TG9jYXRpb24sCkBAIC03MzY3LDEzICs3MzYzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRy
eVB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNF
bnRyeVB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIHNsb3dQYXRoTG9jYXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKQEAgLTc0OTIsMTUgKzc0ODgsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNvZGVQdHJUYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+KGxpbmtDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0
clRhZz4oZmFzdENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKICAgICB9CkBAIC03NjM3LDkgKzc2MzEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0g
KHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNh
bGxlZSwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50
R1BSMCwgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNhbGxlZSkpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApOworICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIE9wZXJhdGlv
blB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVj
aywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKICAgICAgICAgICAgICAgICB9Owog
CkBAIC03NzkzLDE1ICs3Nzg2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBs
aW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxp
bmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hl
Y2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
RW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC03OTc4LDkgKzc5
NjksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0
b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMoKSk7CiAKICAgICAgICAgICAgICAgICBhdXRvIGNh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAg
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNhbGxlZSwgdGFnKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgdGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KGNhbGxlZSkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjApOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25Bcmd1bWVudEdQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlI
ZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lk
dGgpKTsKICAgICAgICAgICAgICAgICB9OwogCkBAIC04MDc4LDE1ICs4MDY4LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFn
LCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlu
a0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxs
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1
ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4o
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pOwogCkBAIC04MTY4LDkgKzgxNTYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJlcXVpcmVkQnl0ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCByZXF1aXJlZEJ5dGVzKTsKICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAg
ICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJ
RCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNhbGxFdmFsLCB0YWcpKSwgR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIHRhZyk7CisgICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGxFdmFsKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5v
bkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBB
c3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZh
ckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKQEAgLTg4NTIsOCArODgzOSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEp1
bXBSZXBsYWNlbWVudCBqdW1wUmVwbGFjZW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihs
YWJlbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PE9TUkV4aXRQdHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdENvZGUtPmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRzLmFwcGVuZChqdW1wUmVwbGFjZW1lbnQp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtOTY5NywxOCAr
OTY4NCwxOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGp1bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oanVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IGlubGluZVNpemUgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGRvbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihkb25lKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6
ZSA+PSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0Vu
dHJ5UHRyVGFnPihzbG93UGF0aENhbGwpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFy
dCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHNs
b3dQYXRoQmVnaW4pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTkxOCw3ICsxMTkwNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXMgPSBkb21KSVQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBkb21KSVRQYXJhbXMpOwogCiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9Q
dHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsK
QEAgLTExOTU3LDYgKzExOTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAg
ICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZWludGVy
cHJldF9jYXN0PHZvaWQqPihzaWduYXR1cmUtPnVuc2FmZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9uUHRy
VGFnKTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAg
ICAgICBjYXNlIDE6CiAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VQPihzaWduYXR1cmUtPnVu
c2FmZUZ1bmN0aW9uKSksIG1fY2FsbEZyYW1lLCBvcGVyYW5kc1swXSk7CkBAIC0xMTk4Myw3ICsx
MTk3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgZ2V0dGVyIGRvZXMg
bm90IGhhdmUgY29kZSBzZXR0aW5nIHRvcENhbGxGcmFtZSwgQXMgaXMgdGhlIHNhbWUgdG8gSUMs
IHdlIHNob3VsZCBzZXQgdG9wQ2FsbEZyYW1lIGluIGNhbGxlciBzaWRlLgogICAgICAgICAgICAg
bV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxG
cmFtZSkpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAgICAgICAgICAgICB2bUNhbGwo
SW50NjQsIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3Rv
bUFjY2Vzc29yR2V0dGVyKSwKKyAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVy
LnJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Q0Z1bmN0aW9uUHRyVGFnPigpKSwKICAgICAgICAg
ICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0
LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJE
YXRhKCktPmlkZW50aWZpZXJOdW1iZXJdKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xMzk4OSwyNiArMTM5NzcsMjEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCB2bSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvckp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRD
VElTdHViKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5
U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywg
TmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhnZW5lcmF0b3JKdW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5nZXRDVElTdHViKGxh
enlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xvd1BhdGggPSBzdGQ6Om1ha2VfdW5p
cXVlPExhenlTbG93UGF0aD4oKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
dHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNl
X2Nhc3Q8UHRyVGFnPihsYXp5U2xvd1BhdGguZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxv
Y2F0aW9uSnVtcCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwYXRjaGFibGVKdW1wLCBzbG93UGF0aFRhZykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGxpbmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRp
b25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihwYXRjaGFibGVKdW1wKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihk
b25lLCBzbG93UGF0aFRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4oZG9uZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9y
aWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoLT5pbml0aWFsaXplKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFBhdGNoYWJsZUp1bXAsIGxpbmtl
ZERvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
VGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyLCBzbG93UGF0aFRhZyksIHVzZWRSZWdpc3RlcnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5s
YWJlbChsaW5rQnVmZmVyKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsU2l0ZUluZGV4LCBnZW5lcmF0b3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdID0gV1RGTW92ZShsYXp5U2xvd1BhdGgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwOCw3ICsxMDgsNyBAQCBPU1JFeGl0OjpPU1JFeGl0KAogewogfQog
Ci1Db2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJs
b2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0CitDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJU
YWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxv
Y2spIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKGZ0bENvZGVCbG9jayk7CiAgICAgcmV0dXJu
IG1fcGF0Y2hhYmxlSnVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOSwxMiArMTE5LDEyIEBAIHN0cnVjdCBPU1JF
eGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICBPU1JFeGl0KE9TUkV4aXREZXNjcmlw
dG9yKiwgRXhpdEtpbmQsIENvZGVPcmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlLCBib29sIHdhc0hvaXN0ZWQpOwogCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1fZGVz
Y3JpcHRvcjsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAgICAgLy8gVGhpcyB0ZWxscyB1
cyB3aGVyZSB0byBwbGFjZSBhIGp1bXAuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBtX3BhdGNoYWJs
ZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJs
ZUp1bXA7CiAgICAgVmVjdG9yPEIzOjpWYWx1ZVJlcD4gbV92YWx1ZVJlcHM7CiAKLSAgICBDb2Rl
TG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxv
Y2spIGNvbnN0OworICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gY29kZUxv
Y2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CiAgICAgdm9p
ZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKQogICAgIHsKICAgICAgICAgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVx
dWVudEV4aXRTaXRlKHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0RnJvbUZUTCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZp
c2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBj
b21waWxlUmVjb3ZlcnkoCiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAotICAgIHVuc2ln
bmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgUHRyVGFnIGV4aXRTaXRlVGFnKQorICAgIHVuc2lnbmVkIGV4aXRJ
RCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICAvLyBUaGlzIGNvZGUgcmVxdWlyZXMgZnJhbWVQb2ludGVyUmVnaXN0
ZXIgaXMgdGhlIHNhbWUgYXMgY2FsbEZyYW1lUmVnaXN0ZXIKICAgICBzdGF0aWNfYXNzZXJ0KE1h
Y3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciA9PSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgIk1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciBhbmQgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIgbXVzdCBiZSB0aGUgc2FtZSIpOwpAQCAtMzM4LDkgKzMzOCw4
IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpPigKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9u
QXJndW1lbnRzKSk7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25NYXRlcmlhbGl6ZU9i
amVjdEluT1NSLCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBqaXQu
Y2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCB0YWcpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBt
YXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpOwogCiAgICAgICAg
ICAgICAvLyBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCkBAIC0zNjcsOSArMzY2
LDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwKICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXph
dGlvbikpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFs
aXphdGlvbkFyZ3VtZW50cykpOwotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJh
dGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0
SW5PU1IsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBv
cHVsYXRlT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgfQogCiAgICAg
Ly8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0
IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KQEAgLTQ5Niw3ICs0OTQsNyBAQCBz
dGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
Y29kZUJsb2NrKTsKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAg
IHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRp
b25zOjp2ZXJib3NlRlRMT1NSRXhpdCgpLAotICAgICAgICBwYXRjaEJ1ZmZlciwgZXhpdFNpdGVU
YWcsCisgICAgICAgIHBhdGNoQnVmZmVyLCBPU1JFeGl0UHRyVGFnLAogICAgICAgICAiRlRMIE9T
UiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAg
ICAgICAgZXhpdElELCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKICAgICAg
ICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9j
aykuZGF0YSgpLApAQCAtNTQ0LDEzICs1NDIsMTIgQEAgZXh0ZXJuICJDIiB2b2lkKiBjb21waWxl
RlRMT1NSRXhpdChFeGVjUwogCiAgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMs
IGV4aXQubV9jb2RlT3JpZ2luKTsKIAotICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExP
U1JFeGl0UHRyVGFnLCAmZXhpdCk7Ci0gICAgY29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBl
eGl0LCAmdm0sIGNvZGVCbG9jaywgdGh1bmtUYWcpOworICAgIGNvbXBpbGVTdHViKGV4aXRJRCwg
aml0Q29kZSwgZXhpdCwgJnZtLCBjb2RlQmxvY2spOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKAotICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2Nr
KSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBO
ZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNv
ZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJUYWc+KGV4aXQubV9jb2RlLmNv
ZGUoKSkpOwogICAgIAotICAgIHJldHVybiBleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUodGh1bmtU
YWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
IHJldHVybiBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0SGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NywxNCArNDcsMTMgQEAgdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRlJgog
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICBb
c2VsZiwganVtcCwgbXlMYWJlbCwgY29tcGlsYXRpb24sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgIHNlbGYtPmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxv
Y2F0aW9uSnVtcChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoanVtcCkpOworICAgICAgICAgICAgc2Vs
Zi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJU
YWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihqdW1wKSk7CiAKLSAg
ICAgICAgICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExPU1JFeGl0UHRyVGFnLCAmdm0p
OwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9q
dW1wLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIob3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFy
Q29kZVB0clRhZykpKTsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVu
a1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKICAgICAgICAgICAgIGlmIChjb21waWxhdGlvbikKLSAgICAgICAgICAgICAgICBj
b21waWxhdGlvbi0+YWRkT1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobXlMYWJl
bCkuZXhlY3V0YWJsZUFkZHJlc3MoKSB9KTsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+
YWRkT1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
bXlMYWJlbCkgfSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
MSw4ICs1ODEsNyBAQCBleHRlcm4gIkMiIHZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUCiAg
ICAgTGF6eVNsb3dQYXRoJiBsYXp5U2xvd1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tp
bmRleF07CiAgICAgbGF6eVNsb3dQYXRoLmdlbmVyYXRlKGNvZGVCbG9jayk7CiAKLSAgICBQdHJU
YWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPigmbGF6eVNsb3dQYXRoKSk7Ci0gICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHVi
KCkucmV0YWdnZWRDb2RlKHNsb3dQYXRoVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gbGF6eVNsb3dQYXRoLnN0dWIoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6
c2NoZWR1bGUKICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9IGhh
bmRsZXI7CiAgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUlu
ZGV4LmJpdHMoKTsKICAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0
ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZl
Q29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGhhbmRsZS0+bGFi
ZWwpOwogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRs
ZXIobmV3SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMjUgKzExMywyMiBAQCBTbG93UGF0aENhbGxDb250
ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4CiAgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogfQogCi1TbG93UGF0aENhbGxLZXkgU2xvd1BhdGhDYWxsQ29udGV4dDo6
a2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdAorU2xvd1BhdGhDYWxsS2V5IFNs
b3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBjYWxsVGFyZ2V0KSBjb25zdAogewogICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkobV90
aHVua1NhdmVTZXQsIGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1fb2Zmc2V0KTsK
IH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwg
RnVuY3Rpb25QdHIgY2FsbFRhcmdldCkKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0
OjptYWtlQ2FsbChWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCkKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IGNhbGxUYXJnZXQuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKLSAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihleGVjdXRhYmxlQWRkcmVzcyk7
Ci0gICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtleVdpdGhUYXJnZXQoZXhlY3V0YWJsZUFkZHJl
c3MpOwotICAgIFB0clRhZyBjYWxsVGFnID0ga2V5LmNhbGxQdHJUYWcoKTsKLSAgICBTbG93UGF0
aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoY2FsbFRhZyksIGtleSk7Cisg
ICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCk7CisgICAg
U2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyksIGtleSk7CiAKICAgICBtX2ppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW3Jlc3VsdCwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRodW5rID0KKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdGh1bmsgPQogICAgICAgICAgICAgICAgIHZtLmZ0bFRodW5rcy0+Z2V0U2xv
d1BhdGhDYWxsVGh1bmsocmVzdWx0LmtleSgpKTsKIAotICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKHJlc3VsdC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVsKHRodW5rLmNvZGUoKSkpOworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlc3VsdC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVs
PE9wZXJhdGlvblB0clRhZz4odGh1bmsucmV0YWdnZWRDb2RlPE9wZXJhdGlvblB0clRhZz4oKSkp
OwogICAgICAgICB9KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogVGhlIGNhbGwg
dGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBiZSBsaW5rZWQgYnkgdGhlIEpJ
VCB1c2luZyBhZGRMaW5rVGFzaygpLAogICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHlv
dSB0byBsaW5rIGl0IHlvdXJzZWxmLgotICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbChWTSYsIEZ1
bmN0aW9uUHRyIGNhbGxUYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbChWTSYsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCk7CiAKIHByaXZhdGU6Ci0gICAg
U2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7Cisg
ICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBjYWxsVGFyZ2V0KSBjb25zdDsKICAgICAKICAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50
UmVnaXN0ZXJzOwogICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7
CkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwg
R1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgU2xvd1BhdGhDYWxsIGNhbGw7CiAgICAgewpA
QCAtOTQsNyArOTQsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAg
ICBWTSYgdm0sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMm
IGppdCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAotICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHRHUFIsCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAogICAg
IEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7
CkBAIC0xMTAsNyArMTEwLDcgQEAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9y
aWdpbgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFNsb3dQYXRoQ2FsbCBj
YWxsT3BlcmF0aW9uKAogICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbigKICAgICAgICAgc3RhdGUudm0oKSwg
dXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwgY29k
ZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCShyZXZpc2lvbiAyMzA3
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIHZvaWQgU2xvd1BhdGhDYWxsS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7Ci0gICAgb3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywg
Iiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1f
Y2FsbFRhcmdldCksICIsIGFyZ3VtZW50UmVnaXN0ZXJzID0gIiwgbV9hcmd1bWVudFJlZ2lzdGVy
cywgIj4iKTsKKyAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0
ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgY2FsbFRhcmdldCA9ICIsIFJhd1BvaW50
ZXIobV9jYWxsVGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLCAiLCBhcmd1bWVudFJlZ2lzdGVy
cyA9ICIsIG1fYXJndW1lbnRSZWdpc3RlcnMsICI+Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxs
S2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGxLZXkuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLSNpbmNsdWRlICJQdHJUYWcuaCIKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00NSwyOSArNDUsMjcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogY2xhc3MgU2xvd1BhdGhDYWxsS2V5IHsKIHB1YmxpYzoK
ICAgICBTbG93UGF0aENhbGxLZXkoKQotICAgICAgICA6IG1fY2FsbFRhcmdldCgwKQotICAgICAg
ICAsIG1fb2Zmc2V0KDApCisgICAgICAgIDogbV9vZmZzZXQoMCkKICAgICB7CiAgICAgfQogICAg
IAogICAgIFNsb3dQYXRoQ2FsbEtleSgKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwg
dm9pZCogY2FsbFRhcmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIGFyZ3VtZW50UmVnaXN0ZXJzLAor
ICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgc2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGNhbGxUYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiBhcmd1bWVudFJlZ2lzdGVycywKICAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCkKICAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoc2V0KQot
ICAgICAgICAsIG1fY2FsbFRhcmdldChjYWxsVGFyZ2V0KQorICAgICAgICAsIG1fY2FsbFRhcmdl
dChjYWxsVGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkKICAgICAgICAgLCBtX2Fy
Z3VtZW50UmVnaXN0ZXJzKGFyZ3VtZW50UmVnaXN0ZXJzKQogICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKICAgICB7CiAgICAgfQogICAgIAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9Ci0gICAgdm9pZCogY2Fs
bFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQorICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdl
dDsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBhcmd1bWVudFJlZ2lzdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRSZWdpc3RlcnM7IH0KICAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICAKLSAgICBTbG93UGF0aENhbGxLZXkgd2l0aENh
bGxUYXJnZXQodm9pZCogY2FsbFRhcmdldCkKKyAgICBTbG93UGF0aENhbGxLZXkgd2l0aENhbGxU
YXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNhbGxUYXJnZXQsIENGdW5jdGlvblB0clRhZyk7CiAg
ICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNlZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0
LCBhcmd1bWVudFJlZ2lzdGVycygpLCBvZmZzZXQoKSk7CiAgICAgfQogICAgIApAQCAtNzgsMTQg
Kzc2LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRh
ZykKICAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCi0g
ICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCiAgICAgICAgICwgbV9vZmZzZXQoMCkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCiAgICAgICAg
IDogbV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpEZWxldGVkVmFsdWUpCi0gICAgICAgICwg
bV9jYWxsVGFyZ2V0KDApCiAgICAgICAgICwgbV9vZmZzZXQoMCkKICAgICB7CiAgICAgfQpAQCAt
MTAxLDE5ICs5NywxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQdHJIYXNo
PHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQpICsgbV9vZmZzZXQ7Ci0gICAgfQotCi0gICAgUHRy
VGFnIGNhbGxQdHJUYWcoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
aW5jbHVkZSBmYWN0b3JzIHdoaWNoIGFyZSBpbnZhcmlhbnQgZm9yIHRoZSBzYW1lIHNsb3cgcGF0
aCBzaXRlLgotICAgICAgICAvLyBtX2NhbGxUYXJnZXQgY2FuIHZhcnkgYW5kIHNob3VsZCBiZSBl
eGNsdWRlZC4KLSAgICAgICAgcmV0dXJuIHB0clRhZyhGVExTbG93UGF0aFB0clRhZywgbV91c2Vk
UmVnaXN0ZXJzLmhhc2goKSwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm4gbV91c2VkUmVnaXN0
ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fY2FsbFRhcmdldC5leGVjdXRhYmxl
QWRkcmVzcygpKSArIG1fb2Zmc2V0OwogICAgIH0KIAogcHJpdmF0ZToKICAgICBSZWdpc3RlclNl
dCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgdm9pZCogbV9jYWxsVGFyZ2V0OworICAgIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4gbV9jYWxsVGFyZ2V0OwogICAgIFJlZ2lzdGVyU2V0IG1fYXJn
dW1lbnRSZWdpc3RlcnM7CiAgICAgcHRyZGlmZl90IG1fb2Zmc2V0OwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQyLDcgKzQyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogU3RhdGU6OlN0YXRlKEdy
YXBoJiBncmFwaCkKICAgICA6IGdyYXBoKGdyYXBoKQotICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24o
MCkKIHsKICAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKSB7CiAgICAgY2FzZSBGVExNb2Rl
OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRq
dXN0bWVudFJlcXVpcgogICAgIE5vdE5lZWRlZCAKIH07CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1
bmN0aW9uUHRyIGdlbmVyYXRpb25GdW5jdGlvbiwgUHRyVGFnIHJlc3VsdFRodW5rVGFnLCBjb25z
dCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tB
ZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkK
K3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyaWNHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGdlbmVyYXRpb25GdW5jdGlvbiwgUHRyVGFnIHJlc3VsdFRhZywgY29uc3QgY2hhciog
bmFtZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVu
dFJlcXVpcmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCiB7CiAgICAg
QXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRyKTsKIApAQCAtODYsOSArODYsOCBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lCiAgICAgaml0LnBlZWsoCiAgICAgICAg
IEdQUkluZm86OmFyZ3VtZW50R1BSMSwKICAgICAgICAgKHN0YWNrTWlzYWxpZ25tZW50IC0gTWFj
cm9Bc3NlbWJsZXI6OnB1c2hUb1NhdmVCeXRlT2Zmc2V0KCkpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0g
ICAgUHRyVGFnIGdlbmVyYXRvckNhbGxUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBu
ZXh0UHRyVGFnSUQoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0g
aml0LmNhbGwoZ2VuZXJhdG9yQ2FsbFRhZyk7Ci0gICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKwogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2Ugd2FudCB0byBtYWtlIGEgdGFpbCBjYWxsIHRvIHdoYXQgd2FzIHJldHVy
bmVkIHRvIHVzIGluIHRoZQogICAgIC8vIHJldHVyblZhbHVlR1BSLiBCdXQgYXQgdGhlIHNhbWUg
dGltZSBhcyB3ZSBkbyB0aGlzLCB3ZSBtdXN0IHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KICAgICAv
LyBUaGUgd2F5IHdlIHdpbGwgYWNjb21wbGlzaCB0aGlzIGlzIGJ5IGFycmFuZ2luZyB0byBoYXZl
IHRoZSB0YWlsIGNhbGwgdGFyZ2V0IGluIHRoZQpAQCAtMTE3LDMwICsxMTYsMzAgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZQogICAgIHJlc3RvcmVBbGxSZWdpc3Rl
cnMoaml0LCBidWZmZXIpOwogCiAjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJ
TkcpCi0gICAgaml0LnVudGFnUHRyKEFzc2VtYmx5SGVscGVyczo6bGlua1JlZ2lzdGVyLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnVudGFnUHRyKEFzc2VtYmx5SGVscGVy
czo6bGlua1JlZ2lzdGVyLCByZXN1bHRUYWcpOwogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHRUYWcpOwogI2VuZGlmCiAgICAgaml0LnJl
dCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cihnZW5l
cmF0aW9uRnVuY3Rpb24sIGdlbmVyYXRvckNhbGxUYWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgcmVzdWx0VGh1bmtUYWcsICIlcyIsIG5hbWUpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICIlcyIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDA7Ci0gICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsIHZtKTsKICAgICByZXR1cm4gZ2Vu
ZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNv
bXBpbGVGVExPU1JFeGl0KSwgdGh1bmtUYWcsICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVu
ayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVu
dDo6TmVlZGVkKTsKKyAgICAgICAgdm0sIGNvbXBpbGVGVExPU1JFeGl0LCBPU1JFeGl0UHRyVGFn
LCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZy
YW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1Rv
UmVzdG9yZSA9IDE7Ci0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0
aFB0clRhZywgdm0pOwogICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29tcGlsZUZUTExhenlTbG93UGF0aCksIHRodW5r
VGFnLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jl
c3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5vdE5lZWRlZCk7Cisg
ICAgICAgIHZtLCBjb21waWxlRlRMTGF6eVNsb3dQYXRoLCBKSVRTdHViUm91dGluZVB0clRhZywg
IkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3Jl
LCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOb3ROZWVkZWQpOwogfQogCiBz
dGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVn
aXN0ZXJTZXQgZG9udENsb2JiZXIpCkBAIC0xNzEsNyArMTcwLDcgQEAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibAogICAgIH0KIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKIHsKICAgICBBc3NlbWJseUhl
bHBlcnMgaml0KG51bGxwdHIpOwogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0yMDQs
OSArMjAzLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rRwogICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIwLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpKTsK
ICAgICAKICAgICByZWdpc3RlckNsb2JiZXJDaGVjayhqaXQsIGtleS5hcmd1bWVudFJlZ2lzdGVy
cygpKTsKLSAgICAKLSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC5jYWxsKGNhbGxUYWcpOworCisgICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNl
dCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQucmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKQEAgLTIzMiw4ICsyMzAsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhD
YWxsVGh1bmtHCiAgICAgaml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cihrZXkuY2FsbFRhcmdldCgpLCBjYWxsVGFnKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIGtleS5jYWxsUHRyVGFnKCksICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1
bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGwsIGtleS5jYWxsVGFyZ2V0KCkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMi
LCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDIzMDcz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsMzYgKzM4LDM2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgRlRMIHsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihj
b25zdCBTbG93UGF0aENhbGxLZXkmKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEtleVR5cGVBcmd1bWVudD4KIHN0cnVjdCBUaHVua01hcCB7CiAgICAgdHlwZWRl
ZiBLZXlUeXBlQXJndW1lbnQgS2V5VHlwZTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBUb1RodW5rTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxN
YWNyb0Fzc2VtYmxlckNvZGVQdHIsIEtleVR5cGU+IEZyb21UaHVua01hcDsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8S2V5VHlwZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4g
VG9UaHVua01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiwgS2V5VHlwZT4gRnJvbVRodW5rTWFwOwogICAgIAogICAgIFRvVGh1bmtN
YXAgbV90b1RodW5rOwogICAgIEZyb21UaHVua01hcCBtX2Zyb21UaHVuazsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKICAgICBNYXBUeXBlJiBtYXAsIGNv
bnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0
b3IpCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6VG9UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9
IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOwogICAgIGlmIChpdGVyICE9IG1hcC5tX3RvVGh1bmsu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKGtleSk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJlc3VsdCA9IGdlbmVyYXRvcihrZXkpOwogICAgIG1h
cC5tX3RvVGh1bmsuYWRkKGtleSwgcmVzdWx0KTsKICAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJl
c3VsdC5jb2RlKCksIGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgTWFwVHlwZT4KLXR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWFw
VHlwZSYgbWFwLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQordHlwZW5hbWUgTWFwVHlwZTo6
S2V5VHlwZSBrZXlGb3JUaHVuayhNYXBUeXBlJiBtYXAsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gcHRyKQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVua01h
cDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21UaHVuay5maW5kKHB0cik7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1bmsuZW5kKCkpOwpAQCAtNzksMTMgKzc5LDEz
IEBAIGNsYXNzIFRodW5rcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGh1bmtzKTsKIHB1
YmxpYzoKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGdldFNsb3dQYXRoQ2FsbFRodW5rKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0U2xvd1BhdGhDYWxsVGh1bmso
Y29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2VuZXJh
dGVJZk5lY2Vzc2FyeSgKICAgICAgICAgICAgIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNs
b3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICB9Ci0gICAgCi0gICAgU2xvd1BhdGhDYWxs
S2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIpCisK
KyAgICBTbG93UGF0aENhbGxLZXkga2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBwdHIpCiAgICAgewogICAgICAgICByZXR1cm4ga2V5
Rm9yVGh1bmsobV9zbG93UGF0aENhbGxUaHVua3MsIHB0cik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IGlubGluZSBPcGNvZGVJRCBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQKICAgICAvLyBUaGUgT3Bj
b2RlSUQgaXMgZW1iZWRkZWQgaW4gdGhlIGludDMyX3Qgd29yZCBwcmVjZWRpbmcgdGhlIGxvY2F0
aW9uIG9mCiAgICAgLy8gdGhlIExMSW50IGNvZGUgZm9yIHRoZSBvcGNvZGUgKHNlZSB0aGUgRU1C
RURfT1BDT0RFX0lEX0lGX05FRURFRCBtYWNybwogICAgIC8vIGluIExvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwKS4KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cihyZW1vdmVDb2RlUHRy
VGFnPHZvaWQqPihvcGNvZGUpKTsKKyAgICBhdXRvIGNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mob3Bjb2Rl
KTsKICAgICBpbnQzMl90KiBvcGNvZGVJREFkZHJlc3MgPSBjb2RlUHRyLmRhdGFMb2NhdGlvbjxp
bnQzMl90Kj4oKSAtIDE7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBzdGF0aWNfY2FzdDxPcGNv
ZGVJRD4oKm9wY29kZUlEQWRkcmVzcyk7CiAgICAgQVNTRVJUKG9wY29kZUlEIDwgTlVNQkVSX09G
X0JZVEVDT0RFX0lEUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcs
OCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAjZWxzZQogICAg
IG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIob3Bl
cmF0aW9uRXhjZXB0aW9uRnV6eiwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7Ci0gICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIHRhZyk7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBjYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgT3BlcmF0
aW9uUHRyVGFnKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIg
KyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CkBAIC03
MTMsMTAgKzcxMiw5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwK
ICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKAogICAgICAgICBb
PSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgUHRyVGFnIGxp
bmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCAmdm0pOwotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0s
ICppbmZvKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOwogICAg
ICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRo
dW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkp
KTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTkzMyw5ICs5MzEsOCBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgCiAjZWxzZQogI2Vycm9yICJKSVQgbm90IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklU
T3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KHRhZ0NGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSksIHNjcmF0Y2gpOwotICAgIGNhbGwoc2Ny
YXRjaCwgdGFnKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4oZnVuY3Rpb24pKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCBPcGVy
YXRpb25QdHJUYWcpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFk
ZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksOSArNTksOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBh
CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsK
ICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1Q
dHIodm0uc2hhZG93Q2hpY2tlbigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpPigpOwotICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hp
Y2tlbkxvZywgdGFnKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKLSAgICBjYWxsKHNjcmF0Y2gxTm9u
QXJnR1BSLCB0YWcpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZykpLCBzY3JhdGNo
MU5vbkFyZ0dQUik7CisgICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUiwgT3BlcmF0aW9uUHRyVGFn
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxv
Z0N1cnNvcigpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7CiAgICAgb2subGluayh0aGlzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gQXNzZW1ibGUgYSB0aHVuayB0
aGF0IHdpbGwgc2VydmUgYXMgdGhlIG1lYW5zIGZvciB3cml0aW5nIGludG8gdGhlIEpJVCByZWdp
b24uCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3cml0ZVRodW5rID0gaml0V3JpdGVU
aHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0YWJsZUFkZHIpLCBzdHVi
QmFzZSwgc3R1YlNpemUpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHdyaXRlVGh1bmsgPSBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0dWJCYXNlLCBzdHViU2l6ZSk7CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IDA7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQCBwcml2YXRlOgogICAgIH0KIAog
I2lmIENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3Jp
dGFibGVBZGRyLCB2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplKQorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lk
KiB3cml0YWJsZUFkZHIsIHZvaWQqIHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUpCiAgICAgewog
ICAgICAgICB1c2luZyBuYW1lc3BhY2UgQVJNNjRSZWdpc3RlcnM7CiAgICAgICAgIHVzaW5nIFRy
dXN0ZWRJbW0zMiA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzI7CkBAIC0yOTksOCArMjk5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gdG8gYXBwZWFyIGluIHRoZSBjb25zb2xlIG9yIGFu
eXdoZXJlIGluIG1lbW9yeSwgdmlhIHRoZSBQcmludFN0cmVhbSBidWZmZXIuCiAgICAgICAgIC8v
IFRoZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFi
bGUgd2hlbiB1c2luZyB0aGUKICAgICAgICAgLy8gYXN5bmNEaXNhc3NlbWJseSBvcHRpb24gYXMg
b3VyIGNhbGxlciB3aWxsIHNldCBvdXIgcGFnZXMgZXhlY3V0ZSBvbmx5LgotICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKEpJVFdyaXRlVGh1bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVh
cHNGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhv
dXREaXNhc3NlbWJseSh0YWcpOworICAgICAgICByZXR1cm4gbGlua0J1ZmZlci5maW5hbGl6ZUNv
ZGVXaXRob3V0RGlzYXNzZW1ibHk8SklUVGh1bmtQdHJUYWc+KCk7CiAgICAgfQogI2Vsc2UgLy8g
Q1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKICAgICBz
dGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKQEAgLTMwOCwxNSArMzA3LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgIG1lbWNweSgodm9pZCopKHN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCAr
IG9mZnNldCksIGRhdGEsIGRhdGFTaXplKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90
KQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVu
a0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90KQogICAgIHsKICAgICAgICAg
c3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQb29sID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGFkZHJlc3MpOwotICAgICAgICB1aW50cHRyX3QgZnVuY3Rpb24gPSAodWludHB0cl90KSgo
dm9pZCopJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKKyAgICAgICAgdm9pZCogZnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPigmZ2VuZXJpY1dyaXRlVG9KSVRSZWdpb24pOwogI2lm
IENQVShBUk1fVEhVTUIyKQogICAgICAgICAvLyBIYW5kbGUgdGh1bWIgb2Zmc2V0Ci0gICAgICAg
IGZ1bmN0aW9uIC09IDE7CisgICAgICAgIHVpbnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICAgICAgZnVuY3Rpb25Bc0ludCAt
PSAxOworICAgICAgICBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9u
QXNJbnQpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKHZvaWQqKWZ1bmN0
aW9uKSk7CisgICAgICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRU
aHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQdHIpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDggKzkxLDcgQEAgc3RhdGljIGlubGluZSB2
b2lkKiBwZXJmb3JtSklUTWVtY3B5KHZvaQogICAgICAgICAgICAgLy8gVXNlIGV4ZWN1dGUtb25s
eSB3cml0ZSB0aHVuayBmb3Igd3JpdGVzIGluc2lkZSB0aGUgSklUIHJlZ2lvbi4gVGhpcyBpcyBh
IHZhcmlhbnQgb2YKICAgICAgICAgICAgIC8vIG1lbWNweSB0aGF0IHRha2VzIGFuIG9mZnNldCBp
bnRvIHRoZSBKSVQgcmVnaW9uIGFzIGl0cyBkZXN0aW5hdGlvbiAoZmlyc3QpIHBhcmFtZXRlci4K
ICAgICAgICAgICAgIG9mZl90IG9mZnNldCA9IChvZmZfdCkoKHVpbnRwdHJfdClkc3QgLSBzdGFy
dE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCk7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0g
cHRyVGFnKEpJVFdyaXRlVGh1bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlv
bik7Ci0gICAgICAgICAgICByZXRhZ0NvZGVQdHIoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rp
b24sIHRhZywgQ0Z1bmN0aW9uUHRyVGFnKShvZmZzZXQsIHNyYywgbik7CisgICAgICAgICAgICBy
ZXRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWcsIENGdW5jdGlvblB0clRhZz4oaml0V3JpdGVTZXBh
cmF0ZUhlYXBzRnVuY3Rpb24pKG9mZnNldCwgc3JjLCBuKTsKICAgICAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEdDQXdhcmVK
SVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtKQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSkKICAgICA6IEpJVFN0dWJS
b3V0aW5lKGNvZGUpCiAgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQogICAgICwgbV9pc0pl
dHRpc29uZWQoZmFsc2UpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOjptYXJrUmVxdWlyZWQKIH0KIAogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFy
a2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGUsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sIGNvbnN0
IEpTQ2VsbCogb3duZXIsCiAgICAgY29uc3QgVmVjdG9yPEpTQ2VsbCo+JiBjZWxscykKICAgICA6
IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKICAgICAsIG1fY2VsbHMoY2VsbHMuc2l6
ZSgpKQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGlu
ZTo6bWFya1IKIAogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6
R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoCi0gICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBj
b25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxzLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCog
b3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgY2VsbHMsCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2tGb3JFeGNlcHRpb25IYW5kbGVycywgQ2FsbFNpdGVJbmRleCBleGNlcHRpb25IYW5kbGVy
Q2FsbFNpdGVJbmRleCkKICAgICA6IE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwg
dm0sIG93bmVyLCBjZWxscykKICAgICAsIG1fY29kZUJsb2NrV2l0aEV4Y2VwdGlvbkhhbmRsZXIo
Y29kZUJsb2NrRm9yRXhjZXB0aW9uSGFuZGxlcnMpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBH
Q0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSAogCiAKIFJlZjxKSVRTdHViUm91dGlu
ZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiBjb2RlLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4mIGNvZGUsCiAgICAgVk0mIHZtLAogICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAg
Ym9vbCBtYWtlc0NhbGxzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAvLyBsaXN0
IHdoaWNoIGRvZXMgbm90IGdldCByZWNsYWltZWQgYWxsIGF0IG9uY2UpLgogY2xhc3MgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lIDogcHVibGljIEpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKLSAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mKTsK
KyAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiYsIFZNJik7CiAgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJS
b3V0aW5lKCk7CiAgICAgCiAgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogY2xhc3MgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewogcHVibGlj
OgogICAgIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9y
PEpTQ2VsbCo+Jik7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxK
U0NlbGwqPiYpOwogICAgIHZpcnR1YWwgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsK
ICAgICAKIHByb3RlY3RlZDoKQEAgLTk0LDcgKzk0LDcgQEAgY2xhc3MgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lV2l0aEV4Y2VwdGlvbgogcHVibGljOgogICAgIHR5cGVkZWYgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lIEJhc2U7CiAKLSAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFu
ZGxlcihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOwor
ICAgIEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mLCBWTSYsIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYsIENvZGVCbG9jayosIENhbGxTaXRlSW5k
ZXgpOwogCiAgICAgdm9pZCBhYm91dFRvRGllKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBvYnNlcnZl
WmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CkBAIC0xMTEsNyArMTExLDcgQEAgcHJpdmF0ZToKIC8v
IGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIEMrKyBvciBKUy4KIC8vIAogLy8gUmVmPEpJVFN0dWJS
b3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKLS8vICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgY29kZSwKKy8vICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUsCiAvLyAgICBWTSYgdm0sCiAvLyAgICBjb25zdCBKU0NlbGwq
IG93bmVyLAogLy8gICAgYm9vbCBtYWtlc0NhbGxzLApAQCAtMTI0LDcgKzEyNCw3IEBAIHByaXZh
dGU6CiAvLyB3YXkuCiAKIFJlZjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUo
Ci0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93
bmVyLCBib29sIG1ha2VzQ2FsbHMsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtl
c0NhbGxzLAogICAgIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYgPSB7IH0sIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrRm9yRXhjZXB0aW9uSGFuZGxlcnMgPSBudWxscHRyLCBDYWxsU2l0ZUluZGV4
IGV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTEgKzY3LDExIEBAIFNlY29uZHMgdG90YWxG
VExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMg
dG90YWxGVExCM0NvbXBpbGVUaW1lOwogCi12b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1
bmN0aW9uKQordm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1
bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAgICAgQ29k
ZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLAotICAg
ICAgICBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLAorICAg
ICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQog
CiBKSVQ6OkpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCkKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxh
YmVsLCB0aGlzKTsKICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4
dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgbV92bSks
IE5lYXJDb2RlUHRyVGFnKSk7CisgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1
Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFy
ZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KQEAgLTc4OCwyNyArNzg4LDI1IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5z
aW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUu
c2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzLnNpemUoKSk7CiAKICAgICAgICAgICAgIGF1dG8q
IHNpbXBsZUp1bXBUYWJsZSA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlOwotICAg
ICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc2ltcGxlSnVt
cFRhYmxlKTsKLSAgICAgICAgICAgIHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0sIHRhZyk7CisgICAgICAgICAgICBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29k
ZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNo
T2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzW2pdOwogICAg
ICAgICAgICAgICAgIHNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldAotICAg
ICAgICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXQgKyBvZmZzZXRdLCB0YWcpCisgICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBv
ZmZzZXRdKQogICAgICAgICAgICAgICAgICAgICA6IHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVs
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OlN0cmluZyk7CiAKICAgICAgICAgICAgIGF1dG8q
IHN0cmluZ0p1bXBUYWJsZSA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlOwotICAg
ICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc3RyaW5nSnVt
cFRhYmxlKTsKICAgICAgICAgICAgIHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9Ci0gICAg
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNl
dCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgdGFnKTsKKyAgICAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCAr
IHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRp
b24gOiBzdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24uYnJhbmNoT2Zmc2V0OwogICAgICAgICAg
ICAgICAgIGxvY2F0aW9uLmN0aU9mZnNldCA9IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRd
LCB0YWcpCisgICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3
aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKQogICAgICAgICAg
ICAgICAgICAgICA6IHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtODE2LDcgKzgxNCw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4
Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewogICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9
IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0XSwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vMzk0MzMzMTg+LgorICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0
XSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2NhbGxzKSB7CkBAIC04MzIs
MTggKzgzMSwxOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX3B1
dEJ5SWRzW2ldLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKIAogICAgIGlmIChtX2J5VmFsQ29tcGls
YXRpb25JbmZvLnNpemUoKSkgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25I
YW5kbGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2V4Y2VwdGlvbkhhbmRsZXIsIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBleGNlcHRpb25IYW5kbGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPihtX2V4Y2VwdGlvbkhhbmRsZXIpOwogCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgYnlWYWxDb21waWxhdGlvbkluZm8gOiBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvKSB7CiAgICAgICAgICAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZU5vdEluZGV4SnVtcCA9
IGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5vdEluZGV4SnVtcDsKLSAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkp1bXAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcCgpOworICAgICAgICAgICAg
YXV0byBub3RJbmRleEp1bXAgPSBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJUYWc+KCk7CiAg
ICAgICAgICAgICBpZiAoSnVtcChwYXRjaGFibGVOb3RJbmRleEp1bXApLmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKHBhdGNoYWJsZU5vdEluZGV4SnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRp
b25PZihieVZhbENvbXBpbGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOwotICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxD
b21waWxhdGlvbkluZm8uZG9uZVRhcmdldCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBuZXh0SG90UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxh
dGlvbkluZm8ubmV4dEhvdFBhdGhUYXJnZXQpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRp
b25JbmZvLnNsb3dQYXRoVGFyZ2V0KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0
dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8u
cmV0dXJuQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0
aW9uSnVtcDxKU0VudHJ5UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJU
YWc+KHBhdGNoYWJsZU5vdEluZGV4SnVtcCkpOworICAgICAgICAgICAgYXV0byBiYWRUeXBlSnVt
cCA9IENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0VudHJ5UHRyVGFnPihieVZhbENvbXBpbGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOworICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+IGRvbmVUYXJnZXQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0aW9uSW5mby5kb25lVGFyZ2V0
KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiBuZXh0SG90UGF0aFRh
cmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGJ5VmFsQ29tcGlsYXRpb25J
bmZvLm5leHRIb3RQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5v
UHRyVGFnPiBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+
KGJ5VmFsQ29tcGlsYXRpb25JbmZvLnNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkNhbGw8Tm9QdHJUYWc+IHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0aW9uSW5mby5yZXR1cm5BZGRyZXNzKTsKIAogICAg
ICAgICAgICAgKmJ5VmFsQ29tcGlsYXRpb25JbmZvLmJ5VmFsSW5mbyA9IEJ5VmFsSW5mbygKICAg
ICAgICAgICAgICAgICBieVZhbENvbXBpbGF0aW9uSW5mby5ieXRlY29kZUluZGV4LApAQCAtODYx
LDIyICs4NjAsMjAgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICBmb3IgKGF1
dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewogICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAg
ICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
cGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24pKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbikpLAotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIp
KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihjb21waWxhdGlvbkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uKSksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGNvbXBpbGF0aW9u
SW5mby5ob3RQYXRoQmVnaW4pKSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7CiAg
ICAgfQogCiAgICAgSklUQ29kZU1hcCBqaXRDb2RlTWFwOwogICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRl
Y29kZU9mZnNldCkgewotICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpIHsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoQ29kZVB0clRhZywgbV9jb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKGJ5
dGVjb2RlT2Zmc2V0LCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XSwgdGFnKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVPZmZz
ZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXRdKSk7CiAgICAgfQogICAgIGppdENvZGVNYXAuZmluaXNoKCk7CiAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGVNYXAoV1RGTW92ZShqaXRDb2RlTWFwKSk7CiAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1f
YXJpdHlDaGVjaywgQ29kZVB0clRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2FyaXR5Q2hlY2spOwogCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpKSB7CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKHBhdGNoQnVmZmVyKTsKQEAgLTg5
MSw4ICs4ODgsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIGlmIChtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9jb2Rl
QmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmln
aW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcikp
OwogICAgIAotICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0
Y2hCdWZmZXIsIENvZGVQdHJUYWcsCisgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQg
PSBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAg
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKApAQCAtOTMzLDggKzkzMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXIKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAg
ICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKHRhZyksIHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZy
b21DYWxsZXJGcmFtZSwgdGFnKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkp
OwogICAgIH0KIApAQCAtOTUzLDggKzk0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXIKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
ICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgUHRy
VGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKHRhZyksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxl
ciwgdGFnKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0
aW9uUHRyVGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAg
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTMgKzcwLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgZnJvbTsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIEZ1bmN0
aW9uUHRyIGNhbGxlZTsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxs
ZWU7CiAKICAgICAgICAgQ2FsbFJlY29yZCgpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnJvbSwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZ1bmN0aW9uUHRyIGNhbGxlZSkKKyAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBmcm9tLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPiBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkKICAgICAg
ICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICAsIGNh
bGxlZShjYWxsZWUpCkBAIC0xNzQsNyArMTc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAgIH07CiAKLSAgICB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0ciBuZXdDYWxs
ZWVGdW5jdGlvbik7CisgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJu
QWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlv
bik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRl
cmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMjY3
LDE4ICsyNjcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCi0gICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgUHRyVGFnIHRhZykKKyAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAg
IENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0YWcpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBl
bmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRy
KGZ1bmN0aW9uLCB0YWcpKSk7CisgICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
ZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRp
b25QdHJUYWc+KCkpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAg
IH0KIAogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgICAgIENhbGwgYXBwZW5k
Q2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0
clRhZyB0YWcpCisgICAgICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgUHRyVGFnIHRhZykK
ICAgICAgICAgewogICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZSh0YWcpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0
YWcpKSk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigp
KSk7CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAjZW5kaWYK
QEAgLTcxNiwzOSArNzE2LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKICAgICAgICAgfQogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjaWYgT1MoV0lORE9XUykgJiYgQ1BV
KFg4Nl82NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFn
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+KTsKICNlbmRpZgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcsIGludCk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZywgaW50KTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4sIGludCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcg
dGFnLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwg
dGFnLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDxG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFn
ID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCwgYXJncy4uLik7
Ci0gICAgICAgIH0KLQotI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShv
cGVyYXRpb24sIHRhZyk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAK
KyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXM2NEJpdFR5cGUoKSB7IHJl
dHVybiBzaXplb2YoVHlwZSkgPD0gODsgfQogCkBAIC03NTcsODcgKzc0MSw1MSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8dHlw
ZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQYXRo
UmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdz
KQorICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoaXM2NEJpdFR5cGU8
dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3VsdFR5cGU+KCksICJX
aW42NCBjYW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiByZXR1cm4gdHlwZSBpcyBsYXJnZXIg
dGhhbiA2NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24sIHRhZyk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgICAgICB9CiAjZWxzZSAvLyBPUyhXSU5ET1dT
KSAmJiBDUFUoWDg2XzY0KQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3Mp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFy
Z3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uLCB0YWcpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gT1MoV0lORE9XUykgJiYgQ1BV
KFg4Nl82NCkKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHRhZywg
YXJncy4uLik7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIFB0clRhZyB0YWcsIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShvcGVyYXRpb24sIHRhZywgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgICAgIH0KKyNlbmRp
ZiAvLyBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVy
YXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBBcmdzLi4uIGFy
Z3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+
KGFyZ3MuLi4pOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFnKTsKLSAgICAgICAgICAgIHNldHVwUmVzdWx0cyhyZXN1
bHRSZWdzKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lE
KCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG9wZXJhdGlv
biwgdGFnLCByZXN1bHRSZWdzLCBhcmdzLi4uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAg
ICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24sIHRhZyk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIHNldHVwUmVzdWx0cyhy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbiwgdGFnLCBhcmdzLi4uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQot
ICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdz
Li4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24ob3BlcmF0aW9uLCB0YWcpOworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZy
YW1lKCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgICAg
ICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUu
Li4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklU
T3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbiwgdGFn
LCBhcmdzLi4uKTsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFy
Z3MuLi4pOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihvcGVyYXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTg0OSw4ICs3OTcsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogCi0gICAgICAgIENh
bGwgZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uID0gQ29kZVB0cigpKTsKLSAgICAgICAg
Q2FsbCBlbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyIGZ1bmN0aW9uID0gQ29kZVB0cigpKTsKKyAg
ICAgICAgQ2FsbCBlbWl0TmFrZWRDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IGZ1bmN0aW9uID0gQ29k
ZVB0cjxOb1B0clRhZz4oKSk7CisgICAgICAgIENhbGwgZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0
cjxOb1B0clRhZz4gZnVuY3Rpb24gPSBDb2RlUHRyPE5vUHRyVGFnPigpKTsKIAogICAgICAgICAv
LyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcg
aW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwpAQCAtOTM2LDcgKzg4
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREaXNh
c3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOwogICAgICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBp
bGF0aW9uPiBtX2NvbXBpbGF0aW9uOwotICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSopOwogCiAgICAgICAgIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MDUsMTIgKzcwNSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRo
SUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlm
ICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1h
dGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsK
ICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoSnVtcHMpOwogCkBAIC03NzksMTIgKzc3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0g
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgdGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgdGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTgxOSwxNSArODE3LDE0IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBhdXRvIHNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1h
dGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCB0YWcs
IHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgdGFnLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0
aEVuZCA9IGxhYmVsKCk7CkBAIC04ODYsMTUgKzg4MywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsK
ICNlbmRpZgogCi0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25f
RUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
Y2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgY2FsbFRhZywg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
KyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxOCw3ICszMTgsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRD
YWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1MCw5ICsyNTAsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlE
CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9
IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgbV92bSk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPQotICAgICAgICBlbWl0TmFr
ZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgICAgIGVtaXROYWtlZENhbGwobV92
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlk
UmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIEpJVENvZGVXaXRoQ29k
ZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEoKIHsKIH0KIAotSklUQ29kZVdpdGhDb2RlUmVmOjpK
SVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVX
aXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVm
LCBKSVRUeXBlIGppdFR5cGUpCiAgICAgOiBKSVRDb2RlKGppdFR5cGUpCiAgICAgLCBtX3JlZihy
ZWYpCiB7CkBAIC0xMjEsMTIgKzEyMSwxMiBAQCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2Rl
V2l0aENvZGVSZWYoCiB2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0g
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBD
b2RlUHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgIGlmICghb2Zmc2V0KQogICAgICAgICBy
ZXR1cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBjaGFyKiBleGVj
dXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwotICAgIHJldHVybiB0YWdDb2RlUHRyKGV4ZWN1dGFi
bGVBZGRyZXNzICsgb2Zmc2V0LCBDb2RlUHRyVGFnKTsKKyAgICBjaGFyKiBleGVjdXRhYmxlQWRk
cmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKiwgSlNFbnRyeVB0clRhZz4obV9yZWYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiB0YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0KIAogdm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCkBAIC0xNjEsNyArMTYxLDcg
QEAgRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRUeXBlIGppdAogewogfQogCi1EaXJl
Y3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRDb2RlOjpD
b2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUpCitEaXJlY3RKSVRDb2RlOjpE
aXJlY3RKSVRDb2RlKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBKSVRDb2Rl
OjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUp
CiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlKQogICAgICwgbV93aXRoQXJp
dHlDaGVjayh3aXRoQXJpdHlDaGVjaykKIHsKQEAgLTE3Myw3ICsxNzMsNyBAQCBEaXJlY3RKSVRD
b2RlOjp+RGlyZWN0SklUQ29kZSgpCiB7CiB9CiAKLXZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlh
bGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFy
aXR5Q2hlY2spCit2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJVENvZGU6
OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBKSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IHdpdGhBcml0eUNoZWNrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CiAgICAg
bV9yZWYgPSByZWY7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0
aWFsaXplQ29kZVJlZihKSQogICAgIEFTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKIH0KIAotSklU
Q29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSBhcml0eSkKK0pJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4gRGlyZWN0SklUQ29kZTo6
YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAgICAgc3dpdGNoIChhcml0
eSkgewogICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtMTkzLDcgKzE5Myw3IEBA
IEpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0YKICAgICAgICAgcmV0dXJu
IG1fd2l0aEFyaXR5Q2hlY2s7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIENvZGVQdHIoKTsKKyAgICByZXR1cm4gQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPigpOwogfQogCiBOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0VHlw
ZSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5
cGUgaml0CiB7CiB9CiAKLU5hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZiByZWYs
IEpJVFR5cGUgaml0VHlwZSkKK05hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGVXaXRoQ29k
ZVJlZihyZWYsIGppdFR5cGUpCiB7CiB9CkBAIC0yMTAsMTMgKzIxMCwxMyBAQCBOYXRpdmVKSVRD
b2RlOjp+TmF0aXZlSklUQ29kZSgpCiB7CiB9CiAKLXZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlh
bGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpCit2b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVD
b2RlUmVmKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmKQogewogICAgIEFTU0VSVCghbV9yZWYp
OwogICAgIG1fcmVmID0gcmVmOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6
OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorSklUQ29kZTo6Q29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSBhcml0eSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgc3dpdGNoIChhcml0
eSkgewpAQCAtMjI2LDcgKzIyNiw3IEBAIEpJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6
YWRkcmVzc0YKICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ29kZVB0cigpOworICAgIHJldHVy
biBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDggKzUwLDggQEAgY2xhc3MgVk07CiAKIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewogcHVibGljOgotICAgIHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Q29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29k
ZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OwogCiAgICAgZW51bSBKSVRUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIE5vbmUsCkBAIC0xNzIsNyArMTcyLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFs
IENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpID0gMDsKKyAgICB2aXJ0dWFs
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCkgPSAwOwogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsgfQogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NB
dE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CkBAIC0yMDUsNyArMjA1LDcgQEAgcHJpdmF0ZToK
IGNsYXNzIEpJVENvZGVXaXRoQ29kZVJlZiA6IHB1YmxpYyBKSVRDb2RlIHsKIHByb3RlY3RlZDoK
ICAgICBKSVRDb2RlV2l0aENvZGVSZWYoSklUVHlwZSk7Ci0gICAgSklUQ29kZVdpdGhDb2RlUmVm
KENvZGVSZWYsIEpJVFR5cGUpOworICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmPEpTRW50
cnlQdHJUYWc+LCBKSVRUeXBlKTsKIAogcHVibGljOgogICAgIHZpcnR1YWwgfkpJVENvZGVXaXRo
Q29kZVJlZigpOwpAQCAtMjE3LDMyICsyMTcsMzIgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFp
bnModm9pZCopIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZVJlZiBtX3JlZjsKKyAg
ICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAogY2xhc3MgRGlyZWN0SklUQ29k
ZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIERpcmVjdEpJVENv
ZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklUQ29kZShDb2RlUmVmLCBDb2RlUHRyIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlKTsKKyAgICBEaXJlY3RKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUpOwogICAg
IHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsKICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb2Rl
UmVmKENvZGVSZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hlY2spOworICAgIHZvaWQgaW5pdGlhbGl6
ZUNvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3
aXRoQXJpdHlDaGVjayk7CiAKLSAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tN
b2RlKSBvdmVycmlkZTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGFkZHJlc3NGb3JDYWxs
KEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBDb2RlUHRyIG1fd2l0
aEFyaXR5Q2hlY2s7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNr
OwogfTsKIAogY2xhc3MgTmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYg
ewogcHVibGljOgogICAgIE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7Ci0gICAgTmF0aXZlSklUQ29k
ZShDb2RlUmVmLCBKSVRUeXBlKTsKKyAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0
clRhZz4sIEpJVFR5cGUpOwogICAgIHZpcnR1YWwgfk5hdGl2ZUpJVENvZGUoKTsKICAgICAKLSAg
ICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUNv
ZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPik7CiAKLSAgICBDb2RlUHRyIGFkZHJlc3NGb3JD
YWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgJKHJl
dmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyOCArMzgsMjggQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3Qg
RW50cnkgewogICAgICAgICBFbnRyeSgpIHsgfQogCi0gICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbikKKyAgICAgICAgRW50
cnkodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gY29kZUxvY2F0aW9uKQogICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKICAgICAgICAgICAgICwgbV9jb2RlTG9jYXRpb24oY29kZUxvY2F0aW9uKQogICAgICAg
ICB7IH0KIAogICAgICAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQotICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFi
ZWwgY29kZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9jb2RlTG9jYXRpb247IH0KKyAgICAgICAgaW5s
aW5lIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbigpIHsgcmV0
dXJuIG1fY29kZUxvY2F0aW9uOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBt
X2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fY29kZUxvY2F0aW9u
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2NvZGVMb2NhdGlv
bjsKICAgICB9OwogCiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uKQorICAgIHZvaWQgYXBwZW5kKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNv
ZGVMb2NhdGlvbikKICAgICB7CiAgICAgICAgIG1fZW50cmllcy5hcHBlbmQoeyBieXRlY29kZUlu
ZGV4LCBjb2RlTG9jYXRpb24gfSk7CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2goKSB7IG1fZW50
cmllcy5zaHJpbmtUb0ZpdCgpOyB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5kKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4gZmluZCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAg
YXV0byogZW50cnkgPQogICAgICAgICAgICAgYmluYXJ5U2VhcmNoPEVudHJ5LCB1bnNpZ25lZD4o
bV9lbnRyaWVzLApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbnRyeS0+Ynl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oKTsK
ICAgICAgICAgcmV0dXJuIGVudHJ5LT5jb2RlTG9jYXRpb24oKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MSw5ICsxNjEsOSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxl
cjo6cmVwb3J0SW5zdHJ1Y3Rpb25zCiAKIHZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNz
ZW1ibHkoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGZyb20sIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0bykKIHsKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBmcm9tTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZnJvbSk7
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zih0byk7Ci0gICAgZGlzYXNzZW1ibGUoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzPHVpbnRwdHJfdD4oKSAtIGZyb21Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzczx1
aW50cHRyX3Q+KCksICIgICAgICAgICIsIG91dCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlz
YXNzZW1ibHlQdHJUYWc+IGZyb21Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNh
c3NlbWJseVB0clRhZz4oZnJvbSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQ
dHJUYWc+IHRvTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJU
YWc+KHRvKTsKKyAgICBkaXNhc3NlbWJsZShmcm9tTG9jYXRpb24sIHRvTG9jYXRpb24uZGF0YUxv
Y2F0aW9uPHVpbnRwdHJfdD4oKSAtIGZyb21Mb2NhdGlvbi5kYXRhTG9jYXRpb248dWludHB0cl90
PigpLCAiICAgICAgICAiLCBvdXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjMw
NzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBF
eGVjU3RhdGUqIGNhCiAgICAgICAgIGNhdGNoUm91dGluZSA9IGNhdGNoUENGb3JJbnRlcnByZXRl
ci0+dS5wb2ludGVyOwogI2VuZGlmCiAgICAgfSBlbHNlCi0gICAgICAgIGNhdGNoUm91dGluZSA9
IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKTsKKyAgICAgICAgY2F0
Y2hSb3V0aW5lID0gTExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKGhhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uKTsKICAgICAKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZy
YW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Mywx
OCArNzMsMTggQEAgSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKIHZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXIm
IHNsb3dQYXRoKQogewogICAgIEFTU0VSVChtX3N0YXJ0LmlzU2V0KCkpOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHN0YXJ0ID0gZmFzdFBhdGgubG9jYXRpb25PZihtX3N0YXJ0KTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQgPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KTsKICAgICBtX3N0dWJJbmZvLT5w
YXRjaC5zdGFydCA9IHN0YXJ0OwogCiAgICAgaW50MzJfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgc3RhcnQsIGZhc3RQYXRo
LmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgICAgIHN0YXJ0LCBmYXN0UGF0aC5sb2NhdGlvbk9m
PE5vUHRyVGFnPihtX2RvbmUpKTsKICAgICBBU1NFUlQoaW5saW5lU2l6ZSA+IDApOwogICAgIG1f
c3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXplOwogCiAgICAgbV9zdHViSW5m
by0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgc3RhcnQsIHNsb3dQYXRo
LmxvY2F0aW9uT2YobV9zbG93UGF0aENhbGwpKTsKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxv
Y2F0aW9uT2Y8Tm9QdHJUYWc+KG1fc2xvd1BhdGhDYWxsKSk7CiAgICAgbV9zdHViSW5mby0+cGF0
Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZiht
X3Nsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2Y8Tm9Q
dHJUYWc+KG1fc2xvd1BhdGhCZWdpbikpOwogfQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZp
bmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiwyMSArMTE2LDE5IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGUKICAgICBjb250OEJpdC5s
aW5rKHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENh
bGwoQ29kZVB0ciBmdW5jdGlvbikKK0FMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5h
a2VkQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENh
bGwgPSBuZWFyQ2FsbCgpOwotICAgIGFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ29kZVB0clRhZyk7Ci0gICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0
aW9uKSkpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVj
b2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxP
cGVyYXRpb25QdHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAotQUxXQVlT
X0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyIGZ1bmN0aW9u
KQorQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRy
PE5vUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENh
bGwoKTsKLSAgICBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgTmVhckNvZGVQdHJUYWcpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
bmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbikpKTsKKyAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRy
VGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKQEAgLTE1MSwzNSArMTQ5LDM1
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmEKICAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKIHsKICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5k
Q2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi1BTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNs
b3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnICB0YWcp
CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aFNsb3dQYXRoUmV0dXJu
VHlwZShmdW5jdGlvbiwgdGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoZnVuY3Rpb24pOwogICAgIGV4Y2VwdGlvbkNo
ZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKK0FMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsgLy8gVGhlIGNhbGxlZSBpcyByZXNw
b25zaWJsZSBmb3Igc2V0dGluZyB0b3BDYWxsRnJhbWUgdG8gdGhlaXIgY2FsbGVyCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgIGV4
Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlv
biwgUHRyVGFnIHRhZywgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQogewotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uLCB0YWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAt
MTg4LDkgKzE4Niw5IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoK
ICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIGludCBkc3QpCitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQogewotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0YWcp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw5ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFi
ZWxBdE9mZnNldChtX2lubGluZVNpemUpOyB9Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1f
ZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBz
bG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0
KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgdGFnZ2VkIHdpdGggSlNJbnRlcm5hbFB0clRhZyBpbnN0ZWFkIG9m
IEpTRW50cnlUYWcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NDcxMgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmVMb2Nh
dGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldChtX2lubGluZVNpemUp
OyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gc2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9t
U3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0VudHJ5UHRy
VGFnPiBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0
T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQogICAgIAog
ICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBqaXQsIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWUpCiAgICAgewpA
QCAtMTI5LDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0
aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkKKyAgICB2b2lkIGdlbmVyYXRlT3V0T2ZMaW5lKENvZGVC
bG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxSZXBsYWNl
bWVudCkKICAgICB7CiAgICAgICAgIGF1dG8gbGlua0p1bXBUb091dE9mTGluZVNuaXBwZXQgPSBb
Jl0gKCkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwpAQCAtMTM5
LDEzICsxNDEsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2lu
bGluZVNpemUpKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG1faW5s
aW5lU3RhcnQuZGF0YUxvY2F0aW9uKCksIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6
ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwotICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKG1fY29kZS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJU
YWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBvdXQgb2YgbGluZSBzdHVi
Iik7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fY29kZS5jb2RlKCkpKTsKKyAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3Rh
bnQganVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CiAgICAgICAgIH07CiAKICAgICAgICAgYXV0
byByZXBsYWNlQ2FsbCA9IFsmXSAoKSB7Ci0gICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0
clRhZyhNYXRoSUNQdHJUYWcsIG1faW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAgZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgY2FsbFJl
cGxhY2VtZW50LCBjYWxsVGFnKTsKKyAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNJ
bnRlcm5hbFB0clRhZz4oKSwgY2FsbFJlcGxhY2VtZW50KTsKICAgICAgICAgfTsKIAogICAgICAg
ICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKTsKQEAgLTE2OCw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9Eb25lLCBkb25lTG9jYXRpb24oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFn
LCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMgc25pcHBldCIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91
dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQgb2YgbGluZSBmYXN0IElDIHNu
aXBwZXQiKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWdlbmVyYXRpb25TdGF0ZS5zaG91
bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0
IG5lZWQgdG8gcmVnZW5lcmF0ZSwgc28gd2UgY2FuIHdpcmUgdGhlIHNsb3cgcGF0aCBjYWxsCkBA
IC0yMTAsNyArMjExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNs
b3dQYXRoSnVtcExpc3QsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIAogICAgICAgICAgICAg
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLCBs
aW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQgb2Yg
bGluZSBJQyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVy
LCBKSVRTdHViUm91dGluZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQgb2YgbGlu
ZSBJQyBzbmlwcGV0Iik7CiAgICAgICAgIH0KIAogICAgICAgICBsaW5rSnVtcFRvT3V0T2ZMaW5l
U25pcHBldCgpOwpAQCAtMjE4LDE3ICsyMTksMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5h
bGl6ZUlubGluZUNvZGUoY29uc3QgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKICAgICB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoU3RhcnQsIE5lYXJDb2RlUHRy
VGFnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gc3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUuZmFzdFBhdGhTdGFydCk7
CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFydDsKIAogICAgICAgICBtX2lubGluZVNpemUg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAg
c3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0UGF0aEVuZCwgTm9QdHJUYWcp
KTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHN0
YXRlLmZhc3RQYXRoRW5kKSk7CiAgICAgICAgIEFTU0VSVChtX2lubGluZVNpemUgPiAwKTsKIAog
ICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICBzdGFydCwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoQ2FsbCkpOworICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oc3RhdGUuc2xvd1BhdGhDYWxsKSk7
CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0KSk7CisgICAgICAgICAgICBzdGFydCwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihzdGF0ZS5zbG93UGF0aFN0YXJ0KSk7CiAg
ICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBt
X2FyaXRoUHJvZmlsZTsgfQpAQCAtMjQ3LDggKzI0OCwxMCBAQCBwdWJsaWM6CiAKICAgICBBcml0
aFByb2ZpbGUqIG1fYXJpdGhQcm9maWxlOwogICAgIEluc3RydWN0aW9uKiBtX2luc3RydWN0aW9u
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbV9pbmxpbmVTdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IG1fY29kZTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHRhZ2dlZCB3
aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5zdGVhZCBvZiBKU0VudHJ5VGFnLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3MTIKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2lubGluZVN0YXJ0OwogICAgIGludDMyX3QgbV9pbmxp
bmVTaXplOwogICAgIGludDMyX3QgbV9kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRp
b247CiAgICAgaW50MzJfdCBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM3LDE3ICsxMDM3LDE3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRp
bmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYywgTm9Q
dHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDIsOCArNjQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
SW5zdHJ1Y3Rpb24qIGN1cgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgUHRyVGFnIGV4Y2VwdGlvbkhhbmRsZXJUYWcg
PSBFeGNlcHRpb25IYW5kbGVyUHRyVGFnOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIGV4Y2Vw
dGlvbkhhbmRsZXJUYWcpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKQEAgLTY4MSw3ICs2ODAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uCiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAg
anVtcChyZXR1cm5WYWx1ZUdQUiwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBqdW1wVGFibGUp
KTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02OTcsNyArNjk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1
Y3RpbwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIHJl
Z1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNo
VGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzEyLDcgKzcxMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3QKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOworICAg
IGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjMsMTcg
KzExNjIsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93
UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8
Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgCiAg
ICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJC
YXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
IiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
OwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5
cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNh
bGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYywgSGFzUHJvcGVydHlQdHJUYWcpKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihy
ZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzMiw3
ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcgogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIEhhc1Byb3BlcnR5UHRy
VGFnLCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAs
IHJlZ1QxLCBieVZhbEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAxLDcgKzgwMSw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9wdGkKICAgICBpZiAodHJ5UHV0QnlWYWxPcHRpbWl6
ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
KE9VUl9SRVRVUk5fQUREUkVTUykpID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7CiAg
ICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVydHlQdHJUYWcpKTsKKyAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKICAgICB9CiAgICAgcHV0QnlWYWwoZXhlYywg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8pOwogfQpAQCAtODg1LDcgKzg4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICBpZiAo
dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShleGVjLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpID09IE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwKSB7CiAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXpl
LgogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVT
UyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVy
dHlQdHJUYWcpKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljKTsKICAgICB9CiAKICAgICBkaXJlY3RQdXRCeVZhbChleGVjLCBvYmplY3QsIHN1YnNjcmlw
dCwgdmFsdWUsIGJ5VmFsSW5mbyk7CkBAIC05MzIsMTIgKzkzMiwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBQdHJUYWcgcmVzdWx0VGFnKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgUHRyVGFnIHRocm93RXhjZXB0aW9u
VGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CiAKICAgICBleGVjQ2FsbGVl
LT5zZXRDb2RlQmxvY2soMCk7CiAKQEAgLTk1MywxOSArOTUyLDE5IEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2Fs
bGVlKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGUodGhyb3dFeGNlcHRpb25UYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUsIHJlc3VsdFRhZyksCisgICAgICAgICAgICAgICAgdGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5UHRyVGFnPihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxU
eXBlOjpOb25lKTsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5v
dEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGhyb3dFeGNlcHRpb25UYWcsIHJlc3VsdFRh
ZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIApAQCAtOTgyLDE3ICs5ODEsMTcgQEAg
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICB2bS0+aG9z
dENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGUodGhyb3dFeGNlcHRpb25UYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSwgcmVzdWx0
VGFnKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBKU0VudHJ5UHRyVGFnPihn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVj
dFR5cGU6Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RB
Q29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVj
dXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwogfQogCkBAIC0xMDAyLDcgKzEwMDEsNiBAQCBTbG93UGF0aFJldHVyblR5cGUg
SklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCi0gICAgUHRyVGFnIGxp
bmtlZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rQ2FsbFJlc3VsdFB0clRhZywgdm0pOwogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25L
aW5kKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CkBAIC0xMDEyLDI2ICsxMDEwLDI2IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGkKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlv
bihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1
bmN0aW9uKj4oKnZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3Ioa2luZCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CiAKICAgICAgICAgICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtG
b3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwg
Y29kZVB0ciwgQ29kZVB0clRhZyk7CisgICAgICAgICAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVl
LCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKIAot
ICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAg
ICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBS
ZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dT
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVl
LCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8sIGxpbmtlZFRhcmdldFRhZyk7CisgICAgICAg
IHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlu
a0luZm8pOwogICAgIH0KIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVl
LT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2Fs
bGVlLT5leGVjdXRhYmxlKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9z
dEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9y
KGtpbmQsIE11c3RDaGVja0FyaXR5KTsKQEAgLTEwMzksOCArMTAzNyw3IEBAIFNsb3dQYXRoUmV0
dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgp
IHsKLSAgICAgICAgICAgIFB0clRhZyB0aHJvd0V4Y2VwdGlvblRhZyA9IHB0clRhZyhUaHJvd0V4
Y2VwdGlvblB0clRhZywgdm0pOwotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgbGlua2VkVGFyZ2V0VGFnKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfTsKIApAQCAtMTA2NSw5ICsxMDYyLDkgQEAgU2xvd1BhdGhSZXR1cm5U
eXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25j
ZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAg
IGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNv
ZGVQdHIsIENvZGVQdHJUYWcpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlu
a0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAotICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNGdW5jdGlvbiogY2FsbGVlKQpAQCAtMTA5NywxMCAr
MTA5NCwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0RpcmVjdENhCiAKICAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsK
ICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2Vk
KENvZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVsc2UgewogICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCkBAIC0xMTEyLDE2ICsxMTA5LDE2
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRTdGFja1Nsb3RzID0gY2FsbExpbmtJ
bmZvLT5tYXhOdW1Bcmd1bWVudHMoKTsKICAgICAgICAgaWYgKGFyZ3VtZW50U3RhY2tTbG90cyA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAg
ICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBN
dXN0Q2hlY2tBcml0eSkucmV0YWdnZWQoQ29kZVB0clRhZywgTmVhckNvZGVQdHJUYWcpOworICAg
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5k
LCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVQdHIgPSBm
dW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJlcXVp
cmVkKS5yZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZyk7CisgICAgICAgICAgICBj
b2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIEFyaXR5Q2hl
Y2tOb3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAogICAgIGxpbmtEaXJlY3RGb3IoZXhlYywgKmNh
bGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCBQdHJUYWcgcmVzdWx0VGFnKQorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQogewog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xMTM0LDEyICsxMTMxLDEyIEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdl
dEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlv
bio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtp
bmQpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAg
ICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2Fs
bE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0K
ICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGVIb3N0
Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8sIHJlc3VsdFRhZyk7
CisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVl
LCBjYWxsTGlua0luZm8pOwogICAgIH0KICAgICAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwpAQCAtMTE0NywxMiAr
MTE0NCwxMSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAg
IGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgUHRyVGFnIHRocm93RXhj
ZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CiAKICAgICAgICAg
aWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5
KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihleGVjLCBmdW5jdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAg
ICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogCkBAIC0xMTYxLDIzICsx
MTU3LDIwIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAg
ICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0
X2Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRo
cm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygp
LAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENv
ZGVQdHJUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwg
TXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/
IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIAogU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7Ci0gICAgUHRyVGFn
IHJlc3VsdFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7
Ci0gICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgcmVzdWx0VGFn
KTsKKyAgICBTbG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlv
bihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKIAogICAg
IGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ2FsbFZhcmlh
bnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsKICAgICAKQEAgLTExODYsMTEgKzExNzksOCBAQCBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAKIFNsb3dQYXRoUmV0dXJu
VHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKLSAgICBQdHJUYWcgcmVz
dWx0VGFnID0gcHRyVGFnKExpbmtWaXJ0dWFsQ2FsbFJlc3VsdFB0clRhZywgdm0pOwotICAgIHJl
dHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2Fs
bGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRUYWcpOworICAgIHJldHVybiB2aXJ0dWFs
Rm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlv
bkNlbGxJZ25vcmVkKTsKIH0KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQpAQCAtMTU5MCw4ICsxNTgwLDcgQEAgU2xvd1BhdGhSZXR1cm5U
eXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29v
bigpOwogICAgICAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9wdGlt
aXplKFRydWVUcmlTdGF0ZSk7CiAgICAgICAgIHZvaWQqIHRhcmdldFBDID0gdm0uZ2V0Q1RJU3R1
YihERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRW50cnlQdHJUYWcsICZ2
bSk7Ci0gICAgICAgIHRhcmdldFBDID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCB0aHVua1RhZywg
Yml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOworICAgICAgICB0YXJnZXRQQyA9IHJldGFnQ29k
ZVB0cih0YXJnZXRQQywgSklUVGh1bmtQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMp
KTsKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YXJnZXRQQywgZGF0YUJ1ZmZlcik7CiAg
ICAgfQogCkBAIC0xNjQyLDEwICsxNjMxLDggQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlPU1JFbnRlcgogICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUo
KSkgewogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgIGNhc2UgSklUQ29kZTo6RlRMSklU
OiB7Ci0gICAgICAgIHZvaWQqIGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVj
LCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChlbnRy
eSkKLSAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChlbnRyeSwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oZW50cnkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZW50cnkg
PSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBi
eXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTE2NjQsMTAg
KzE2NTEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAgICAg
c3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRD
b2RlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKLSAgICAgICAgdm9pZCog
ZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2Vt
ZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKGVudHJ5LCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihlbnRyeSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNo
T1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICByZXR1cm4gZW50cnkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiAgICAgfQogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTg1Miw3ICsxODM3LDcgQEAgc3RhdGljIEpT
VmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB1aW50MzJfdCBpID0gc3Vi
c2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsK
ICAgICAgICAgICAgIGlmIChhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewot
ICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbFN0cmluZywgR2V0UHJvcGVydHlQdHJUYWcp
KTsKKyAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRk
cmVzcywgb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcpOwogICAgICAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0
SW5kZXgoZXhlYywgaSk7CiAgICAgICAgICAgICB9CkBAIC0xOTkyLDcgKzE5NzcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgaWYgKHRyeUdldEJ5VmFs
T3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRk
cmVzcykgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3Qg
ZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgR2V0UHJvcGVydHlQdHJUYWcp
KTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzKSk7CkBAIC0yMDMyLDcgKzIwMTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhCiAgICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3Vu
dCA+PSAxMAogICAgICAgICAgICAgfHwgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8oKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAg
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJf
UkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlH
ZW5lcmljLCBIYXNQcm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIw
OTMsNyArMjA3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UK
ICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIEFTU0VS
VChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIGF1dG8gZ2V0QnlWYWxGdW5j
dGlvbiA9IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMg
OiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rp
b25QdHIoZ2V0QnlWYWxGdW5jdGlvbiwgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIGdldEJ5VmFsRnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7CkBAIC0yMjQyLDcg
KzIyMjcsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaENoYXJXCiAgICAg
ICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUoKCp2YWx1ZSlbMF0pLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwg
cHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CisgICAgYXNzZXJ0SXNUYWdn
ZWRXaXRoKHJlc3VsdCwgSlNTd2l0Y2hQdHJUYWcpOwogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjYxLDcgKzIyNDYsNyBAQCBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdpCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJs
ZS5jdGlGb3JWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihrZXkuYXNEb3VibGUoKSkpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3Rp
RGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZXN1
bHQsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJmp1bXBUYWJsZSkpOworICAgIGFzc2VydElz
VGFnZ2VkV2l0aChyZXN1bHQsIEpTU3dpdGNoUHRyVGFnKTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjI4MSw3ICsyMjY2LDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogICAgIH0gZWxzZQogICAgICAgICBy
ZXN1bHQgPSBqdW1wVGFibGUuY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCi0gICAg
YXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVt
cFRhYmxlKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgSlNTd2l0Y2hQdHJUYWcp
OwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCi1KSVQ6OkNvZGVS
ZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qIHZtKQorSklUOjpDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lCiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBOb1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTdHJpbmcgZ2V0X2J5X3ZhbCBz
dHViIik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIGVtaXRO
YWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4obV92
bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTU3LDcgKzU1
Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBwb2tl
KHJlZ1QxLCBwb2tlT2Zmc2V0KyspOwogICAgIHBva2UocmVnVDAsIHBva2VPZmZzZXQrKyk7CiAg
ICAgcG9rZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIHBva2VPZmZzZXQrKyk7Ci0gICAgQ2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBOb1B0
clRhZyk7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0Rp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKTsKICNlbHNlCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBp
cyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2Fw
cGluZyBzaG91bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihWTSogdm0pCitKSVQ6OkNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQo
dm0pOwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtOTEsNyArOTEsNyBAQCBKSVQ6OkNvZGVS
ZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0LnJldCgpOwogICAgIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlN0cmluZyBnZXRf
YnlfdmFsIHN0dWIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIz
Miw3ICsyMzIsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQYXRoSnVtcCgp
LmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRhZywgZHN0LCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIHNsb3dEb25lQ2FzZSA9IGp1
bXAoKTsKIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKEluc3RydWMKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFN0cnVjdHVyZShOb3RFcXVh
bCwgCiAgICAgICAgIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IAogICAgICAgICBtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIGVtaXROYWtlZENh
bGwoQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWw8
Tm9QdHJUYWc+KG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3Q2
NChaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3Zh
bCkpOwpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KEluc3RydWMKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBHZXRQcm9wZXJ0
eVB0clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIHJlZ1QwLCByZWdU
MSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
CkBAIC00NTAsNyArNDUwLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZh
bFdpdAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIGdlbi5zbG93UGF0
aEp1bXAoKS5saW5rKHRoaXMpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIApAQCAt
NDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRl
cnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplLCBQdXRQcm9wZXJ0eVB0clRhZywgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZv
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOwpAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKEluc3QKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlk
ZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50
LT5pbXBsKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoSQogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRhZywgcmVzdWx0VlJlZywgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVn
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwogCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY4OCw3ICs2ODgsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBHZXRQcm9wZXJ0eVB0clRh
ZywgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkp
OwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
QEAgLTcwNCw3ICs3MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIGlkZW50LT5pbXBsKCkpOwogCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc0Niw3
ICs3NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAgICAg
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRl
eCsrXTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgUHV0UHJvcGVydHlQdHJUYWcsIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIGlk
ZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7
CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpA
QCAtMTI3OSwxNyArMTI3OSwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChC
eVZhbEluCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7
CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUp
KTsKICAgICAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywK
KyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywK
ICAgICAgICAgIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgp
KTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRy
ZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElk
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEzMDQsNyArMTMwNCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKIAogICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhc3REb25lQ2FzZSwgYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dEb25lQ2FzZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb05leHRIb3RQYXRoKSk7CiAgICAgaWYg
KCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQpAQCAtMTMxNywxMiArMTMxNywxMiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoCiAgICAgZ2VuLmZpbmFsaXplKHBh
dGNoQnVmZmVyKTsKIAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RF
X0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRy
VGFnLAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRy
VGFnLAogICAgICAgICAiQmFzZWxpbmUgZ2V0X2J5X3ZhbCB3aXRoIGNhY2hlZCBwcm9wZXJ0eSBu
YW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHByb3BlcnR5TmFtZS5pbXBs
KCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZv
KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRl
eEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVy
YXRpb25HZXRCeVZhbEdlbmVyaWMsIEdldFByb3BlcnR5UHRyVGFnKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVy
aWMpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKQEAgLTEzNjEsOCArMTM2MSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKEJ5VmFsSW4KICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhi
YWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxB
dE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRp
b25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVy
KSB7CiAgICAgICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fY2FsbHMubGFzdCgpLmNhbGxl
ZS5leGVjdXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoKSk7CkBAIC0xMzcyLDE2ICsxMzcyLDE2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0
ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9i
eV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgICAgICJCYXNl
bGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgICAgIAog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFy
Q29kZVB0clRhZywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qg
c3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVydHlQdHJUYWcp
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRy
VGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oaXNEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
UHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMzk1
LDcgKzEzOTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoCiAK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSku
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1w
VG9Eb25lKSk7CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQogICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhh
bmRsZXIpOwpAQCAtMTQwNywxMiArMTQwNywxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoCiAgICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKIAogICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBt
X2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAgICBtX2NvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxp
bmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gRGlyZWN0KSA/ICJfZGlyZWN0IiA6ICIi
LCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgYnlWYWxJbmZvLT5zdHVi
SW5mbyA9IGdlbi5zdHViSW5mbygpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3Mp
KSwgRnVuY3Rpb25QdHIocHV0S2luZCA9PSBEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIFB1dFByb3BlcnR5UHRyVGFnKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJU
YWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5k
ID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYykpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBjbGFzcyBKSVRTdHViUm91dGluZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSklUU3R1
YlJvdXRpbmUpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpJ
VFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSkKKyAgICBKSVRT
dHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+JiBjb2RlKQogICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAgICAsIG1fcmVmQ291bnQo
MSkKICAgICB7CkBAIC01OCw5ICs1OCw5IEBAIHB1YmxpYzoKICAgICAvLyBVc2UgdGhpcyBpZiB5
b3Ugd2FudCB0byBwYXNzIGEgQ29kZVB0ciB0byBzb21lb25lIHdobyBpbnNpc3RzIG9uIHRha2lu
ZwogICAgIC8vIGEgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPi4KICAgICBzdGF0aWMgUmVmPEpJVFN0
dWJSb3V0aW5lPiBjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciByYXdDb2RlUG9pbnRlcikKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByYXdDb2RlUG9pbnRlcikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEpJVFN0dWJSb3V0aW5lKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHJhd0NvZGVQb2ludGVyKSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50
ZXIpKSk7CiAgICAgfQogICAgIAogICAgIHZpcnR1YWwgfkpJVFN0dWJSb3V0aW5lKCk7CkBAIC02
OSwxMSArNjksMTEgQEAgcHVibGljOgogICAgIC8vIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpcyBj
b3B5YWJsZSwgYnV0IGF0IHRoZSBjb3N0IG9mIHJlZmVyZW5jZQogICAgIC8vIGNvdW50aW5nIGNo
dXJuLiBSZXR1cm5pbmcgYSByZWZlcmVuY2UgaXMgYSBnb29kIHdheSBvZiByZWR1Y2luZwogICAg
IC8vIHRoZSBjaHVybi4KLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CiAg
ICAgCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhc0NvZGVQdHIoUmVmPEpJVFN0
dWJSb3V0aW5lPiYmIHN0dWJSb3V0aW5lKQorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGFzQ29kZVB0cihSZWY8SklUU3R1YlJvdXRpbmU+JiYg
c3R1YlJvdXRpbmUpCiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0
ID0gc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gcmVzdWx0ID0gc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCk7CiAgICAgICAgIEFTU0VSVCghIXJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IG1fY29kZTsKICAgICB1bnNpZ25lZCBtX3JlZkNvdW50OwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw0NiArNDUsNDYgQEAgSklUVGh1bmtzOjp+SklUVGh1bmtzKCkKIHsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSog
dm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIo
dm0sIG5hdGl2ZUNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0q
IHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHVi
KHZtLCBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxs
KFZNKiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3Rp
U3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdz
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZtKQogewogICAgIEFTU0VS
VChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2Fs
bFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVu
Y3Rpb25DYWxsKFZNKiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICBy
ZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpLmNvZGUoKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlv
bkNvbnN0cnVjdChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSogdm0pCiB7CiAgICAg
QVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFs
RnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlT
dHViKFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewogICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlT
dHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKKyAgICBDVElT
dHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpKTsKICAgICBpZiAoZW50cnkuaXNO
ZXdFbnRyeSkgewogICAgICAgICAvLyBDb21waWxhdGlvbiB0aHJlYWQgY2FuIG9ubHkgcmV0cmll
dmUgZXhpc3RpbmcgZW50cmllcy4KICAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwpAQCAtOTMsMTIgKzkzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6
OmN0aVN0dWIKICAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVu
a3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBDVElTdHViTWFwOjppdGVyYXRvciBlbnRyeSA9
IG1fY3RpU3R1Yk1hcC5maW5kKGdlbmVyYXRvcik7CiAgICAgaWYgKGVudHJ5ID09IG1fY3RpU3R1
Yk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpOwogICAg
IHJldHVybiBlbnRyeS0+dmFsdWU7CiB9CiAKQEAgLTEyMywxMiArMTIzLDEyIEBAIE5hdGl2ZUV4
ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIAogICAgIFJlZlB0cjxKSVRDb2RlPiBm
b3JDYWxsOwogICAgIGlmIChnZW5lcmF0b3IpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGVudHJ5ID0gZ2VuZXJhdG9yKHZtKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGVudHJ5ID0gZ2VuZXJhdG9yKHZtKS5yZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOwogICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZW50
cnksIGVudHJ5LmNvZGUoKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIH0gZWxzZQot
ICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ2FsbCh2bSkpLCBK
SVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CisgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcg
TmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDYWxsKHZtKS5yZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIAotICAgIFJlZjxKSVRDb2Rl
PiBmb3JDb25zdHJ1Y3QgPSBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZt
KSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKTsKKyAgICBSZWY8SklUQ29kZT4gZm9yQ29uc3Ry
dWN0ID0gYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVj
dCh2bSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KTsKICAgICAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKCp2bSwgZm9yQ2FsbC5yZWxlYXNlTm9uTnVsbCgpLCBmdW5jdGlv
biwgV1RGTW92ZShmb3JDb25zdHJ1Y3QpLCBjb25zdHJ1Y3RvciwgaW50cmluc2ljLCBzaWduYXR1
cmUsIG5hbWUpOwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtl
X3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSksIFdlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhpcykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRodW5rcy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNSArNTEsMTUgQEAgcHVibGlj
OgogICAgIEpJVFRodW5rcygpOwogICAgIHZpcnR1YWwgfkpJVFRodW5rcygpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN0aU5hdGl2ZVRhaWxDYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0
aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxsKFZNKik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0q
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRh
aWxDYWxsKFZNKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBj
dGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RydWN0KFZNKik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihW
TSosIFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdD
VElTdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3Ip
OwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBU
aHVua0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0
IFN0cmluZyYgbmFtZSk7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwog
ICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiBDVElTdHViTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gQ1RJU3R1Yk1hcDsKICAgICBD
VElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKIAogICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxUYWdnZWRO
YXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFN0cmluZz4gSG9zdEZ1bmN0aW9u
S2V5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UENUb0NvZGVPcmlnaW5NYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA0LDIwICsyMDQsMjAg
QEAgUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVAogICAgICAgICAgICAg
Y29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8dWludHB0cl90PihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgIH07CiAKLSAgICBtX3BjUmFu
Z2VTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJz
dCgpLnN0YXJ0KS5kYXRhTG9jYXRpb248dWludHB0cl90PigpOwotICAgIG1fcGNSYW5nZUVuZCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihidWlsZGVyLm1fY29kZVJhbmdlcy5sYXN0KCkuZW5kKS5k
YXRhTG9jYXRpb248dWludHB0cl90PigpOworICAgIG1fcGNSYW5nZVN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPE5vUHRyVGFnPihidWlsZGVyLm1fY29kZVJhbmdlcy5maXJzdCgpLnN0YXJ0
KS5kYXRhTG9jYXRpb248dWludHB0cl90PigpOworICAgIG1fcGNSYW5nZUVuZCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxOb1B0clRhZz4oYnVpbGRlci5tX2NvZGVSYW5nZXMubGFzdCgpLmVuZCku
ZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKTsKICAgICBtX3BjUmFuZ2VFbmQgLT0gMTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWlsZGVyLm1fY29kZVJhbmdlcy5zaXplKCk7IGkr
KykgewogICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkNvZGVSYW5nZSYgY29kZVJh
bmdlID0gYnVpbGRlci5tX2NvZGVSYW5nZXNbaV07Ci0gICAgICAgIHZvaWQqIHN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVSYW5nZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7Ci0gICAg
ICAgIHZvaWQqIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2RlUmFuZ2UuZW5kKS5kYXRh
TG9jYXRpb24oKTsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
Tm9QdHJUYWc+KGNvZGVSYW5nZS5zdGFydCkuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIHZvaWQq
IGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oY29kZVJhbmdlLmVuZCkuZGF0
YUxvY2F0aW9uKCk7CiAgICAgICAgIEFTU0VSVChtX3BjUmFuZ2VTdGFydCA8PSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihzdGFydCkpOwogICAgICAgICBBU1NFUlQobV9wY1JhbmdlRW5kID49IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZCkgLSAxKTsKICAgICAgICAgaWYgKHN0YXJ0ID09IGVu
ZCkKICAgICAgICAgICAgIEFTU0VSVChpID09IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSAt
IDEpOwogICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICBBU1NFUlQobGlua0J1ZmZlci5s
b2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2kgLSAxXS5lbmQpLmRhdGFMb2NhdGlvbigp
ID09IHN0YXJ0KTsKKyAgICAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9Q
dHJUYWc+KGJ1aWxkZXIubV9jb2RlUmFuZ2VzW2kgLSAxXS5lbmQpLmRhdGFMb2NhdGlvbigpID09
IHN0YXJ0KTsKIAogICAgICAgICBidWlsZFBDVGFibGUoc3RhcnQpOwogICAgICAgICBidWlsZENv
ZGVPcmlnaW5UYWJsZShjb2RlUmFuZ2UuY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzQsNiArNzQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRCdWlsZE1hcHBp
bmc7CiB9OwogCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDM2NjU4PgogY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBDVG9Db2RlT3JpZ2lu
TWFwKTsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQb2x5bW9ycGhpY0NhbGxD
YXNlOjpkdW1wKFByaW50U3RyZQogfQogCiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVy
RnJhbWUsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiYgY29kZVJlZiwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lLAogICAgIENhbGxMaW5rSW5mbyYgaW5mbywgY29uc3QgVmVjdG9yPFBvbHltb3Jw
aGljQ2FsbENhc2U+JiBjYXNlcywKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4mJiBmYXN0Q291
bnRzKQogICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGVSZWYsIHZtKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDcgKzgzLDcgQEAg
cHJpdmF0ZToKIGNsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdh
cmVKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6CiAgICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUoCi0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlND
ZWxsKiBvd25lciwKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKICAgICAgICAgRXhlY1N0
YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGlj
Q2FsbENhc2U+JiwKICAgICAgICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+JiYgZmFzdENvdW50cyk7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDQwICs2NiwzNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGlj
IEZ1bmN0aW9uUHRyIHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNh
bGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKIHsKLSAgICBGdW5jdGlvblB0ciB0YXJnZXQgPSBN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbCk7CisgICAgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8T3Bl
cmF0aW9uUHRyVGFnPihjYWxsKTsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAg
ICBhdXRvKiBjYWxsVGFyZ2V0ID0gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspLmNhbGxUYXJnZXQoKTsKLSAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uUHRyKGNhbGxUYXJnZXQsIENGdW5jdGlvblB0clRhZyk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRh
cmdldC5leGVjdXRhYmxlQWRkcmVzcygpKS5yZXRhZ2dlZDxKSVRUaHVua1B0clRhZz4oKTsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jay0+dm0oKS0+ZnRsVGh1bmtzLT5rZXlGb3JTbG93UGF0aENh
bGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpLnJldGFnZ2VkPENGdW5jdGlvblB0clRhZz4oKTsK
ICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQotICAgIHJldHVybiBGdW5jdGlvblB0cih1bnRhZ0NGdW5jdGlvblB0cih0
YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgUHV0UHJvcGVydHlQdHJUYWcpLCBDRnVuY3Rpb25Q
dHJUYWcpOworICAgIHJldHVybiB0YXJnZXQucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwog
fQogCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbiwgUHRy
VGFnIGNhbGxUYWcpCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogI2lmIEVOQUJMRShG
VExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQp
IHsKICAgICAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKICAgICAgICAgRlRMOjpUaHVu
a3MmIHRodW5rcyA9ICp2bS5mdGxUaHVua3M7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIHRhcmdldCA9
IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0PE9wZXJhdGlvblB0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xv
d1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQucmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxK
SVRUaHVua1B0clRhZz4oKSk7CiAgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRo
dW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKLSAgICAgICAga2V5
ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKHRodW5rcy5nZXRT
bG93UGF0aENhbGxUaHVuayhrZXkpLmNvZGUoKSk7Ci0gICAgICAgIGFzc2VydElzVGFnZ2VkV2l0
aChuZXdDYWxsZWVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBrZXkuY2FsbFB0clRhZygp
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1
bmN0aW9uKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0
aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4odGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5rKGtleSkucmV0
YWdnZWRDb2RlPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KGNhbGwsIEZ1bmN0aW9uUHRyKG5ld0NhbGxlZUZ1bmN0aW9uLCBjYWxsVGFnKSk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2Vk
PE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKIGVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewpAQCAt
MTUwLDcgKzE0Nyw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnQK
ICAgICB9CiB9CiAKLWlubGluZSBGdW5jdGlvblB0ciBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24oR2V0QnlJREtpbmQga2luZCkKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihHZXRCeUlES2lu
ZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlJREtpbmQ6Ok5v
cm1hbDoKQEAgLTE2Niw3ICsxNjMsNyBAQCBpbmxpbmUgRnVuY3Rpb25QdHIgYXBwcm9wcmlhdGVP
cHRpbWl6aW5nCiAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWQ7CiB9CiAKLWlubGluZSBGdW5j
dGlvblB0ciBhcHByb3ByaWF0ZUdldEJ5SWRGdW5jdGlvbihHZXRCeUlES2luZCBraW5kKQoraW5s
aW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUlkRnVuY3Rp
b24oR2V0QnlJREtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIEdl
dEJ5SURLaW5kOjpOb3JtYWw6CkBAIC0yMTAsNyArMjA3LDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5m
bywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24o
KSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0
eVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNjcsNyAr
MjY0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0
QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZihjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzc2LDcgKzM3
Myw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNs
YXNzSW5mb09yTnVsbCh2bSksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTEsNyArMzg4LDcgQEAgdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIAogICAgIGlmICh0cnlDYWNoZUdl
dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5k
KSA9PSBHaXZlVXBPbkNhY2hlKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2V0QnlJZEZ1
bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFw
cHJvcHJpYXRlR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKICAgICB9CiB9CiAKQEAgLTQ2Myw3ICs0
NjAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBh
dGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1Bh
dGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpLCBQdXRQcm9wZXJ0eVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENh
bGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRS
ZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTU4Miw3ICs1NzksNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwogCi0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXAoc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNTk3LDcgKzU5NCw3IEBAIHZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1YKICAgICAKICAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1
ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBH
aXZlVXBPbkNhY2hlKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7Ci0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSwgUHV0UHJvcGVydHlQdHJUYWcpOworICAgICAgICBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkp
OwogICAgIH0KIH0KIApAQCAtNjcxLDcgKzY2OCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUluKAogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
CiAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2hhYmxlSnVtcEZvckluKCksCi0gICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY4NiwyNCArNjgzLDIzIEBAIHZvaWQgcmVwYXRj
aEluKAogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICBpZiAodHJ5Q2FjaGVJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0
dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9w
ZXJhdGlvbkluLCBDRnVuY3Rpb25QdHJUYWcpOworICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCks
IG9wZXJhdGlvbkluKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIFB0clRh
ZyBsaW5rVGFnKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBj
b2RlUmVmKQogewotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLnJldGFn
Z2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29kZSgpKSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgUHRyVGFnIGxpbmtUYWcpCitzdGF0aWMgdm9p
ZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywg
dm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKSwgbGlua1RhZyk7CisgICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHVi
Um91dGluZVB0clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2bSwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJU
YWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCB2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmssIGxpbmtUYWcpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOworICAgIGxpbmtTbG93Rm9yKHZt
LCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZvLnNldFNsb3dT
dHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgKnZtLCBudWxscHRyLCB0cnVl
KSk7CiB9CiAKQEAgLTcyMSw3ICs3MTcsNyBAQCBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93
bmVyKEpTQ2VsbCogCiAKIHZvaWQgbGlua0ZvcigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBK
U09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgUHRyVGFnIGNv
ZGVUYWcpCisgICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsK
IApAQCAtNzQzLDE0ICs3MzksMTMgQEAgdm9pZCBsaW5rRm9yKAogICAgIGlmIChzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwg
ZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25M
YWJlbChjb2RlUHRyLnJldGFnZ2VkKGNvZGVUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigp
LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAo
Y2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0Nh
bGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5z
cGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dT
dHVicygpKSB7Ci0gICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtQb2x5bW9ycGhp
Y0NhbGxQdHJUYWcsICZ2bSk7Ci0gICAgICAgIGxpbmtTbG93Rm9yKCZ2bSwgY2FsbExpbmtJbmZv
LCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IsIGxpbmtUYWcpOworICAgICAgICBs
aW5rU2xvd0Zvcigmdm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTc1OSw3ICs3NTQsNyBA
QCB2b2lkIGxpbmtGb3IoCiAKIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKCkpOwogICAgIApAQCAtNzc0LDggKzc2OSw4IEBAIHZvaWQgbGlua0RpcmVjdEZv
cigKIAogICAgIGlmIChjYWxsTGlua0luZm8uY2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkRp
cmVjdFRhaWxDYWxsKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXBUb05vcChj
YWxsTGlua0luZm8ucGF0Y2hhYmxlSnVtcCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwo
Y29kZVB0cikpOwotICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2Fs
bExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
Pihjb2RlUHRyKSk7CisKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxsZWVD
b2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgJmNhbGxMaW5rSW5mbyk7CiB9CkBAIC03
ODksNyArNzg0LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcigKICAgICBsaW5rU2xvd0Zvcih2bSwgY2Fs
bExpbmtJbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgUHRyVGFn
IGNvZGVUYWcpCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4g
Y29kZVJlZikKIHsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKICAgICAgICAg
Y2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CkBAIC04MDEsNyArNzk2LDcgQEAgc3RhdGlj
IHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSQogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKCkpLCAwKTsKLSAg
ICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZiwgY29kZVRhZyk7Cisg
ICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwogICAgICAgICBj
YWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsKICAgICB9CiAgICAgY2FsbExpbmtJbmZvLmNsZWFy
U2VlbigpOwpAQCAtODE2LDggKzgxMSw3IEBAIHZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWwKICAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAg
IGRhdGFMb2coIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIo
KSwgIlxuIik7CiAgICAgCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJU
YWcsICZ2bSk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSwgbGlua1RhZyk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKIHZvaWQgbGlua1ZpcnR1YWxGb3Io
RXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTgyOSwxNiAr
ODIzLDE1IEBAIHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWwKICAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRh
dGFMb2coIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNv
ZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSksICJcbiIpOwogCi0gICAgUHRyVGFn
IGxpbmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCAmdm0pOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCBjYWxs
TGlua0luZm8pOwotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVu
aywgbGlua1RhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCBjYWxsTGlua0luZm8pOwor
ICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywg
dm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIAogbmFtZXNwYWNlIHsKIHN0cnVjdCBDYWxsVG9Db2Rl
UHRyIHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0cjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Y29kZVB0cjsKIH07CiB9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCiAKQEAgLTEwMzQsNyArMTAy
Nyw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgCiAgICAgICAgIENhbGxW
YXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7CiAgICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAgICAgIGlmICh2YXJp
YW50LmV4ZWN1dGFibGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJs
ZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50
LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja05vdFJlcXVpcmVkKTsKQEAgLTEwODAsNyArMTA3Myw3IEBAIHZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbCgKICNlbmRpZgogICAgIH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsK
KyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUNCk7CiAgICAgCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cg
PSBzdHViSml0Lmp1bXAoKTsKQEAgLTEwOTgsMjEgKzEwOTEsMjAgQEAgdm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKAogICAgICAgICAvLyB3aXRoIGEgbm9uLWRlY29yYXRlZCBib3R0b20gYml0IGJ1
dCBhIG5vcm1hbCBjYWxsIGNhbGxzIGFuIGFkZHJlc3Mgd2l0aCBhIGRlY29yYXRlZCBib3R0b20g
Yml0LgogICAgICAgICBib29sIGlzVGFpbENhbGwgPSBjYWxsVG9Db2RlUHRyLmNhbGwuaXNGbGFn
U2V0KENDYWxsSGVscGVyczo6Q2FsbDo6VGFpbCk7CiAgICAgICAgIHZvaWQqIHRhcmdldCA9IGlz
VGFpbENhbGwgPyBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9D
b2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldCkpKTsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ0UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRhcmdldCkpKTsKICNlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIucmV0YWdn
ZWQoQ29kZVB0clRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9D
b2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoaXNXZWJBc3NlbWJseSB8
fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkp
OwotICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcs
ICZ2bSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5n
ZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
KGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJS
b3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAg
ICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBOZWFyQ29kZVB0clRhZywKKyAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAgICAgIlBvbHltb3JwaGlj
IGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCiAgICAgICAg
ICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxl
ckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFi
ZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0
cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLApAQCAtMTEyMSw3ICsxMTEzLDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBs
YWNlV2l0aEp1bXAoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxl
IG9uIDY0LWJpdHMsIGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNl
IGEgbm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBw
YXRoCkBAIC0xMTM5LDcgKzExMzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKIHZv
aWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZyk7Cisg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQp
KTsKICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIHN0dWJJbmZv
LnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIApAQCAtMTE1OCw3ICsxMTUwLDcgQEAgdm9p
ZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9
CiAKLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93
UGF0aENhbGxMb2NhdGlvbigpLCBvcHRpbWl6ZWRGdW5jdGlvbiwgUHV0UHJvcGVydHlQdHJUYWcp
OworICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uKTsKICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bigpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNT
dGF0ZSosIEoKIHZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgU3RydWN0
dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hJbihFeGVj
U3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3Qg
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgbGlua0ZvcihFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIFB0clRhZyk7Ci12b2lkIGxpbmtEaXJlY3RGb3IoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQg
bGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5r
RGlyZWN0Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsK
IHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJik7CkBAIC01NCw3
ICs1NCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWwKIHZvaWQg
cmVzZXRHZXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlJREtpbmQp
Owogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZv
aWQgcmVzZXRJbihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbCwgRnVuY3Rpb25Q
dHIgbmV3Q2FsbGVlRnVuY3Rpb24sIFB0clRhZyBjYWxsVGFnKTsKK3ZvaWQgZnRsVGh1bmtBd2Fy
ZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93
UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUOjphcmd1bWVu
dEdQUjApOwogICAgICAgICBtX2ppdC0+bW92ZShKSVQ6OlRydXN0ZWRJbW1QdHIobV9wYyksIEpJ
VDo6YXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNs
b3dQYXRoUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIEpJVDo6Q2FsbCBjYWxsID0g
bV9qaXQtPmNhbGwodGFnKTsKLSAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNv
cmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKG1fc2xvd1BhdGhG
dW5jdGlvbiwgdGFnKSkpOworICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IG1faml0LT5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwsIG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG1fc2xvd1BhdGhGdW5jdGlvbikpKTsKIAogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgICAgIG1faml0LT5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxNiksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNp
b24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwyNSArMTY0LDIzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ss
IGNvbnN0IGNoYXIqIHRodW5rS2luZCkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZh
bGxiYWNrKSk7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7
Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZVB0clRh
ZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7CisgICAgICAgICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFs
aXplZCB0aHVuayBmb3IgJXMiLCB0aHVua0tpbmQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
QXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQKICAgICAgICAgLy8gYW5kIHJldHVybiB2YWx1ZS4gTGlrZSBhbnkgc2Vu
c2libGUgYXJjaGl0ZWN0dXJlIHdvdWxkLgotICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJs
ZShGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGUo
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewotICAgICAg
ICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNwZWNpYWxpemVkVGh1bmtQdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGNhbGwodGFnKSwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykpKTsKKyAgICAgICAgICAg
IG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoSklUVGh1bmtQdHJUYWcpLCBmdW5j
dGlvbi5yZXRhZ2dlZDxKSVRUaHVua1B0clRhZz4oKSkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oRnVuY3Rpb25Q
dHIgZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1Jl
dHVybihGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoIWlzWDg2KCkpCiAgICAgICAgICAgICAgICAgcHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKQEAgLTIwOSw3ICsyMDcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IG1fZmFpbHVyZXM7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+
PiBtX2NhbGxzOworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENhbGwsIEZ1bmN0aW9uUHRyPEpJ
VFRodW5rUHRyVGFnPj4+IG1fY2FsbHM7CiAgICAgfTsKIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDExICsyNywxMyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIlB0clRhZy5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLXR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKFZNKik7Cit1c2luZyBU
aHVua0dlbmVyYXRvciA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gKCop
KFZNKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDcgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxs
SAogCiAvLyBXZSB3aWxsIGp1bXAgaGVyZSBpZiB0aGUgSklUIGNvZGUgdHJpZXMgdG8gbWFrZSBh
IGNhbGwsIGJ1dCB0aGUKIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlcyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IoVk0qIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCkBAIC03MCwyMyAr
NzAsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BF
bnRyeUZyYW1lKTsKIAotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyLCBjYWxsVGFn
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5k
bGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOwogCi0gICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRy
VGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIHRocm93RXhjZXB0aW9uVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93
IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OwogfQogCi1zdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0qIHZtLCBTcHJ0X0pJVE9wZXJhdGlvbl9FQ2xpIHNsb3dQYXRoRnVuY3Rpb24sIFB0clRhZyBl
eHBlY3RlZExpbmtlZFRhcmdldFRhZykKK3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVs
cGVycyYgaml0LCBWTSogdm0sIFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlv
bikKIHsKLSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgbmV4dFB0
clRhZ0lEKCkpOwotCiAgICAgaml0LnNhbml0aXplU3RhY2tJbmxpbmUoKnZtLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKQEAg
LTk5LDkgKzk0LDkgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6cmVnVDIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzMiksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihzbG93UGF0aEZ1bmN0aW9u
LCBjYWxsVGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1
bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIDgpLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
ICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBA
IC0xMDksOSArMTA0LDkgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShzbG93UGF0aEZ1bmN0aW9uKT4oR1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIoc2xvd1BhdGhGdW5jdGlv
biwgY2FsbFRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKLSAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oc2xvd1BhdGhG
dW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKQEAgLTEyMiw3ICsxMTcsNyBAQCBz
dGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4K
ICAgICAvLyBUaGUgc2Vjb25kIHJldHVybiB2YWx1ZSBHUFIgd2lsbCBob2xkIGEgbm9uLXplcm8g
dmFsdWUgZm9yIHRhaWwgY2FsbHMuCiAKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBKU0VudHJ5
UHRyVGFnKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQudW50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKQEAgLTEzMywxMCArMTI4LDEwIEBAIHN0YXRpYyB2b2lkIHNsb3dQ
YXRoRm9yKAogICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKIAogICAgIGRvTm90VHJhc2gubGluaygmaml0KTsKLSAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworICAgIGppdC5q
dW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRo
ZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFk
ZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxs
CkBAIC0xNDUsMzMgKzE0MCwyOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVu
a0dlbmVyCiAgICAgLy8gYmVlbiBhZGp1c3RlZCwgYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8g
YmUgYXZhaWxhYmxlIGZvciB1c2UuCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIFB0clRh
ZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rQ2FsbFJlc3VsdFB0clRhZywg
dm0pOwotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsLCBleHBlY3Rl
ZExpbmtlZFRhcmdldFRhZyk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0NhbGwpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZt
KTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgbGlua1RhZywgIkxpbmsgY2FsbCBz
bG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIC8vIEZv
ciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYg
eW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlv
dSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBQdHJUYWcgZXhwZWN0
ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFJlc3VsdFB0clRh
Zywgdm0pOwotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhp
Y0NhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKTsKIAotICAgIFB0clRhZyBsaW5rVGFnID0g
cHRyVGFnKExpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgbGlua1RhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGgg
dGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJMaW5rIHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIC8v
IEZJWE1FOiBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1lZ2Ftb3JwaGljIHZpcnR1
YWwgY2FsbCB2cy4gYSBzbG93CiAvLyBwYXRoIHZpcnR1YWwgY2FsbCBzbyB0aGF0IHdlIGNhbiBl
bmFibGUgZmFzdCB0YWlsIGNhbGxzIGZvciBtZWdhbW9ycGhpYwogLy8gdmlydHVhbCBjYWxscyBi
eSB1c2luZyB0aGUgc2h1ZmZsZXIuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4ODMxCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZN
KiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSogdm0sIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQogewogICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBK
U1ZBTFVFMzJfNjQsIHRoZSB0YWcgaXMgaW4gcmVnVDEpLgogICAgIC8vIFRoZSByZXR1cm4gYWRk
cmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhl
bmNlCkBAIC0yMzIsMTIgKzIyMywxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRo
dW5rRm9yKFZNCiAKICAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJh
Y2sgdG8gSklUIGNvZGUuCiAgICAgSlNJbnRlcmZhY2VKSVQ6OkxhYmVsIGNhbGxDb2RlKGppdC5s
YWJlbCgpKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwg
Q29kZVB0clRhZyk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVn
VDQsIEpTRW50cnlQdHJUYWcpOwogICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7
CiAgICAgICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVn
VDApOwogICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUNCk7
CiAgICAgfQotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBDb2RlUHRyVGFnKTsKKyAgICBq
aXQuanVtcChHUFJJbmZvOjpyZWdUNCwgSlNFbnRyeVB0clRhZyk7CiAKICAgICBub3RKU0Z1bmN0
aW9uLmxpbmsoJmppdCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUo
R1BSSW5mbzo6cmVnVDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7CkBAIC0yNDgsMTMgKzIzOSwx
MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNCiAgICAgc2xvd0Nh
c2UubGluaygmaml0KTsKICAgICAKICAgICAvLyBIZXJlIHdlIGRvbid0IGtub3cgYW55dGhpbmcs
IHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCi0gICAgUHRyVGFnIGV4cGVjdGVkTGlu
a2VkVGFyZ2V0VGFnID0gcHRyVGFnKExpbmtWaXJ0dWFsQ2FsbFJlc3VsdFB0clRhZywgdm0pOwot
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsLCBleHBlY3RlZExp
bmtlZFRhcmdldFRhZyk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVh
bENhbGwpOwogCi0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRy
VGFnLCB2bSk7CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLCBsaW5r
VGFnLAorICAgICAgICBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAg
ICJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsCiAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxs
TW9kZSgpID09IENhbGxNb2RlOjpSZWd1bGFyID8gImNhbGwiIDogY2FsbExpbmtJbmZvLmNhbGxN
b2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyAidGFpbCBjYWxsIiA6ICJjb25zdHJ1Y3QiKTsKIH0K
QEAgLTI2Miw3ICsyNTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9y
KFZNCiBlbnVtIFRodW5rRW50cnlUeXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRlclZpYUp1bXBXaXRo
U2F2ZWRUYWdzLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzIH07CiBlbnVtIGNsYXNzIFRo
dW5rRnVuY3Rpb25UeXBlIHsgSlNGdW5jdGlvbiwgSW50ZXJuYWxGdW5jdGlvbiB9OwogCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIFRodW5r
RnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25UeXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlwZSA9IEVudGVyVmlhQ2FsbCkKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUZvckdlbmVyYXRvcihWTSog
dm0sIFRodW5rRnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25UeXBlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlwZSA9IEVudGVyVmlhQ2FsbCkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYWJsZSB0byBsb2cgU2hhZG93Q2hpY2tlbiBw
cm9sb2d1ZSBwYWNrZXRzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTU2ODkKQEAgLTMwNyw5ICsyOTYsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVu
Y3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwogICAgICAgICBqaXQueG9yUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
biksIENvZGVQdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgSlNF
bnRyeVB0clRhZyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0
T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVQdHJUYWcpOworICAgICAgICBqaXQuY2Fs
bChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEludGVybmFs
RnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBKU0VudHJ5UHRyVGFn
KTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwgSlNJ
bnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIApAQCAtMzI4LDcgKzMxNyw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0Lmxv
YWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIEludGVybmFs
RnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBYODZSZWdpc3RlcnM6
OnI5KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNv
ZGVQb2lzb246OmtleSgpKSwgWDg2UmVnaXN0ZXJzOjplc2kpOwogICAgIGppdC54b3I2NChYODZS
ZWdpc3RlcnM6OmVzaSwgWDg2UmVnaXN0ZXJzOjpyOSk7Ci0gICAgaml0LmNhbGwoWDg2UmVnaXN0
ZXJzOjpyOSwgQ29kZVB0clRhZyk7CisgICAgaml0LmNhbGwoWDg2UmVnaXN0ZXJzOjpyOSwgSlNF
bnRyeVB0clRhZyk7CiAKICNlbHNlCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYo
ZWN4LCBlZHgsIHI4LCByOSwgLi4uKTsKQEAgLTM0Myw5ICszMzIsOSBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09
IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpT
SW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksIFg4NlJlZ2lzdGVyczo6cjkpOwogICAgICAgICBqaXQueG9yUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwg
WDg2UmVnaXN0ZXJzOjpyOSk7Ci0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZVB0
clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lz
dGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgSlNFbnRyeVB0clRhZyk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9y
KGtpbmQpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpB
ZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2
ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgSlNFbnRyeVB0clRhZyk7CiAKICAgICBqaXQuYWRkUHRyKEpT
SW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoNCAqIHNpemVvZihpbnQ2NF90KSksIEpTSW50ZXJm
YWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKQEAgLTM2Nyw3ICszNTYsNyBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgICAgIGppdC5s
b2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp4MSwgSW50ZXJu
YWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEFSTTY0UmVnaXN0
ZXJzOjp4Mik7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW02NChOYXRp
dmVDb2RlUG9pc29uOjprZXkoKSksIEFSTTY0UmVnaXN0ZXJzOjp4MSk7CiAgICAgaml0LnhvcjY0
KEFSTTY0UmVnaXN0ZXJzOjp4MSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKLSAgICBqaXQuY2FsbChB
Uk02NFJlZ2lzdGVyczo6eDIsIENvZGVQdHJUYWcpOworICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0
ZXJzOjp4MiwgSlNFbnRyeVB0clRhZyk7CiAKICNlbGlmIENQVShBUk0pIHx8IENQVShNSVBTKQog
I2lmIENQVShNSVBTKQpAQCAtMzgzLDkgKzM3Miw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5j
dGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgICAgICBqaXQu
eG9yUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246Omtl
eSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvbiksIENvZGVQdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
KSwgSlNFbnRyeVB0clRhZyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjEsIEludGVybmFsRnVu
Y3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlUHRyVGFnKTsKKyAg
ICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFy
Z3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihr
aW5kKSksIEpTRW50cnlQdHJUYWcpOwogCiAjaWYgQ1BVKE1JUFMpCiAgICAgLy8gUmVzdG9yZSBz
dGFjayBzcGFjZQpAQCAtNDI5LDkgKzQxOCw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlRm9yR2UKICNlbmRpZgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxs
RnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKLSAg
ICBQdHJUYWcgdGFnID0gcHRyVGFnKEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIG5leHRQdHJUYWdJ
RCgpKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb25QdHIob3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24sIHRhZykpLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDMpOwotICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgdGFnKTsKKyAg
ICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbikpLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDMpOworICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgT3BlcmF0
aW9uUHRyVGFnKTsKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGppdC5h
ZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwgSlNJbnRlcmZhY2VKSVQ6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbGlmIE9TKFdJTkRPV1MpCkBAIC00NDEsNDAgKzQyOSw0
MCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBDb2RlUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5lIiwgdGh1bmtGdW5jdGlvblR5cGUg
PT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAibmF0aXZlIiA6ICJpbnRlcm5hbCIs
IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZl
ZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyA/ICJU
YWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIiVz
ICVzJXMgdHJhbXBvbGluZSIsIHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBl
OjpKU0Z1bmN0aW9uID8gIm5hdGl2ZSIgOiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJW
aWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBl
ID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRh
Z3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwg
Q29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBu
YXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdl
bmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENvZGVGb3JDYWxsLCBF
bnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5h
dGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwg
VGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENvZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBX
aXRob3V0U2F2ZWRUYWdzKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0
cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2
ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENvZGVGb3JD
b25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW50ZXJuYWxGdW5jdGlvbkNh
bGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5h
dGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkludGVybmFsRnVuY3Rpb24s
IENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGludGVybmFsRnVuY3Rp
b25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50
ZXJuYWxGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRl
cmZhY2VKSVQgaml0KHZtKTsKIApAQCAtNDk0LDcgKzQ4Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZXh0cmFUZW1wKTsKICAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6cmVnVDMs
IGV4dHJhVGVtcCk7Ci0gICAgUHRyVGFnIHRlbXBSZXR1cm5QQ1RhZyA9IHB0clRhZyhBcml0eUZp
eHVwUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgUHRyVGFnIHRlbXBSZXR1cm5QQ1RhZyA9
IHN0YXRpY19jYXN0PFB0clRhZz4ocmFuZG9tKCkpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tUHRyKHRlbXBSZXR1cm5QQ1RhZyksIGV4dHJhVGVtcCk7CiAgICAgaml0
LnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKQEAgLTYxOSwxOSArNjA3LDE3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICNlbmRpZiAvLyBF
bmQgb2YgVVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbi4KIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIFB0clRhZyBhcml0eUZpeHVwVGFnID0g
cHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIHZtKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgYXJpdHlGaXh1cFRhZywgImZpeHVwIGFyaXR5Iik7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiZml4dXAgYXJpdHkiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKICAgICBqaXQuYnJl
YWtwb2ludCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSk7
Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRodW5rVGFnLCAidW5yZWFj
aGFibGUgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOwogfQogCiBzdGF0aWMgdm9pZCBzdHJp
bmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSkKQEAgLTY3Miw3ICs2
NTgsNyBAQCBzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0
LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRz
dCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckNvZGVB
dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2
bSwgMSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7CkBAIC02ODAsNyArNjY2LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbgogICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQ29kZUF0
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJBdFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAg
ICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7CkBAIC02ODksNyArNjc1LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdAogICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQXQiKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAg
ICAvLyBsb2FkIGNoYXIgY29kZQpAQCAtNjk5LDcgKzY4NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmcm9tQ2hhckNvZGVUaHVua0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRT
dHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vbkludEFyZ0p1bXA7CkBAIC03MjAsMTEgKzcwNiwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNsejMyIik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
KTsKIAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91Ymxl
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVn
VDApOwpAQCAtODgwLDEyICs4NjYsMTIgQEAgZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1
bmMpOwogCiBzdGF0aWMgY29uc3QgZG91YmxlIGhhbGZDb25zdGFudCA9IDAuNTsKICAgICAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9v
cikgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBA
IC05MjMsMTEgKzkwOSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVy
YXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsKHZtKSwgImZsb29yIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBj
ZWlsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KHZtLCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
dm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
dm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2Fk
SW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7
CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTk0
NiwxMSArOTMyLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IK
ICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAiY2VpbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5j
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZt
LCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKHRydW5jKSB8fCAhaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZElu
dDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwog
ICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC05Njks
MTEgKzk1NSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVua0dlbmVyYXRvCiAg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZt
KSwgInRydW5jIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcm91bmRU
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkgfHwgIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2
bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2
bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJ
bnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsK
ICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMTAw
MywzNyArOTg5LDM3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG8K
ICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAicm91bmQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhw
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5s
b2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2
aW5nUmV0dXJuKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImV4cCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdy
YXBwZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZl
VGFpbENhbGwodm0pLCAibG9nIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVu
a0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGFic1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
Zih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
Zih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KDApOwpAQCAtMTA4Niw3ICsxMDcyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFi
c1RodW5rR2VuZXJhdG9yKAogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhYnMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQodm0sIDIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEFyZzBK
dW1wOwpAQCAtMTExNywxMSArMTEwMywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRo
dW5rR2VuZXJhdG9yCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZVRhaWxDYWxsKHZtKSwgImltdWwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJh
bmRvbVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAwKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBqaXQuZW1pdFJhbmRvbVRodW5rKCp2bSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDApOwpAQCAtMTEyOSwxMSArMTExNSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cmFuZG9tVGh1bmtHZW5lcmF0CiAKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAicmFuZG9tIik7CiAjZWxzZQotICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogI2VuZGlmCiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBi
b3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0qIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCkBAIC0xMjE3LDE2
ICsxMjAzLDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKSVRDb2RlUG9pc29uOjprZXko
KSksIEdQUkluZm86OnJlZ1QxKTsKICAgICBqaXQueG9yNjQoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKICNlbmRpZgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86OnJlZ1QwLCBDb2RlUHRyVGFnKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMCwgQ29k
ZVB0clRhZyk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAs
IEpTRW50cnlQdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRy
VGFnKTsKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsK
ICAgICAKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwot
ICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIGxpbmtCdWZm
ZXIubGluayhub0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgbGlua0J1ZmZlciwgQ29kZVB0clRhZywgIlNwZWNp
YWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIp
OworICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5r
IGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0NiArMjYs
NDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
IgorI2luY2x1ZGUgIlB0clRhZy5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7Cit0
ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIGNsYXNzIFZNOwog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NhbGxUaHVuayhWTSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTSos
IENhbGxMaW5rSW5mbyYpOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdz
R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW50ZXJuYWxGdW5jdGlvbkNh
bGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1
cEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJh
dG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhw
VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2Vu
ZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoVk0q
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1Ro
dW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGxpbmtDYWxsVGh1bmsoVk0qLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0qLCBDYWxsTGlua0lu
Zm8mKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxs
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJu
YWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZN
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2Vu
ZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hh
ckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2VpbFRodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4
cFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJhbmRvbVRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1
bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJn
c0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwyNiArNTgsMjYgQEAg
dm9pZCBpbml0aWFsaXplKCkKICNlbHNlIC8vIEVOQUJMRShKSVQpCiAgICAgbGxpbnRfZW50cnko
JkRhdGE6OnNfb3Bjb2RlTWFwKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09G
X0JZVEVDT0RFX0lEUzsgKytpKSB7Ci0gICAgICAgIFB0clRhZyB0YWcgPSAoaSA9PSBvcF9jYXRj
aCkgPyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnIDogQnl0ZWNvZGVQdHJUYWc7Ci0gICAgICAgIERh
dGE6OnNfb3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1hcFtpXSwgdGFn
KTsKLSAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSURT
OyArK2kpCisgICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cihEYXRhOjpz
X29wY29kZU1hcFtpXSwgQnl0ZWNvZGVQdHJUYWcpOwogCiAgICAgc3RhdGljIGNvbnN0IFB0clRh
ZyB0YWdzRm9yT3Bjb2RlW10gPSB7Ci0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X3Byb2dy
YW1fcHJvbG9ndWUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZXZhbF9wcm9sb2d1ZQot
ICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZQotICAg
ICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZQotICAg
ICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
Ci0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlfY2hlY2sKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZ2VuZXJpY19yZXR1cm5f
cG9pbnQKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSB0YWdnZWQgd2l0aCBKU0lu
dGVybmFsUHRyVGFnIGluc3RlYWQgb2YgSlNFbnRyeVRhZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcxMgorICAgICAgICBKU0VudHJ5UHRy
VGFnLCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8v
IGxsaW50X2V2YWxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfbW9k
dWxlX3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFnLCAv
LyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaworICAgICAgICBKU0VudHJ5UHRy
VGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrCisgICAgICAg
IEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50CiAgICAgICAgIEJ5
dGVjb2RlUHRyVGFnLCAvLyBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCiAg
ICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIC8vIGxsaW50X3Rocm93X2R1cmluZ19jYWxs
X3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxfdHJh
bXBvbGluZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3RydWN0X3Ry
YW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxs
aW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxp
bnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAgIEpTRW50cnlQdHJUYWcsIC8v
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQorICAgICAgICBKU0VudHJ5
UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQog
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlv
bgogICAgIH07CiAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAg
RGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdID0gdGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1h
cFtvcGNvZGVJRF0sIHRhZ3NGb3JPcGNvZGVbaV0pOwogICAgIH0KIAotICAgIHZvaWQqIGhhbmRs
ZXIgPSBMTEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lKTsKKyAgICB2b2lkKiBoYW5kbGVyID0gTExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKGxs
aW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF4T3Bjb2RlTGVuZ3RoICsgMTsgKytpKQogICAgICAgICBEYXRhOjpzX2V4Y2VwdGlv
bkluc3RydWN0aW9uc1tpXS51LnBvaW50ZXIgPSBoYW5kbGVyOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgg
KzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1
ZGUgIlB0clRhZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTUsNyArNTUsOCBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBJbnN0cnVjdGlvbiogZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7CiAg
ICAgZnJpZW5kIE9wY29kZSogb3Bjb2RlTWFwKCk7CiAgICAgZnJpZW5kIE9wY29kZSBnZXRPcGNv
ZGUoT3Bjb2RlSUQpOwotICAgIGZyaWVuZCB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEKTsKKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4g
Z2V0Q29kZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldENvZGVSZWYoT3Bjb2RlSUQpOwogfTsKIAogdm9p
ZCBpbml0aWFsaXplKCk7CkBAIC03OSwxNiArODAsNDMgQEAgaW5saW5lIE9wY29kZSBnZXRPcGNv
ZGUoT3Bjb2RlSUQgaWQpCiAjZW5kaWYKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBnZXRDb2Rl
UHRyKE9wY29kZUlEIGlkKQorQUxXQVlTX0lOTElORSB2b2lkKiBnZXRFeGVjdXRhYmxlQWRkcmVz
cyhPcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZ2V0T3Bjb2RlKGlkKSk7CisgICAgQVNTRVJUKG9wY29kZUlEID49IE5VTUJFUl9PRl9CWVRF
Q09ERV9JRFMpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRPcGNvZGUo
b3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK3sK
KyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhnZXRPcGNvZGUob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRh
Zz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihP
cGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsK
IH0KIAogI2lmIEVOQUJMRShKSVQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElO
RSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKE9wY29kZUlEIG9wY29kZUlEKQoreworICAg
IEFTU0VSVChvcGNvZGVJRCA+PSBOVU1CRVJfT0ZfQllURUNPREVfSURTKTsKKyNpZiBDT01QSUxF
UihNU1ZDKQorICAgIC8vIFdvcmthcm91bmQgZm9yIE1TVkMgbm90IGxpa2luZyB0aGUgLnRlbXBs
YXRlIGZvbygpIGludm9jYXRpb24uCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29k
ZVB0ciA9IGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TExJbnRDb2RlPihleGVjdXRhYmxlQWRkcmVzcyk7CisjZWxzZQorICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50
ZW1wbGF0ZSBleGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorfQogCi1BTFdBWVNfSU5MSU5F
IExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgY29kZUlkKQorI2Vsc2UKK0FM
V0FZU19JTkxJTkUgdm9pZCogZ2V0Q29kZVB0cihPcGNvZGVJRCBpZCkKIHsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHIoY29kZUlkKSk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9wY29kZShpZCkpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQu
Y3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRFbnRyeXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEyIEBAIHN0YXRp
YyB2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0KICAgICBpZiAoVk06OmNhblVzZUpJ
VCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgICAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRv
ciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KS5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICAgICAg
YWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxs
RW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSwgdm0uZ2V0Q1RJ
U3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0
cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3Ry
dWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0
Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0
eUNoZWNrVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkBAIC01OSwxOSArNTksMTkgQEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rp
b25FbnRyeXBvaW50KFZNJiB2bQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAg
ICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2spLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAg
ICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGdldENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4obGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAg
ICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShnZXRDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+KGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBnZXRDb2RlUHRy
PEpTRW50cnlQdHJUYWc+KGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2sp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRFdmFs
RW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IHZt
LmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJU
YWc+KCk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgICAgIGFkb3B0
UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzksNyArNzksNyBAQCBz
dGF0aWMgdm9pZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIENvCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGlu
dF9ldmFsX3Byb2xvZ3VlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZVJlZiA9IGdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfZXZhbF9wcm9sb2d1
ZSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICBhZG9wdFJlZigqbmV3IERp
cmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CiB9CkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRy
eXBvaW50KFZNJiB2bSwKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklU
KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElT
dHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKHByb2dyYW1FbnRy
eVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENv
ZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIHZvaWQgc2V0UHJvZ3Jh
bUVudHJ5cG9pbnQoVk0mIHZtLAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURf
UEFSQU0odm0pOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBnZXRD
b2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpOwogICAgIGNvZGVC
bG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNv
ZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQpA
QCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50
KFYKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKG1vZHVsZVBy
b2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRy
eVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENv
ZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1
bGVQcm9ncmFtRW50cnlwb2ludChWCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNF
RF9QQVJBTSh2bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3JhbV9w
cm9sb2d1ZSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVS
ZWYgPSBnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xv
Z3VlKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZSgKICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYu
Y29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQqIGNhbGxUb1Rocm93KEV4ZWNT
dGF0ZSogZXhlYykKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwog
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlv
bigpKSwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CiAjZW5kaWYKLSAgICByZXR1cm4gTExJbnQ6Omdl
dENvZGVQdHIobGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZSk7CisgICAgcmV0dXJu
IExMSW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyhsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFt
cG9saW5lKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0NCwxMSArNDQ0LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CiAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uID0gY29k
ZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgUHRy
VGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVQdHJUYWcsIGNvZGVCbG9jaywgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24u
cmV0YWdnZWQobG9jYXRpb25UYWcsIENvZGVQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBU
YXJnZXQsIGV4ZWMtPnRvcE9mRnJhbWUoKSk7CkBAIC0xNDM4LDcgKzE0MzcsNyBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkgewogICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSB2bS5nZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5j
dGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsK
IAogICAgICAgICAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJ
bmZvKSB7CkBAIC0xNDUwLDEyICsxNDQ5LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
c2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUo
KTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQodm0sIGNhbGxlckNv
ZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlv
bik7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNv
ZGVQdHIucmV0YWdnZWQoQ29kZVB0clRhZywgTExJbnRDYWxsSUNQdHJUYWcpOworICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0
aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICAg
ICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBleGVjQ2Fs
bGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3Bl
LnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIHBj
LCBjYWxsZWVBc1ZhbHVlLCBraW5kKTsKQEAgLTE0NjQsNyArMTQ2Myw3IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxl
ZS0+c2NvcGVVbmNoZWNrZWQoKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNh
bGxlZS0+ZXhlY3V0YWJsZSgpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5k
LCBNdXN0Q2hlY2tBcml0eSk7CkBAIC0xNTAwLDE0ICsxNDk5LDE0IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVt
b3ZlKCk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJs
b2NrLCBjYWxsZWUpOwogICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2
bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hp
bmVDb2RlVGFyZ2V0ID0gY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBMTEludENhbGxJQ1B0
clRhZyk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRy
OwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5j
b21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCi0gICAgYXNzZXJ0SXNUYWdn
ZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7CisgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CiAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxl
ZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICBMTElOVF9D
QUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWND
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCkBAIC0xNjM3LDcgKzE2MzYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY2FsbF9ldmFsCiAgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMocGNbM10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShl
eGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkg
PSBjYWxsZWVBc1ZhbHVlOwotICAgIGV4ZWNDYWxsZWUtPnNldFJldHVyblBDKExMSW50OjpnZXRD
b2RlUHRyKGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50KSk7CisgICAgZXhlY0NhbGxlZS0+c2V0
UmV0dXJuUEMoTExJbnQ6OmdldEV4ZWN1dGFibGVBZGRyZXNzKGxsaW50X2dlbmVyaWNfcmV0dXJu
X3BvaW50KSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAgIGV4ZWMtPnNl
dEN1cnJlbnRWUEMocGMpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBFbmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2
bUVudHJ5VG9XYXNtKHZvaWQqIGNvZGUsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIGZyYW1lKQog
eworICAgIGNvZGUgPSByZXRhZ0NvZGVQdHI8V2FzbUVudHJ5UHRyVGFnLCBKU0VudHJ5UHRyVGFn
Pihjb2RlKTsKICAgICByZXR1cm4gdm1FbnRyeVRvSmF2YVNjcmlwdChjb2RlLCB2bSwgZnJhbWUp
OwogfQogICAgIApAQCAtNTEsNTAgKzUyLDUyIEBAIEVuY29kZWRKU1ZhbHVlIEpTX0VYUE9SVF9Q
UklWQVRFIHZtRW50cnkKIAogbmFtZXNwYWNlIExMSW50IHsKIAotc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhWTSogdm0sIE9wY29kZUlEIG9wY29k
ZUlELCBjb25zdCBjaGFyICp0aHVua0tpbmQpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhWTSogdm0sIE9wY29kZUlE
IG9wY29kZUlELCBjb25zdCBjaGFyICp0aHVua0tpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQg
aml0KHZtKTsKIAogICAgIC8vIEZJWE1FOiB0aGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0
byBkbyBpdCBvbiBYODYsIGJ1dCBJJ20gbm90IHN1cmUgSSBjYXJlLgotICAgIExMSW50Q29kZSB0
YXJnZXQgPSBMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyKG9wY29kZUlEKTsKLSAgICBqaXQubW92
ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdl
dCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwotICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklU
OjpyZWdUMCwgQ29kZVB0clRhZyk7CisgICAgTExJbnRDb2RlIHRhcmdldCA9IExMSW50OjpnZXRD
b2RlRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4ob3Bjb2RlSUQpOworICAgIGFzc2VydElzVGFn
Z2VkV2l0aCh0YXJnZXQsIEpTRW50cnlQdHJUYWcpOworCisgICAgaml0Lm1vdmUoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW1QdHIodGFyZ2V0KSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAg
ICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENvZGVQdHJUYWcsICJMTEludCAlcyBwcm9sb2d1
ZSB0aHVuayIsIHRodW5rS2luZCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiTExJbnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBn
ZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9n
dWUsICJmdW5jdGlvbiBmb3IgY2FsbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8o
dm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUsICJmdW5jdGlvbiBmb3Ig
Y29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxB
cml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3IgY2FsbCB3aXRoIGFyaXR5
IGNoZWNrIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVj
dEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJh
dG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxs
aW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3IgY29u
c3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV2
YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVy
biBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSwgImV2YWwi
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvZ3JhbUVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSwgInByb2dyYW0iKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbW9kdWxlUHJvZ3JhbUVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUsICJtb2R1bGVfcHJvZ3Jh
bSIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRo
dW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEyICs0MiwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5CiAKIG5hbWVzcGFjZSBMTEludCB7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2Vu
ZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZv
ckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9y
Q29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2dyYW1FbnRyeVRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG1vZHVsZVBy
b2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpM
TEludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDExLDggKzIwMTEsOCBAQCBtYWNybyBkb0NhbGwoc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNd
CiAgICAgc3RvcmVpIENlbGxUYWcsIENhbGxlZSArIFRhZ09mZnNldFt0M10KICAgICBtb3ZlIHQz
LCBzcAotICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdl
dFt0MV0sIHQyLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQotICAgIGNhbGxUYXJnZXRGdW5j
dGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCBMTEludENhbGxJ
Q1B0clRhZykKKyAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVU
YXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQorICAgIGNhbGxUYXJnZXRGdW5j
dGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCBKU0VudHJ5UHRy
VGFnKQogCiAub3BDYWxsU2xvdzoKICAgICBzbG93UGF0aEZvckNhbGwoc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTQsNyArMjU0LDcgQEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1w
KQogICAgIGlmIENfTE9PUAogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAg
ZWxzZQotICAgICAgICBjYWxsIGVudHJ5LCBDb2RlUHRyVGFnCisgICAgICAgIGNhbGwgZW50cnks
IEpTRW50cnlQdHJUYWcKICAgICBlbmQKICAgICBzdWJwIDE2LCBzcAogZW5kCkBAIC0yNzAsMTAg
KzI3MCwxMCBAQCBtYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCkKICAgICBl
bHNpZiBYODZfNjRfV0lOCiAgICAgICAgICMgV2UgbmVlZCB0byBhbGxvY2F0ZSAzMiBieXRlcyBv
biB0aGUgc3RhY2sgZm9yIHRoZSBzaGFkb3cgc3BhY2UuCiAgICAgICAgIHN1YnAgMzIsIHNwCi0g
ICAgICAgIGNhbGwgdGVtcCwgQ29kZVB0clRhZworICAgICAgICBjYWxsIHRlbXAsIEpTRW50cnlQ
dHJUYWcKICAgICAgICAgYWRkcCAzMiwgc3AKICAgICBlbHNlCi0gICAgICAgIGNhbGwgdGVtcCwg
Q29kZVB0clRhZworICAgICAgICBjYWxsIHRlbXAsIEpTRW50cnlQdHJUYWcKICAgICBlbmQKIGVu
ZAogCkBAIC0zNzAsNyArMzcwLDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQog
ICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAs
IC5yZWNvdmVyCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAotICAgICAgICAgICAgam1wIHIwLCBD
b2RlUHRyVGFnCisgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKICAgICAgICAgLnJl
Y292ZXI6CiAgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0s
IFBDCiAgICAgICAgIGVuZCkKQEAgLTIwNTYsMTEgKzIwNTYsMTEgQEAgbWFjcm8gZG9DYWxsKHNs
b3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBpZiBQT0lTT04KICAgICAgICAgbG9hZHAgX2dfSklU
Q29kZVBvaXNvbiwgdDIKICAgICAgICAgeG9ycCBMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNv
ZGVUYXJnZXRbdDFdLCB0MgotICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDEsIHQzLCB0NCwgTExJ
bnRDYWxsSUNQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MiwgTExJbnRDYWxs
SUNQdHJUYWcpCisgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MSwgdDMsIHQ0LCBKU0VudHJ5UHRy
VGFnKQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDIsIEpTRW50cnlQdHJUYWcpCiAgICAg
ZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVU
YXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBMTEludENhbGxJQ1B0clRhZykKLSAgICAgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIExM
SW50Q2FsbElDUHRyVGFnKQorICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6
bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQorICAgICAg
ICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0
W3QxXSwgSlNFbnRyeVB0clRhZykKICAgICBlbmQKIAogLm9wQ2FsbFNsb3c6CkBAIC0yMTkxLDEy
ICsyMTkxLDEyIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAg
ICBlbHNlCiAgICAgICAgIGlmIFg4Nl82NF9XSU4KICAgICAgICAgICAgIHN1YnAgMzIsIHNwCi0g
ICAgICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXSwgQ29kZVB0clRh
ZworICAgICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0sIEpTRW50
cnlQdHJUYWcKICAgICAgICAgICAgIGFkZHAgMzIsIHNwCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGxvYWRwIF9nX05hdGl2ZUNvZGVQb2lzb24sIHQyCiAgICAgICAgICAgICB4b3JwIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXSwgdDIKLSAgICAgICAgICAgIGNhbGwgdDIsIENvZGVQ
dHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDIsIEpTRW50cnlQdHJUYWcKICAgICAgICAgZW5kCiAg
ICAgZW5kCiAKQEAgLTIyMzQsMTIgKzIyMzQsMTIgQEAgbWFjcm8gaW50ZXJuYWxGdW5jdGlvbkNh
bGxUcmFtcG9saW5lKG9mZgogICAgIGVsc2UKICAgICAgICAgaWYgWDg2XzY0X1dJTgogICAgICAg
ICAgICAgc3VicCAzMiwgc3AKLSAgICAgICAgICAgIGNhbGwgb2Zmc2V0T2ZGdW5jdGlvblt0MV0s
IENvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgb2Zmc2V0T2ZGdW5jdGlvblt0MV0sIEpTRW50
cnlQdHJUYWcKICAgICAgICAgICAgIGFkZHAgMzIsIHNwCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGxvYWRwIF9nX05hdGl2ZUNvZGVQb2lzb24sIHQyCiAgICAgICAgICAgICB4b3JwIG9mZnNl
dE9mRnVuY3Rpb25bdDFdLCB0MgotICAgICAgICAgICAgY2FsbCB0MiwgQ29kZVB0clRhZworICAg
ICAgICAgICAgY2FsbCB0MiwgSlNFbnRyeVB0clRhZwogICAgICAgICBlbmQKICAgICBlbmQKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsOSArMjYy
LDggQEAgY29uc3QgQXJpdGhQcm9maWxlSW50TnVtYmVyID0gMHg1MDAwMDAKIAogIyBQb2ludGVy
IFRhZ3MKIGNvbnN0IEJ5dGVjb2RlUHRyVGFnID0gY29uc3RleHByIEJ5dGVjb2RlUHRyVGFnCi1j
b25zdCBDb2RlUHRyVGFnID0gY29uc3RleHByIENvZGVQdHJUYWcKK2NvbnN0IEpTRW50cnlQdHJU
YWcgPSBjb25zdGV4cHIgSlNFbnRyeVB0clRhZwogY29uc3QgRXhjZXB0aW9uSGFuZGxlclB0clRh
ZyA9IGNvbnN0ZXhwciBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi1jb25zdCBMTEludENhbGxJQ1B0
clRhZyA9IGNvbnN0ZXhwciBMTEludENhbGxJQ1B0clRhZwogY29uc3QgTm9QdHJUYWcgPSBjb25z
dGV4cHIgTm9QdHJUYWcKIGNvbnN0IFNsb3dQYXRoUHRyVGFnID0gY29uc3RleHByIFNsb3dQYXRo
UHRyVGFnCiAKQEAgLTEwMzcsNyArMTAzNiw3IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dl
dHRlciwgY29kZUJsb2MKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9wIGNmcgogICAgICAg
ICBlbmQKLSAgICAgICAgam1wIHIwLCBDb2RlUHRyVGFnCisgICAgICAgIGptcCByMCwgSlNFbnRy
eVB0clRhZwogICAgIC5yZWNvdmVyOgogICAgICAgICBjb2RlQmxvY2tHZXR0ZXIodDEsIHQyKQog
ICAgIC5jb250aW51ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckNvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgRXhlY3V0aW9uQ291bnRlciogQ29t
cGlsYXRpb246OmV4ZWN1dGlvbgogICAgIHJldHVybiBjb3VudGVyLmdldCgpOwogfQogCi12b2lk
IENvbXBpbGF0aW9uOjphZGRPU1JFeGl0U2l0ZShjb25zdCBWZWN0b3I8Y29uc3Qgdm9pZCo+JiBj
b2RlQWRkcmVzc2VzKQordm9pZCBDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUoY29uc3QgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4mIGNvZGVBZGRyZXNz
ZXMpCiB7CiAgICAgbV9vc3JFeGl0U2l0ZXMuYXBwZW5kKE9TUkV4aXRTaXRlKGNvZGVBZGRyZXNz
ZXMpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNv
bXBpbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyQ29tcGlsYXRpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkRGVzY3JpcHRpb24o
Y29uc3QgQ29tcGlsZWRCeXRlY29kZSYpOwogICAgIHZvaWQgYWRkRGVzY3JpcHRpb24oY29uc3Qg
T3JpZ2luU3RhY2smLCBjb25zdCBDU3RyaW5nJiBkZXNjcmlwdGlvbik7CiAgICAgRXhlY3V0aW9u
Q291bnRlciogZXhlY3V0aW9uQ291bnRlckZvcihjb25zdCBPcmlnaW5TdGFjayYpOwotICAgIHZv
aWQgYWRkT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPGNvbnN0IHZvaWQqPiYgY29kZUFkZHJlc3Nl
cyk7CisgICAgdm9pZCBhZGRPU1JFeGl0U2l0ZShjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3Nlcyk7CiAgICAgT1NSRXhpdCog
YWRkT1NSRXhpdCh1bnNpZ25lZCBpZCwgY29uc3QgT3JpZ2luU3RhY2smLCBFeGl0S2luZCwgYm9v
bCBpc1dhdGNocG9pbnQpOwogICAgIAogICAgIHZvaWQgc2V0SmV0dGlzb25SZWFzb24oSmV0dGlz
b25SZWFzb24sIGNvbnN0IEZpcmVEZXRhaWwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4
aXRTaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIEpTVmFsdWUgT1NS
RXhpdFNpdGU6OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3Ry
aW5nKGV4ZWMsIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ldKSkpKTsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0
cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJlc3Nlc1tpXS5kYXRhTG9jYXRpb24oKSkpKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJldHVy
biByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
U1JFeGl0U2l0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlck9TUkV4aXRTaXRlLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsMjMgKzI2LDI0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogCiBjbGFzcyBPU1JF
eGl0U2l0ZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9y
PGNvbnN0IHZvaWQqPiYgY29kZUFkZHJlc3NlcykKKyAgICBleHBsaWNpdCBPU1JFeGl0U2l0ZShj
b25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29k
ZUFkZHJlc3NlcykKICAgICAgICAgOiBtX2NvZGVBZGRyZXNzZXMoY29kZUFkZHJlc3NlcykKICAg
ICB7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFZlY3Rvcjxjb25zdCB2b2lkKj4mIGNvZGVBZGRy
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQWRkcmVzc2VzOyB9CisgICAgY29uc3QgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4mIGNvZGVBZGRyZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlQWRkcmVzc2VzOyB9CiAgICAgCiAgICAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFZlY3Rvcjxjb25zdCB2b2lkKj4g
bV9jb2RlQWRkcmVzc2VzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRl
cm5hbFB0clRhZz4+IG1fY29kZUFkZHJlc3NlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpQcm9maWxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTQsOCArNTQsOCBAQCB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUo
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG51bGxwdHI7CiAgICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbnVsbHB0cjsKLSAgICBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7CiAjZW5kaWYKICAgICBtX251
bVBhcmFtZXRlcnNGb3JDYWxsID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgIG1f
bnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2Uu
aAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBpbmxpbmUgYm9v
bCBpc0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2luCiAKIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBmcmllbmQgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSop
OworICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
VGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CiAgICAg
c3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKQEAgLTE0Myw4ICsx
NDMsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OwogICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgIH0K
LSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludEZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGVudHJ5cG9pbnRGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSkKICAgICB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgYSBjYWNoZWQgcmVzdWx0LiBXZSBvbmx5IGhhdmUgaXQgZm9yIGFyaXR5
IGNoZWNrIGJlY2F1c2Ugd2UgdXNlIHRoZQogICAgICAgICAvLyBuby1hcml0eSBlbnRyeXBvaW50
IGluIG5vbi12aXJ0dWFsIGNhbGxzLCB3aGljaCB3aWxsICJjYWNoZSIgdGhpcyB2YWx1ZSBkaXJl
Y3RseSBpbgpAQCAtMTUyLDE3ICsxNTIsMTYgQEAgcHVibGljOgogICAgICAgICBpZiAoYXJpdHkg
PT0gTXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAg
ICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKLSAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykKKyAgICAg
ICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3Vs
dCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAg
ICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0
ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9Ci0gICAg
ICAgICAgICBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBn
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7CiAgICAgICAg
IGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgLy8gQ2FjaGUgdGhl
IHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwgb3B0
aW1pemF0aW9ucy4KICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgewpAQCAtMjMyLDggKzIzMSw4
IEBAIHByb3RlY3RlZDoKICAgICBJbnRyaW5zaWMgbV9pbnRyaW5zaWM7CiAgICAgUmVmUHRyPEpJ
VENvZGU+IG1faml0Q29kZUZvckNhbGw7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZv
ckNvbnN0cnVjdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVj
azsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDIzMDczNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBOYXRpdmVFeGVjdXRhYmxlOjpm
aW5pc2hDcmVhdGlvbihWTQogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSk7
CiAgICAgbV9uYW1lID0gbmFtZTsKIAotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVG
b3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIENvZGVQdHJUYWcpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVG
b3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFn
KTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdn
ZWRXaXRoKG1faml0Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1
aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNU
YWdnZWRXaXRoKG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVj
a05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKIH0KIAogTmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZShWTSYg
dm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBj
b25zdHJ1Y3RvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
IHNpZ25hdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRnVuY3Rpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEw
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBUYWdnZWROYXRpdmVGdW5jdGlvbihpbnRwdHJfdCBi
aXRzKSA6IG1fcHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oYml0cykpIHsgfQogCiAgICAgVGFnZ2Vk
TmF0aXZlRnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuYykKLSAgICAgICAgOiBtX3B0cih0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMubV9wdHIsIENvZGVQdHJUYWcpKQorICAgICAgICA6IG1f
cHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgSlNFbnRyeVB0clRhZz4oZnVuYy5tX3B0cikpCiAg
ICAgeyB9CiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24oUmF3TmF0aXZlRnVuY3Rpb24gZnVuYykK
LSAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIENvZGVQdHJUYWcp
KQorICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgSlNFbnRyeVB0clRhZz4o
ZnVuYykpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3B0cjsgfQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQg
b3BlcmF0b3IgTmF0aXZlRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcHRyKTsK
LSAgICAgICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPE5hdGl2ZUZ1bmN0aW9uPihtX3B0ciwg
Q29kZVB0clRhZyk7CisgICAgICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxOYXRpdmVGdW5j
dGlvbiwgSlNFbnRyeVB0clRhZz4obV9wdHIpOwogICAgIH0KIAogICAgIHZvaWQqIHJhd1BvaW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHRyVGFnLmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MiArMzEsMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfUFRSVEFHX0VOVU0odikgXAogICAgIHYo
Tm9QdHJUYWcpIFwKLSAgICB2KE5lYXJDb2RlUHRyVGFnKSBcCiAgICAgdihDRnVuY3Rpb25QdHJU
YWcpIFwKICAgICBcCi0gICAgdihBcml0eUZpeHVwUHRyVGFnKSBcCiAgICAgdihCM0NDYWxsUHRy
VGFnKSBcCisgICAgdihCM0NvbXBpbGF0aW9uUHRyVGFnKSBcCiAgICAgdihCeXRlY29kZVB0clRh
ZykgXAotICAgIHYoQnl0ZWNvZGVIZWxwZXJQdHJUYWcpIFwKLSAgICB2KENvZGVQdHJUYWcpIFwK
LSAgICB2KERGR09TUkVudHJ5UHRyVGFnKSBcCi0gICAgdihERkdPU1JFeGl0UHRyVGFnKSBcCi0g
ICAgdihERkdPcGVyYXRpb25QdHJUYWcpIFwKKyAgICB2KERpc2Fzc2VtYmx5UHRyVGFnKSBcCiAg
ICAgdihFeGNlcHRpb25IYW5kbGVyUHRyVGFnKSBcCi0gICAgdihGVExDb2RlUHRyVGFnKSBcCi0g
ICAgdihGVExMYXp5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KEZUTE9TUkV4aXRQdHJUYWcpIFwK
LSAgICB2KEZUTE9wZXJhdGlvblB0clRhZykgXAotICAgIHYoRlRMU2xvd1BhdGhQdHJUYWcpIFwK
LSAgICB2KEdldFByb3BlcnR5UHRyVGFnKSBcCi0gICAgdihHZXR0ZXJTZXR0ZXJQdHJUYWcpIFwK
LSAgICB2KEhhc1Byb3BlcnR5UHRyVGFnKSBcCi0gICAgdihKSVRDb2RlUHRyVGFnKSBcCi0gICAg
dihKSVRPcGVyYXRpb25QdHJUYWcpIFwKICAgICB2KEpJVFRodW5rUHRyVGFnKSBcCi0gICAgdihK
SVRXcml0ZVRodW5rUHRyVGFnKSBcCi0gICAgdihMTEludENhbGxJQ1B0clRhZykgXAotICAgIHYo
TGlua0NhbGxQdHJUYWcpIFwKLSAgICB2KExpbmtDYWxsUmVzdWx0UHRyVGFnKSBcCi0gICAgdihM
aW5rUG9seW1vcnBoaWNDYWxsUHRyVGFnKSBcCi0gICAgdihMaW5rUG9seW1vcnBoaWNDYWxsUmVz
dWx0UHRyVGFnKSBcCi0gICAgdihMaW5rVmlydHVhbENhbGxQdHJUYWcpIFwKLSAgICB2KExpbmtW
aXJ0dWFsQ2FsbFJlc3VsdFB0clRhZykgXAotICAgIHYoTWF0aElDUHRyVGFnKSBcCi0gICAgdihO
YXRpdmVDb2RlUHRyVGFnKSBcCi0gICAgdihQdXRQcm9wZXJ0eVB0clRhZykgXAorICAgIHYoSklU
U3R1YlJvdXRpbmVQdHJUYWcpIFwKKyAgICB2KEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KEpTSW50
ZXJuYWxQdHJUYWcpIFwKKyAgICB2KEpTU3dpdGNoUHRyVGFnKSBcCisgICAgdihMaW5rQnVmZmVy
UHRyVGFnKSBcCisgICAgdihPcGVyYXRpb25QdHJUYWcpIFwKKyAgICB2KE9TUkV4aXRQdHJUYWcp
IFwKICAgICB2KFNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihTcGVjaWFsaXplZFRodW5rUHRyVGFn
KSBcCi0gICAgdihTd2l0Y2hUYWJsZVB0clRhZykgXAotICAgIHYoVGhyb3dFeGNlcHRpb25QdHJU
YWcpIFwKKyAgICB2KFdhc21FbnRyeVB0clRhZykgXAogICAgIHYoWWFycjhCaXRQdHJUYWcpIFwK
ICAgICB2KFlhcnIxNkJpdFB0clRhZykgXAogICAgIHYoWWFyck1hdGNoT25seThCaXRQdHJUYWcp
IFwKICAgICB2KFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZykgXAogICAgIHYoWWFyckJhY2t0cmFj
a1B0clRhZykgXAotICAgIHYoV2FzbUNhbGxQdHJUYWcpIFwKLSAgICB2KFdhc21IZWxwZXJQdHJU
YWcpIFwKLQogCiBlbnVtIFB0clRhZyA6IHVpbnRwdHJfdCB7CiAjZGVmaW5lIERFQ0xBUkVfUFRS
VEFHX0VOVU0odGFnKSAgdGFnLApAQCAtODUsOCArNjEsNyBAQCBlbnVtIFB0clRhZyA6IHVpbnRw
dHJfdCB7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTm9QdHJU
YWcpID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMCksICIiKTsKLXN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihOZWFyQ29kZVB0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSwgIiIpOwotc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENGdW5j
dGlvblB0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSwgIiIpOworc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENGdW5jdGlvblB0clRhZykgPT0gc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSwgIiIpOwogCiBpbmxpbmUgY29uc3QgY2hhciogcHRyVGFnTmFtZShQ
dHJUYWcgdGFnKQogewpAQCAtOTgsMTAgKzczLDcgQEAgaW5saW5lIGNvbnN0IGNoYXIqIHB0clRh
Z05hbWUoUHRyVGFnIHRhZwogI3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQogfQogCi11aW50cHRy
X3QgbmV4dFB0clRhZ0lEKCk7Ci0KICNpZiAhVVNFKFBPSU5URVJfUFJPRklMSU5HKQotaW5saW5l
IHVpbnRwdHJfdCBuZXh0UHRyVGFnSUQoKSB7IHJldHVybiAwOyB9CiAKIGlubGluZSBjb25zdCBj
aGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCopIHsgcmV0dXJuICI8bm8gdGFnPiI7IH0KIApAQCAt
MTExLDIxICs4MywzOSBAQCBpbmxpbmUgY29uc3RleHByIFB0clRhZyBwdHJUYWcoQXJndW1lbnRz
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19z
YW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFQgdGFnQ29kZVB0cihQ
dHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGlu
ZSBUIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIg
UHRyVHlwZSB0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQog
Cit0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBl
IHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsgfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+
Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFQgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQ
dHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFQgdW50YWdDb2Rl
UHRyKFB0clR5cGUgcHRyKSAgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KKwogdGVt
cGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBQdHJUeXBlIHVu
dGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxh
dGU8UHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB1bnRhZ0Nv
ZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1
ZT4+CiBpbmxpbmUgY29uc3RleHByIFQgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcs
IFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgUHRyVGFnLCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBU
IHJldGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7
IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBQ
dHJUeXBlIHJldGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnLCBQdHJUYWcpIHsgcmV0dXJu
IHB0cjsgfQogCit0ZW1wbGF0ZTxQdHJUYWcsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFB0clR5cGUgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7
IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6
aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBUIHJlbW92ZUNv
ZGVQdHJUYWcoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CiAK
QEAgLTEzNSwxNSArMTI1LDI3IEBAIGlubGluZSBjb25zdGV4cHIgUHRyVHlwZSByZW1vdmVDb2Rl
UHRyVGEKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6
OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBUIHRhZ0NGdW5jdGlvblB0cihQ
dHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGlu
ZSBUIHRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+
KHB0cik7IH0KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIFB0clR5
cGUgdGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQog
Cit0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBl
IHRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRy
VHlwZT46OnZhbHVlPj4KIGlubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyLCBQ
dHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFQgdW50YWdDRnVu
Y3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHVudGFnQ0Z1
bmN0aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQogCit0ZW1wbGF0
ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHVudGFnQ0Z1
bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KKwogdGVtcGxhdGU8dHlwZW5h
bWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc0NGdW5jdGlvblB0cihQdHJUeXBlKSB7IH0KIHRlbXBs
YXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIoUHRy
VHlwZSkgeyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3Bl
cnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pc0luaXRpYWxpemF0aW9uKGlzSW5pdGlhbGl6YXRp
b24pCiAgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV9jYWNoZWFiaWxp
dHkoQ2FjaGluZ0FsbG93ZWQpCi0gICAgICAgICwgbV9wdXRGdW5jdGlvbihudWxscHRyKQogICAg
IHsKICAgICB9CiAKQEAgLTY3LDE3ICs2NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fb2Zmc2V0
ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tVmFsdWUoSlNPYmplY3QqIGJh
c2UsIFB1dFZhbHVlRnVuYyBmdW5jdGlvbikKKyAgICB2b2lkIHNldEN1c3RvbVZhbHVlKEpTT2Jq
ZWN0KiBiYXNlLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIoZnVuY3Rpb24pOwogICAgICAgICBt
X3R5cGUgPSBDdXN0b21WYWx1ZTsKICAgICAgICAgbV9iYXNlID0gYmFzZTsKICAgICAgICAgbV9w
dXRGdW5jdGlvbiA9IGZ1bmN0aW9uOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tQWNjZXNz
b3IoSlNPYmplY3QqIGJhc2UsIFB1dFZhbHVlRnVuYyBmdW5jdGlvbikKKyAgICB2b2lkIHNldEN1
c3RvbUFjY2Vzc29yKEpTT2JqZWN0KiBiYXNlLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIoZnVu
Y3Rpb24pOwogICAgICAgICBtX3R5cGUgPSBDdXN0b21BY2Nlc3NvcjsKICAgICAgICAgbV9iYXNl
ID0gYmFzZTsKICAgICAgICAgbV9wdXRGdW5jdGlvbiA9IGZ1bmN0aW9uOwpAQCAtMTAwLDcgKzk3
LDcgQEAgcHVibGljOgogICAgICAgICBtX2lzU3RyaWN0TW9kZSA9IHZhbHVlOwogICAgIH0KIAot
ICAgIFB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25zdAorICAgIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChpc0NhY2hlYWJsZUN1c3RvbSgpKTsKICAgICAgICAgcmV0dXJuIG1fcHV0RnVuY3Rpb247CkBA
IC0xNDAsNyArMTM3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJbml0aWFsaXphdGlvbjsK
ICAgICB1aW50OF90IG1fY29udGV4dDsKICAgICBDYWNoZWFiaWxpdHlUeXBlIG1fY2FjaGVhYmls
aXR5OwotICAgIFB1dFZhbHVlRnVuYyBtX3B1dEZ1bmN0aW9uOworICAgIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gbV9wdXRGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTM3LDEyICsxMzcsMTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29k
ZShWTSYgdgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAg
ICAgIG1faml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9j
ay0+aml0Q29kZSgpIDogbnVsbHB0cjsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0
eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayA9IG51bGxwdHI7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNh
bGwgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
IDogTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENvZGVGb3JDb25zdHJ1Y3Q6CiAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGdlbmVy
aWNDb2RlQmxvY2sgPyBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCkgOiBudWxscHRyOwotICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cigpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9
IG51bGxwdHI7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IGdlbmVyaWND
b2RlQmxvY2sgPyBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgOiBOVU1fUEFSQU1F
VEVSU19OT1RfQ09NUElMRUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgxLDIzICs2ODEs
MjMgQEAgTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEhvc3RGdW5jdGlvbihOYQogICAgIFVOVVNF
RF9QQVJBTShpbnRyaW5zaWMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgcmV0dXJuIE5h
dGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdGhpcywKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBOYXRp
dmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGZ1bmN0
aW9uLAotICAgICAgICBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpLCBjb25zdHJ1Y3RvciwKKyAgICAgICAgYWRv
cHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+
KGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSks
IGZ1bmN0aW9uLAorICAgICAgICBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTExJbnQ6Omdl
dENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5l
KSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpLCBjb25zdHJ1Y3RvciwKICAgICAgICAgTm9JbnRy
aW5zaWMsIHNpZ25hdHVyZSwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBWTTo6
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoY2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUlu
dGVybmFsRnVuY3Rpb25DYWxsKHRoaXMpOwotICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUlu
dGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QodGhpcyk7CisgICAgICAgICAgICByZXR1cm4gaml0U3R1
YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CisgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dCh0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIH0KICNlbmRpZgogICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFt
cG9saW5lKTsKLSAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENv
ZGVQdHIobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUpOworICAg
ICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfaW50ZXJu
YWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lKTsKKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4obGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1w
b2xpbmUpOwogfQogCiBWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDIsNyArNTQyLDcgQEAg
cHVibGljOgogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdldENUSVN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQogICAgIHsKICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRo
aXMsIGdlbmVyYXRvcik7CiAgICAgfQpAQCAtNTU0LDcgKzU1NCw3IEBAIHB1YmxpYzoKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCBOYXRpdmVG
dW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldENUSUludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNyw3ICs0MzcsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsCiAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBmcCkpOwogICAgICAgICAgICAgICAgIG92
ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gx
LCBzY3JhdGNoMikpOwogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3dd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFj
a092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hl
Y2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBj
b3JyZWN0LgpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2Vw
dGlvbkNoZWNrKEMKICAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgpOwog
CiAgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1
YiwgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRh
Zz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CiAgICAgfSk7CiB9CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayh1aW50CiAgICAgICAgICAgICBqaXQuanVt
cCh0aWVyVXBSZXN1bWUpOwogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRhZz4oY2Fs
bCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKIAogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwpAQCAtMTExMiw3ICsxMTEyLDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVO
ZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMt
PmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbklu
ZGV4IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMt
PmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4o
Y2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMTI4LDcgKzExMjgsNiBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VQb2lzb25pbmcoKSkKICAgICAgICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRk
ZXJCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBE
ZXN0aW5hdGlvbiwgaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24pKTsKIAotICAgICAgICBQdHJUYWcgY2FsbFRh
ZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAgICAgIFZh
bHVlKiBlbWJlZGRlckNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENh
bGwobV9wcm9jLCBpc0VtYmVkZGVyQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1
cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVl
OwpAQCAtMTEzOCw5ICsxMTM3LDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQz
Ml90IGZ1bgogICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2Ug
Y291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZSwgY2FsbFRhZ10gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVy
blR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgY2FsbFRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdh
c21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlw
ZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKQEAgLTExNjgsNyAr
MTE2Nyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRl
eF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAt
MTMxMCw3ICsxMzA5LDYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29u
cwogICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7
CiAKICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwotICAgIFB0
clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsK
ICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBt
X2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAg
ICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTMyNSw3ICsxMzIzLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8g
MCA6IDFdLmdwcigpLCBjYWxsVGFnKTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNb
cmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCAr
MTc0LDggQEAgdm9pZCBCQlFQbGFuOjpwcmVwYXJlKCkKICAgICAgICAgaWYgKGltcG9ydC0+a2lu
ZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMu
c2l6ZSgpOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnRGdW5jdGlv
bkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51
bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+bW9k
dWxlKSwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPmZpZWxkKSk7Ci0gICAgICAgIGF1dG8gYmlu
ZGluZyA9IHdhc21Ub1dhc20oc2lnbmF0dXJlLCBpbXBvcnRGdW5jdGlvbkluZGV4KTsKKyAgICAg
ICAgYXV0byBiaW5kaW5nID0gd2FzbVRvV2FzbShpbXBvcnRGdW5jdGlvbkluZGV4KTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5n
LmVycm9yKCkpIHsKICAgICAgICAgICAgIGNhc2UgQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5
OgpAQCAtMzAzLDcgKzMwMSw2IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJh
Y3RMb2MKICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGls
YXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNp
Z25hdHVyZS5oYXNoKCkpOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewpAQCAtMzEyLDcgKzMwOSw3IEBAIHZvaWQgQkJRUGxh
bjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2MKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+ZW50cnlw
b2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAg
ICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBjYWxsVGFnLCAiV2Vi
QXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBmdW5jdGlvblsl
aV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5
cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzI0LDIzICszMjEsMjAgQEAgdm9pZCBC
QlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2lu
dC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAg
ICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiRW1i
ZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+
V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUu
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUo
Y29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxpbmtlZFdhc21U
b1dhc21DYWxscykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhlY3V0YWJsZUFkZHJlc3M7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
ZXhlY3V0YWJsZUFkZHJlc3M7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRp
b24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291
bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hw
b2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NF
UlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAg
ICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMu
YXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUo
KTsKLSAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWdu
YXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRk
cmVzcy5yZXRhZ2dlZChvbGRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgICAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwu
ZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25D
b3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRy
eVB0clRhZz4oKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+
KGV4ZWN1dGFibGVBZGRyZXNzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1v
dmUobV9jYWxsTGlua0luZm9zKTsKICAgICB9CiAKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiYmIHRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCkKKyAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMo
KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkp
OwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwpAQCAtMTM3
LDcgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUp
OwogICAgIAogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKLSAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CisgICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21F
eGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUg
RGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKICAgICBIYXNoTWFw
PHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIz
MDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCiB1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20oY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2ln
bmVkIGltcG9ydEluZGV4KQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciB1bmlxdWlmeSB0aGUg
c3R1YnMgYmFzZWQgb24gc2lnbmF0dXJlICsgaW5kZXggdG8gc2VlIGlmIHRoaXMgc2F2ZXMgbWVt
b3J5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQx
NTcKQEAgLTgwLDE0ICs4MCwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGCiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaWYgKE9wdGlv
bnM6OnVzZVBvaXNvbmluZygpKQogICAgICAgICBqaXQueG9yUHRyKEpJVDo6VHJ1c3RlZEltbVB0
cihnX0pJVENvZGVQb2lzb24pLCBzY3JhdGNoKTsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdh
c21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICBqaXQuanVtcChzY3JhdGNoLCB0
YWcpOworICAgIGppdC5qdW1wKHNjcmF0Y2gsIFdhc21FbnRyeVB0clRhZyk7CiAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1l
bW9yeSk7CiAKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiV2Vi
QXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFzc2Vt
Ymx5LT5XZWJBc3NlbWJseSBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QmluZGluZy5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGVudW0gY2xh
c3MgQmluZGluZ0ZhaWx1cmUgewogICAgIE91dE9mTWVtb3J5LAogfTsKIAotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbShjb25zdCBTaWdu
YXR1cmUmLCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWdu
ZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKmNhbGxl
ZSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnQoKSBjb25z
dCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKTsgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQ
dHJUYWc+KCk7IH0KIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAgICAg
SW5kZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4T3JOYW1lOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVz
KCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQotICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1
cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0
CisgICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8
V2FzbUVudHJ5UHRyVGFnPiogY2FsbGVlTW92ZUxvY2F0aW9uLCBCMzo6UHJvY2VkdXJlJiBwcm9j
LCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsK
ICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVn
aXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJl
Z2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwpA
QCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9
IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
KmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJU
YWc+KG1vdmVMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAkocmV2
aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICptX2NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+KiBlbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsK
ICAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5j
dGlvbkltcG9ydENvdW50KCk7CkBAIC0xMjMsMTAgKzEyMywxMCBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxsZWVzOwogICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVl
Pj4gbV9vcHRpbWl6ZWRDYWxsZWVzOwogICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxDYWxs
ZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKLSAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+IG1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzOwogICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90
aWVyVXBDb3VudHM7CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4g
bV93YXNtVG9XYXNtQ2FsbHNpdGVzOwotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+
IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8QkJR
UGxhbj4gbV9wbGFuOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hl
ZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJ
KHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRp
YyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCAKICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZihXYXNtRmF1bHRTaWduYWxIYW5kbGVySW50ZXJuYWw6OnZlcmJvc2UsICJmdW5jdGlv
biBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZCkp
OwogICAgICAgICAgICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0luc3RydWN0aW9uICYmIGZh
dWx0aW5nSW5zdHJ1Y3Rpb24gPCBlbmQpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYoV2FzbUZhdWx0U2lnbmFsSGFuZGxlckludGVybmFsOjp2ZXJib3NlLCAiZm91bmQgbWF0Y2gi
KTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0
dWIgPSBUaHVua3M6OnNpbmdsZXRvbigpLmV4aXN0aW5nU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21X
YXNtVGh1bmtHZW5lcmF0b3IpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4Y2VwdGlvblN0dWIgPSBUaHVua3M6OnNpbmdsZXRvbigp
LmV4aXN0aW5nU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIGRvbid0IGhhdmUg
YSBzdHViIHRoZW4gd2Ugc2hvdWxkIGp1c3QgdHJlYXQgdGhpcyBsaWtlIGEgcmVndWxhciBjcmFz
aC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25TdHViKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTYsNyArMjU2LDcgQEAgaW5saW5lIGJv
b2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwpCiB9CiAKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dh
c21DYWxsIHsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsTG9jYXRpb247CisgICAgQ29k
ZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPiBjYWxsTG9jYXRpb247CiAgICAgc2l6
ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZTsKIH07CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCBzdHJ1Y3Qg
RW50cnlwb2ludCB7CiB9OwogCiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CiAgICAgRW50
cnlwb2ludCBlbnRyeXBvaW50OwogfTsKIApAQCAtMjc0LDcgKzI3NCw3IEBAIHN0cnVjdCBJbnRl
cm5hbEZ1bmN0aW9uIHsKIC8vIHdpdGggYWxsIGltcG9ydHMsIGFuZCB0aGVuIGFsbCBpbnRlcm5h
bCBmdW5jdGlvbnMuIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gYW5kIEZ1bmN0aW9uSW5k
ZXhTcGFjZSBhcmUgb25seQogLy8gbWVhbnQgYXMgZmFzdCBsb29rdXAgdGFibGVzIGZvciB0aGVz
ZSBvcGNvZGVzIGFuZCBkbyBub3Qgb3duIGNvZGUuCiBzdHJ1Y3QgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiB7Ci0gICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKjsKKyAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPio7CiAjaWYgIUNPTVBJTEVSX1NVUFBPUlRTKE5TRE1JX0ZPUl9BR0dSRUdB
VEVTKQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CiAgICAg
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbihTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCwgTG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQg
ZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3Ro
ZXJ3aXNlIG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3Vn
aCBpbXBvcnQgZnVuY3Rpb24uCiAgICAgICAgIEluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSB7IG51
bGxwdHIgfTsKICAgICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHsgbnVsbHB0ciB9OwotICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgd2FzbVRvRW1iZWRkZXJTdHViOworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWI7CiAgICAgICAg
IHZvaWQqIGltcG9ydEZ1bmN0aW9uIHsgbnVsbHB0ciB9OyAvLyBJbiBhIEpTIGVtYmVkZGluZywg
dGhpcyBpcyBhIFBvaXNvbmVkQmFycmllcjxKU09iamVjdD4uCiAgICAgfTsKICAgICB1bnNpZ25l
ZCBudW1JbXBvcnRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9u
czsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAko
cmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxNCArOTcsMTMgQEAgdm9pZCBPTUdQbGFuOjp3
b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUHRy
VGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwog
ICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21w
aWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgY2FsbFRhZywgIldl
YkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVp
XSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CiAKICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNl
QW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnQ7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUo
KSkpOwogICAgICAgICBSZWY8Q2FsbGVlPiBjYWxsZWUgPSBDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CkBAIC0xMjAsMTYgKzExOSwx
MyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIG1fY29k
ZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoY2Fs
bGVlKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZENhbGxzKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludDsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgICAg
ICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCiAgICAgICAgICAgICAgICAgZW50cnlwb2lu
dCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2VdLmNvZGUoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBv
aW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpOworICAgICAgICAgICAg
ICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0
YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwogCi0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2Fs
bFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChlbnRy
eXBvaW50LnJldGFnZ2VkKG9sZFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQogICAg
ICAgICB1bmxpbmtlZENhbGxzID0gc3RkOjpleGNoYW5nZShtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtQ2FsbHNpdGVzW21fZnVuY3Rpb25JbmRleF0sIHVubGlua2VkQ2FsbHMpOwogICAgIH0KQEAg
LTE0OSwxMCArMTQ1LDcgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQog
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxs
TG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
ID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBS
YXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQ
b2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhT
cGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgIFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5o
YXNoKCkpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChlbnRyeXBvaW50LnJldGFn
Z2VkKG9sZFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRo
dW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRo
dW5rcy5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJv
d0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21X
YXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKQEAgLTUyLDE5ICs1MiwxOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhy
b3dFeGNlcHRpb25Gcm9tCiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAKLSAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKHRhZyk7CisgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBqaXQu
YnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKICAgICBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJv
d1dhc21FeGNlcHRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24p
OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRocm93V2FzbUV4Y2VwdGlvbiwgdGFn
KSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcs
ICJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGhyb3dXYXNtRXhjZXB0aW9uKSk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBl
eGNlcHRpb24gZnJvbSBXYXNtIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0
YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93U3RhY2tP
dmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC03NCwxMSArNzMsMTEgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93U3RhY2tPdmVyZmxvdwogICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihFeGNlcHRpb25UeXBlOjpT
dGFja092ZXJmbG93KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyID0gaml0Lmp1bXAoKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRp
b25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIobG9j
a2VyLCB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiVGhyb3cg
c3RhY2sgb3ZlcmZsb3cgZnJvbSBXYXNtIik7CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6
OnNpbmdsZXRvbigpLnN0dWIobG9ja2VyLCB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiVGhyb3cgc3RhY2sgb3ZlcmZsb3cgZnJvbSBXYXNtIik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0
cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewog
ICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHB1dCB0aGUgZnVuY3Rp
b24gaW5kZXggaW50byBHUFJJbmZvOjphcmd1bWVudEdQUjEKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwpAQCAtOTMsMTYgKzkyLDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGll
clVwVGgKICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEluc3RhbmNlKiwgdWludDMyX3QpOwogICAg
IFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIocnVuLCB0YWcpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIsIHRh
Zyk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Cisg
ICAgaml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBPcGVyYXRpb25QdHJUYWcpOwogCiAg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9y
Q2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tC
eXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOwogCiAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsICJUcmlnZ2VyIE9NRyB0aWVyIHVw
Iik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJUcmlnZ2VyIE9NRyB0aWVyIHVwIik7CiB9CiAKIHN0YXRpYyBUaHVua3MqIHRodW5rczsKQEAg
LTEzMCwyOCArMTI4LDI4IEBAIFRocm93V2FzbUV4Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4
Y2UKICAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRpb247CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBy
ZXR1cm4gc3R1Yihsb2NrZXIsIGdlbmVyYXRvcik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBUaHVua3M6OnN0dWIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBUaHVu
a3M6OnN0dWIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yKQogewogICAgIEFTU0VSVCghIWdlbmVyYXRvcik7CiAgICAgewotICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fc3R1YnMuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
KCkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3R1YnMuYWRkKGdlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpKTsKICAgICAgICAgaWYgKCFhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gZ2VuZXJh
dG9yKGxvY2tlcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBj
b2RlID0gZ2VuZXJhdG9yKGxvY2tlcik7CiAgICAgLy8gV2Ugc3BlY2lmaWNhbGx5IGRvbid0IHVz
ZSB0aGUgaXRlcmF0b3IgaGVyZSB0byBhbGxvdyBnZW5lcmF0b3IgdG8gcmVjdXJzaXZlbHkgY2hh
bmdlIG1fc3R1YnMuCiAgICAgbV9zdHVicy5zZXQoZ2VuZXJhdG9yLCBjb2RlKTsKICAgICByZXR1
cm4gY29kZTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFRodW5rczo6ZXhpc3RpbmdTdHVi
KFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gVGh1bmtzOjpleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQog
ewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKIApAQCAtMTU5LDcgKzE1Nyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OmV4aXN0aW5nU3QKICAgICBpZiAoaXRl
ciAhPSBtX3N0dWJzLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKLSAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgJKHJldmlzaW9u
IDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RM
b2NrZXImKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5l
cmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRo
cm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJpZ2dlck9NR1Rp
ZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAKLXR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7Cit0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gKCpUaHVu
a0dlbmVyYXRvcikoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKIAogY2xhc3MgVGh1bmtzIHsKIHB1
YmxpYzoKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaHJvd1dhc21F
eGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YihUaHVu
a0dlbmVyYXRvcik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBUaHVua0dlbmVyYXRvcik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4
aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0dWIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHVua0dl
bmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlz
dGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwogCiBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVm
YXVsdDsKIAotICAgIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV9zdHViczsKKyAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBtX3N0dWJzOwogICAgIFRocm93V2FzbUV4Y2VwdGlvbiBt
X3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fbG9jazsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lv
biAyMzA3MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+IGNyZWF0ZQogICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2Nh
dGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAgIGppdC5zdG9y
ZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlv
bjsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2Vk
Q2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxs
ZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVMb2NhdGlvbik7CisgICAg
ICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKICAgICB9KTsKIAogICAgIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CkBAIC0x
OTUsNyArMTk1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZQog
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmlt
cG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5m
by5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2Ug
fSk7CisgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4
U3BhY2UgfSk7CiAgICAgfSk7CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjMwNzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIFdhc206
OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KICAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2FzbVRvRW1iZWRkZXJTdHViKHNpemVfdCBp
bXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5j
dGlvbk51bV0uY29kZSgpOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpOyB9CiAKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKQEAgLTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToK
ICAgICB9OwogCiAgICAgUG9pc29uZWRSZWY8SlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwg
V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9KU0V4aXRTdHViczsKICAgICBQb2lzb25l
ZFVuaXF1ZVB0cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrUG9pc29uLCBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyPiBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4g
bV9jYWxsTGlua0luZm9zOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDIzMDczNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2Vs
bChKSVQmCiAgICAgaml0LnhvcjY0KHBvaXNvbiwgcmVzdWx0KTsKIH0KIAotc3RhdGljIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IGhhbmRsZUJhZEk2NFVz
ZShWTSogdm0sIEpJVCYgaml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQg
aW1wb3J0SW5kZXgpCitzdGF0aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiBoYW5kbGVCYWRJNjRVc2UoVk0qIHZtLCBKSVQm
IGppdCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2lnbmVkIGltcG9ydEluZGV4KQog
ewogICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKIApA
QCAtOTMsOCArOTMsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBC
CiAgICAgICAgIC8vIExldCdzIGJlIHBhcmFub2lkIG9uIHRoZSBleGNlcHRpb24gcGF0aCBhbmQg
emVybyBvdXQgdGhlIHBvaXNvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgaW4gYW4gYXJndW1lbnQg
R1BSLgogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKIAotICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhX
YXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKGNhbGxUYWcpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAg
ICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
KSAtPiB2b2lkIHsKQEAgLTExNiwxNSArMTE1LDE0IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEIKICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGlu
Z0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
RnVuY3Rpb25QdHIodGhyb3dCYWRJNjQsIGNhbGxUYWcpKTsKLSAgICAgICAgUHRyVGFnIHRhZyA9
IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHRhZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0
IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpOworICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHJvd0Jh
ZEk2NCkpOworICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBXYXNtRW50
cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1w
b3J0WyVpXSIsIGltcG9ydEluZGV4KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZigpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPigpOwogfQogCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRp
bmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgp
CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5m
b3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkK
IHsKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0
IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KICAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kg
dG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEK
QEAgLTMwMiwxMiArMzAwLDkgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5k
aW5nRgogICAgICAgICAvLyBMZXQncyBiZSBwYXJhbm9pZCBiZWZvcmUgdGhlIGNhbGwgYW5kIHpl
cm8gb3V0IHRoZSBwb2lzb24gaW5zdGVhZCBvZiBsZWF2aW5nIGl0IGluIGFuIGFyZ3VtZW50IEdQ
Ui4KICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMyk7CiAKLSAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2Fz
bUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBQdHJUYWcgZG9VbndpbmRp
bmdUYWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotCiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0
LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjYWxsRnVuYyk+KEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYnVmZmVyKSk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKGNh
bGxUYWcpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwog
ICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFz
c2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAKICAgICAgICAgLy8gRXhj
ZXB0aW9uIGhlcmUuCkBAIC0zMTksNyArMzE0LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLCBCaW5kaW5nRgogICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAg
ICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgICAgICB9Owot
ICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbChkb1Vud2luZGluZ1RhZyk7Cisg
ICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgbm9FeGNl
cHRpb24ubGluaygmaml0KTsKQEAgLTM0NCwxMSArMzM5LDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgRnVuY3Rpb25QdHIoY2FsbEZ1bmMsIGNhbGxUYWcpKTsKLSAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGV4Y2VwdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGRvVW53aW5kaW5nLCBkb1Vud2luZGlu
Z1RhZykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihjYWxsRnVuYykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9u
Q2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihkb1Vud2luZGluZykpOwogCi0gICAg
ICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkp
OwotICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCB0YWcsICJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1w
b3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgfQogCiAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEg
c3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgpAQCAtNTUwLDE0ICs1NDQs
MTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAg
ICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
CiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShjb252ZXJ0VG9JMzIpPihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKHRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIEZ1bmN0aW9uUHRyKGNvbnZlcnRUb0kzMiwgdGFnKSk7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb252ZXJ0VG9J
MzIpKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwpAQCAtNTg2LDE0
ICs1NzksMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAg
ICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7CiAgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKGNvbnZlcnRUb0YzMik+KEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgYXV0byBj
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29udmVydFRvRjMyLCB0YWcpKTsKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KGNvbnZlcnRUb0YzMikpOwogICAgICAgICB9KTsKIAogICAgICAgICBkb25lLmxpbmsoJmppdCk7
CkBAIC02MjEsMTQgKzYxMywxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGCiAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAgICAgICBkb25lLmFwcGVuZChqaXQuanVt
cCgpKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKICAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvRjY0KT4oR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAgICBh
dXRvIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0VG9GNjQsIHRhZykpOwor
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4oY29udmVydFRvRjY0KSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGRvbmUubGluaygm
aml0KTsKQEAgLTY0MCwxMSArNjMxLDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0YKICAgICBqaXQucmV0KCk7CiAKICAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywg
bmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKICAg
ICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKHRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9p
ZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZv
aWQgewpAQCAtNjU1LDcgKzY0NSw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwg
QmluZGluZ0YKICAgICAgICAgfTsKIAogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
RnVuY3Rpb25QdHIoZG9VbndpbmRpbmcsIHRhZykpOworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oZG9VbndpbmRpbmcpKTsKICAg
ICAgICAgfSk7CiAgICAgfQogCkBAIC02NjMsMTUgKzY1MywxMyBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGlu
Z0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExp
bmtDYWxsUHRyVGFnLCB2bSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rp
b25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
KGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxS
ZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25P
Zih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVy
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0tPmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTRW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bDxKU0VudHJ5UHRyVGFnPiBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNFbnRyeVB0clRhZz4oZmFzdENhbGwpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0Q2Fs
bExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVy
KTsKIAotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5o
YXNoKCkpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0YWcsICJXZWJB
c3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1w
b3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiB9CiAKIHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2Fz
bTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCShyZXZpc2lvbiAyMzA3MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIEluc3RhbmNlOwog
Ci1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpOworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlu
a0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5k
ZXgpOwogCiB2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRp
b25UeXBlLCBJbnN0YW5jZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMzA3MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQog
ICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb247IH0KIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBqc0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5KQogICAgIHsKICAgICAgICAgaWYgKGFyaXR5ID09IEFyaXR5Q2hlY2tOb3RSZXF1aXJl
ZCkKICAgICAgICAgICAgIHJldHVybiBtX2pzRW50cnlwb2ludDsKQEAgLTgwLDcgKzgwLDcgQEAg
cHJpdmF0ZToKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbi9qc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0
aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNp
Z25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBtX2pzRW50cnlwb2ludDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uIG1faW1wb3J0YWJsZUZ1bmN0aW9uOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDIzMDczNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDQsNyArNjA0LDcgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgdm9pZCBsb2Fk
RnJvbUZyYW1lQW5kSnVtcCh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAg
anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9m
KHZvaWQqKSksIHB0clRhZyhZYXJyQmFja3RyYWNrUHRyVGFnLCAmbV9jb2RlQmxvY2spKTsKKyAg
ICAgICAganVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICog
c2l6ZW9mKHZvaWQqKSksIFlhcnJCYWNrdHJhY2tQdHJUYWcpOwogICAgIH0KIAogICAgIHVuc2ln
bmVkIGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXModW5zaWduZWQgY2FsbEZyYW1lU2l6ZSkKQEAg
LTkyNywxMSArOTI3LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW0KICAgICAgICAgfQogCiAgICAgICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvZGUgZ2Vu
ZXJhdGlvbiB0byBsaW5rIGFsbCByZXR1cm4gYWRkcmVzc2VzLgotICAgICAgICB2b2lkIGxpbmtE
YXRhTGFiZWxzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9j
aykKKyAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5wYXRjaChtX2JhY2t0cmFja1JlY29yZHNbaV0ubV9k
YXRhTGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2JhY2t0cmFja1JlY29yZHNbaV0ubV9i
YWNrdHJhY2tMb2NhdGlvbiwgcHRyVGFnKFlhcnJCYWNrdHJhY2tQdHJUYWcsICZjb2RlQmxvY2sp
KSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5wYXRjaChtX2JhY2t0cmFja1JlY29yZHNb
aV0ubV9kYXRhTGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxZYXJyQmFja3RyYWNrUHRyVGFn
PihtX2JhY2t0cmFja1JlY29yZHNbaV0ubV9iYWNrdHJhY2tMb2NhdGlvbikpOwogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgpAQCAtMzUwOCwyNCArMzUwOCwyNCBAQCBwdWJsaWM6CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHRyeVJlYWRVbmljb2RlQ2hhcmFj
dGVySGVscGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0
ZXJFbnRyeSwgTmVhckNvZGVQdHJUYWcpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
Tm9QdHJUYWc+IHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPE5vUHRyVGFnPihtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkpOwogCiAgICAg
ICAgICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscykK
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJIZWxwZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5s
aW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyLCBjb2RlQmxvY2spOworICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmtEYXRhTGFiZWxzKGxpbmtCdWZmZXIpOwogCiAgICAgICAgIGlmIChjb21w
aWxlTW9kZSA9PSBNYXRjaE9ubHkpIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENo
YXI4KQotICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIHB0clRhZyhZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgJmNv
ZGVCbG9jayksICJNYXRjaC1vbmx5IDgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKKyAgICAg
ICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgIk1hdGNoLW9ubHkgOC1iaXQgcmVn
dWxhciBleHByZXNzaW9uIikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNv
ZGVCbG9jay5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBw
dHJUYWcoWWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCAmY29kZUJsb2NrKSwgIk1hdGNoLW9ubHkg
MTYtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2su
c2V0MTZCaXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgWWFyck1hdGNo
T25seTE2Qml0UHRyVGFnLCAiTWF0Y2gtb25seSAxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgp
Ci0gICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgcHRyVGFnKFlhcnI4Qml0UHRyVGFnLCAmY29kZUJsb2NrKSwgIjgtYml0IHJlZ3Vs
YXIgZXhwcmVzc2lvbiIpKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUo
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBZYXJyOEJpdFB0clRhZywgIjgtYml0IHJlZ3VsYXIg
ZXhwcmVzc2lvbiIpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb2RlQmxv
Y2suc2V0MTZCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgcHRyVGFnKFlhcnIxNkJp
dFB0clRhZywgJmNvZGVCbG9jayksICIxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikpOworICAg
ICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQxNkJpdENvZGUoRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBZYXJyMTZCaXRQdHJUYWcsICIxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChtX2ZhaWx1cmVSZWFzb24pCiAgICAgICAgICAgICBjb2RlQmxv
Y2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbigqbV9mYWlsdXJlUmVhc29uKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDIzMDczNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtODYs
MTMgKzg2LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzOEJpdENvZGUoKSB7IHJldHVybiBt
X3JlZjguc2l6ZSgpOyB9CiAgICAgYm9vbCBoYXMxNkJpdENvZGUoKSB7IHJldHVybiBtX3JlZjE2
LnNpemUoKTsgfQotICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJl
ZikgeyBtX3JlZjggPSByZWY7IH0KLSAgICB2b2lkIHNldDE2Qml0Q29kZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgcmVmKSB7IG1fcmVmMTYgPSByZWY7IH0KKyAgICB2b2lkIHNldDhCaXRDb2RlKE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyOEJpdFB0clRhZz4gcmVmKSB7IG1fcmVmOCA9IHJlZjsg
fQorICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQ
dHJUYWc+IHJlZikgeyBtX3JlZjE2ID0gcmVmOyB9CiAKICAgICBib29sIGhhczhCaXRDb2RlTWF0
Y2hPbmx5KCkgeyByZXR1cm4gbV9tYXRjaE9ubHk4LnNpemUoKTsgfQogICAgIGJvb2wgaGFzMTZC
aXRDb2RlTWF0Y2hPbmx5KCkgeyByZXR1cm4gbV9tYXRjaE9ubHkxNi5zaXplKCk7IH0KLSAgICB2
b2lkIHNldDhCaXRDb2RlTWF0Y2hPbmx5KE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtYXRjaE9ubHkp
IHsgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OyB9Ci0gICAgdm9pZCBzZXQxNkJpdENvZGVNYXRj
aE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1hdGNoT25seSkgeyBtX21hdGNoT25seTE2ID0g
bWF0Y2hPbmx5OyB9CisgICAgdm9pZCBzZXQ4Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8WWFyck1hdGNoT25seThCaXRQdHJUYWc+IG1hdGNoT25seSkgeyBtX21hdGNoT25s
eTggPSBtYXRjaE9ubHk7IH0KKyAgICB2b2lkIHNldDE2Qml0Q29kZU1hdGNoT25seShNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPiBtYXRjaE9ubHkpIHsgbV9t
YXRjaE9ubHkxNiA9IG1hdGNoT25seTsgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJF
TlNfRVhQUkVTU0lPTlMpCiAgICAgYm9vbCB1c2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IHJl
dHVybiBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlcjsgfQpAQCAtMTAxLDI1ICsxMDEsMjUgQEAg
cHVibGljOgogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVu
Q29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXM4Qml0Q29kZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0
aW9uUHRyPFlhcnJKSVRDb2RlOD4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBw
dHJUYWcoWWFycjhCaXRQdHJUYWcsIHRoaXMpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0
LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTgsIFlhcnI4Qml0UHRyVGFn
PihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3Ro
LCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKICAgICB9CiAK
ICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQs
IHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzMTZC
aXRDb2RlKCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8
WWFyckpJVENvZGUxNj4obV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcHRyVGFn
KFlhcnIxNkJpdFB0clRhZywgdGhpcykpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZy
ZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRhZz4o
bV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwogICAgIH0KIAog
ICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJl
bkNvbnRleHRTaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczhCaXRDb2RlTWF0Y2hPbmx5
KCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJ
VENvZGVNYXRjaE9ubHk4PihtX21hdGNoT25seTguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHB0clRhZyhZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgdGhpcykpKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJl
dHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTgs
IFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPihtX21hdGNoT25seTguY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0LCBwYXJl
bkNvbnRleHRTaXplKSk7CiAgICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBV
Q2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQ
YXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCiAgICAgewogICAgICAgICBB
U1NFUlQoaGFzMTZCaXRDb2RlTWF0Y2hPbmx5KCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHkxNj4obV9tYXRjaE9ubHkx
Ni5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcHRyVGFnKFlhcnJNYXRjaE9ubHkxNkJpdFB0
clRhZywgdGhpcykpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0LCBw
YXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+
KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CiAgICAgfQog
I2Vsc2UKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCkBAIC0xODgsMTggKzE4OCwx
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fcmVmOCA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwotICAgICAgICBtX3JlZjE2ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCk7Ci0gICAgICAgIG1fbWF0Y2hPbmx5OCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZigpOwotICAgICAgICBtX21hdGNoT25seTE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Cisg
ICAgICAgIG1fcmVmOCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyOEJpdFB0clRhZz4oKTsK
KyAgICAgICAgbV9yZWYxNiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+
KCk7CisgICAgICAgIG1fbWF0Y2hPbmx5OCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0
Y2hPbmx5OEJpdFB0clRhZz4oKTsKKyAgICAgICAgbV9tYXRjaE9ubHkxNiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KCk7CiAgICAgICAgIG1fZmFpbHVy
ZVJlYXNvbiA9IHN0ZDo6bnVsbG9wdDsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG1fcmVmODsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9yZWYxNjsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9tYXRjaE9ubHk4OwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBtX21hdGNoT25seTE2OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJy
OEJpdFB0clRhZz4gbV9yZWY4OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQ
dHJUYWc+IG1fcmVmMTY7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4
Qml0UHRyVGFnPiBtX21hdGNoT25seTg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJN
YXRjaE9ubHkxNkJpdFB0clRhZz4gbV9tYXRjaE9ubHkxNjsKICNpZiBFTkFCTEUoWUFSUl9KSVRf
QUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICBib29sIG1fdXNlc1BhdHRlcm5Db250ZXh0QnVm
ZmVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0w
NC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6
ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8gYW5k
IFNhYW0gQmFyYXRpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorICAgICAgICAq
IGNzc2ppdC9DU1NQdHJUYWcuaDogQWRkZWQuCisgICAgICAgICogY3Nzaml0L0NvbXBpbGVkU2Vs
ZWN0b3IuaDoKKyAgICAgICAgKiBjc3NqaXQvRnVuY3Rpb25DYWxsLmg6CisgICAgICAgIChXZWJD
b3JlOjpGdW5jdGlvbkNhbGw6OkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpGdW5j
dGlvbkNhbGw6OnNldEZ1bmN0aW9uQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdGlv
bkNhbGw6OnByZXBhcmVBbmRDYWxsKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpjb21waWxlU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JGcmFnbWVu
dDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29udGV4dEZ1
bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJG
dW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5n
Q29udGV4dCk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2luZ2xlTXVsdGlTZWxlY3Rv
ckRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0
ZSBjb25zdCk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuaDoKKwogMjAxOC0wNC0xNyAg
QmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAKICAgICAgICAgW0N1cmxd
IEZpeCB0aW1pbmcgb2YgcmVwb3J0aW5nIGVycm9yIHRvIHRoZSBjbGllbnQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzMDczNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0OSw2ICs0OTQ5LDcgQEAKIAkJRkRGNkJBRjkx
MzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4
MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkRG
N0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FDMjFEQjAw
QTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9OwogCQlGRTBEODRFOTEwNDg0
MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjcxRjY3
MjA4MkRCRTUwMEE5NTJENCAvKiBDU1NQdHJUYWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjcxRjY0MjA4MkRCQkUwMEE5NTJENCAvKiBDU1NQdHJU
YWcuaCAqLzsgfTsKIAkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25E
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2
RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLzsgfTsKIAkJRkUz
NkZEMTcxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMzE2Qzc4
MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCAqLzsgfTsKIAkJRkUz
NkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZGRDE0MTZDNzgyNjQwMEY4
ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlLmggKi87IH07CkBAIC0xNDc5Niw2ICsxNDc5Nyw3
IEBACiAJCUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5
RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBEODRFQTEwNDg0MzZFMDAxQTE3
OUUgLyogV2ViRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUyNzFGNjQyMDgy
REJCRTAwQTk1MkQ0IC8qIENTU1B0clRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NQdHJUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNkZEMTEx
NkM3ODI2NDAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENoYW5nZVZlcnNpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzZGRDEyMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRl
TWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFu
c2FjdGlvblN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MzZGRDEzMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGlu
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxNzcsNiArMTYxNzksNyBAQAog
CQkyNkI5OTk4RDE4MDNBREZBMDBEMDExMjEgLyogY3Nzaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTI3MUY2NDIwODJEQkJFMDBBOTUyRDQgLyog
Q1NTUHRyVGFnLmggKi8sCiAJCQkJRTQ0NTEwNzcyMDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVk
U2VsZWN0b3IuaCAqLywKIAkJCQkyNkI5OTk5MjE4MDNCOUQ5MDBEMDExMjEgLyogRnVuY3Rpb25D
YWxsLmggKi8sCiAJCQkJMjZCOTk5OEUxODAzQUU3MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2Nh
dG9yLmggKi8sCkBAIC0yNzY0NCw2ICsyNzY0Nyw3IEBACiAJCQkJNkUwRTU2OUMxODNCRkZFNjAw
RTBFOEQ1IC8qIEZsb2F0Um91bmRlZFJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTZE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4Q0Qz
NUNCMThFQjRDMzkwMEI5RjNBQyAvKiBGbG9hdFNpemVIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTI3MUY2NzIwODJEQkU1MDBBOTUyRDQgLyogQ1NTUHRyVGFnLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNjIyODc4NDBCNERCMzIyMDAwQzM0REYgLyogRm9jdXNEaXJlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjM1MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2
ZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVs
ZUNvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDcgKzM5Miw3
IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWEKICAgICB9CiAKICAg
ICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgJiYgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMg
PT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7Ci0g
ICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3IuY29kZVJl
ZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsKKyAg
ICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVj
dG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3RvckNoZWNrZXIs
IGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsKICNpZiAhQVNTRVJUX01TR19ESVNBQkxFRAogICAg
ICAgICB1bnNpZ25lZCBpZ25vcmVTcGVjaWZpY2l0eTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQsICZpZ25vcmVTcGVjaWZpY2l0eSkgfHwg
bV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gTk9QU0VVRE8sICJXaGVuIG1hdGNoaW5n
IHBzZXVkbyBlbGVtZW50cywgd2Ugc2hvdWxkIG5ldmVyIGNvbXBpbGUgYSBzZWxlY3RvciBjaGVj
a2VyIHdpdGhvdXQgY29udGV4dCB1bmxlc3MgaXQgY2Fubm90IG1hdGNoIGFueXRoaW5nLiIpOwpA
QCAtNDIwLDcgKzQyMCw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxl
TWEKICAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIpIHsKICAgICAgICAgQVNTRVJUKGNv
bXBpbGVkU2VsZWN0b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVj
dG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwogCi0gICAgICAgIGF1dG8gc2VsZWN0b3JD
aGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1
bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYsIGNvbXBp
bGVkU2VsZWN0b3JDaGVja2VyLCBjb21waWxlZFNlbGVjdG9yLnN0YXR1cyk7CisgICAgICAgIGF1
dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNlbGVj
dG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVjdG9yQ2hl
Y2tlciwgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMpOwogCiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9Q
Uk9GSUxJTkcKICAgICAgICAgY29tcGlsZWRTZWxlY3Rvci51c2VDb3VudCsrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3Nzaml0L0NTU1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9DU1NQdHJUYWcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3NqaXQvQ1NTUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Q
dHJUYWcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIEpTQzo6
UHRyVGFnIENTU1NlbGVjdG9yUHRyVGFnID0gc3RhdGljX2Nhc3Q8SlNDOjpQdHJUYWc+KDB4YzU1
MSk7CitzdGF0aWMgY29uc3RleHByIEpTQzo6UHRyVGFnIENTU09wZXJhdGlvblB0clRhZyA9IHN0
YXRpY19jYXN0PEpTQzo6UHRyVGFnPigweGM1NTIpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAorI2luY2x1ZGUg
IkNTU1B0clRhZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3ICs1OCw3IEBAIHByaXZhdGU6
CiBzdHJ1Y3QgQ29tcGlsZWRTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxM
T0NBVEVEOwogICAgIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgc3RhdHVzOwotICAgIEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWY7CisgICAgSlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+IGNvZGVSZWY7CiAjaWYgZGVmaW5lZChDU1NfU0VMRUNU
T1JfSklUX1BST0ZJTElORykgJiYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICB1bnNp
Z25lZCB1c2VDb3VudCB7IDAgfTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0
L0Z1bmN0aW9uQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5j
dGlvbkNhbGwuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1
bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShDU1NfU0VMRUNUT1JfSklUKQogCisjaW5jbHVkZSAiQ1NTUHRyVGFnLmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdGFja0FsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dQUkluZm8uaD4KQEAgLTM2LDcgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGdW5jdGlvbkNhbGwgewogcHVibGljOgotICAgIEZ1bmN0
aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9y
JiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0
b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+
LCAzMj4mIGNhbGxSZWdpc3RyeSkKKyAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxl
ciYgYXNzZW1ibGVyLCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNr
QWxsb2NhdG9yJiBzdGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4+LCAzMj4m
IGNhbGxSZWdpc3RyeSkKICAgICAgICAgOiBtX2Fzc2VtYmxlcihhc3NlbWJsZXIpCiAgICAgICAg
ICwgbV9yZWdpc3RlckFsbG9jYXRvcihyZWdpc3RlckFsbG9jYXRvcikKICAgICAgICAgLCBtX3N0
YWNrQWxsb2NhdG9yKHN0YWNrQWxsb2NhdG9yKQpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgc2V0RnVuY3Rpb25BZGRyZXNzKEpTQzo6RnVuY3Rpb25Q
dHIgZnVuY3Rpb25BZGRyZXNzKQorICAgIHZvaWQgc2V0RnVuY3Rpb25BZGRyZXNzKEpTQzo6RnVu
Y3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbkFkZHJlc3MpCiAgICAgewogICAg
ICAgICBtX2Z1bmN0aW9uQWRkcmVzcyA9IGZ1bmN0aW9uQWRkcmVzczsKICAgICB9CkBAIC0xNDcs
NyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKG1f
Zmlyc3RBcmd1bWVudCwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICB9CiAK
LSAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gbV9hc3NlbWJsZXIuY2Fs
bChKU0M6OkNGdW5jdGlvblB0clRhZyk7CisgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCA9IG1fYXNzZW1ibGVyLmNhbGwoQ1NTT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAg
bV9jYWxsUmVnaXN0cnkuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwsIG1fZnVuY3Rpb25BZGRy
ZXNzKSk7CiAgICAgfQogCkBAIC0xNzgsMTIgKzE3OSwxMiBAQCBwcml2YXRlOgogICAgIEpTQzo6
TWFjcm9Bc3NlbWJsZXImIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9yJiBtX3Jl
Z2lzdGVyQWxsb2NhdG9yOwogICAgIFN0YWNrQWxsb2NhdG9yJiBtX3N0YWNrQWxsb2NhdG9yOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5j
dGlvblB0cj4sIDMyPiYgbV9jYWxsUmVnaXN0cnk7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRh
Zz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5OwogCiAgICAgUmVnaXN0ZXJWZWN0b3IgbV9zYXZlZFJl
Z2lzdGVyczsKICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3IgbV9zYXZl
ZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIAotICAgIEpTQzo6RnVuY3Rpb25QdHIgbV9m
dW5jdGlvbkFkZHJlc3M7CisgICAgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+
IG1fZnVuY3Rpb25BZGRyZXNzOwogICAgIHVuc2lnbmVkIG1fYXJndW1lbnRDb3VudDsKICAgICBK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fZmlyc3RBcmd1bWVudDsKICAgICBKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fc2Vjb25kQXJndW1lbnQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzA3MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw4ICsyMDEsOCBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAg
VmVjdG9yPGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+Kj4gbGFuZ3VhZ2VBcmd1bWVudHNMaXN0
OwogICAgIFZlY3Rvcjxjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgOD4gY2xhc3NOYW1lczsKICAg
ICBIYXNoU2V0PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwotICAgIFZlY3RvcjxKU0M6OkZ1bmN0
aW9uUHRyLCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEpTQzo6RnVu
Y3Rpb25QdHIsIDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhDb250ZXh0OworICAgIFZl
Y3RvcjxKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4sIDQ+IHVub3B0aW1pemVk
UHNldWRvQ2xhc3NlczsKKyAgICBWZWN0b3I8SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+LCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dDsKICAgICBWZWN0
b3I8QXR0cmlidXRlTWF0Y2hpbmdJbmZvLCA0PiBhdHRyaWJ1dGVzOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8aW50LCBpbnQ+LCAyPiBudGhDaGlsZEZpbHRlcnM7CiAgICAgVmVjdG9yPE50aENoaWxk
T2ZTZWxlY3RvckluZm8+IG50aENoaWxkT2ZGaWx0ZXJzOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0
cnVjdCBCYWNrdHJhY2tpbmdMZXZlbCB7CiBjbGFzcyBTZWxlY3RvckNvZGVHZW5lcmF0b3Igewog
cHVibGljOgogICAgIFNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3RvciosIFNl
bGVjdG9yQ29udGV4dCk7Ci0gICAgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJik7CisgICAgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1
cyBjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiYp
OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXI7CkBAIC0yOTIsOCArMjkyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nVGFnTmFtZUZh
aWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVt
ZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5n
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVu
dCYpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOwotICAgIHZvaWQgZ2Vu
ZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rp
b25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rp
b25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPik7CisgICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5j
dGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5j
dGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElz
QWN0aXZlKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNFbXB0eShBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENo
aWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CkBAIC0zMDksNyArMzA5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZU1hdGNoaW5nKEFz
c2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1
cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZGVjSW5kZXhSZWdp
c3RlciwgY29uc3QgQXR0cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsKICAgICB2
b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0
ZUFkZHJlc3MsIGNvbnN0IEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyYgYXR0cmlidXRlSW5mbyk7CiAg
ICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVu
dEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0
cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5KTsKLSAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0
dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmli
dXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBKU0M6OkZ1bmN0aW9uUHRy
IGNhc2VTZW5zaXRpdmVUZXN0LCBKU0M6OkZ1bmN0aW9uUHRyIGNhc2VJbnNlbnNpdGl2ZVRlc3Qp
OworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRj
aGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3Rl
ZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIEpT
Qzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0aXZlVGVzdCwgSlND
OjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNpdGl2ZVRlc3QpOwog
ICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFtZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIGNvbnN0IENTU1NlbGVjdG9yJiB0YWdNYXRjaGluZ1NlbGVjdG9yKTsKICAg
ICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc0lkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFBZGRyZXNzLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkVG9NYXRjaCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNDbGFzc2Vz
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYg
ZWxlbWVudERhdGFBZGRyZXNzLCBjb25zdCBWZWN0b3I8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCos
IDg+JiBjbGFzc05hbWVzKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwcml2YXRlOgogICAgIEFzc2Vt
YmxlciBtX2Fzc2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRvciBtX3JlZ2lzdGVyQWxsb2Nh
dG9yOwogICAgIFN0YWNrQWxsb2NhdG9yIG1fc3RhY2tBbGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+LCAzMj4gbV9mdW5jdGlv
bkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0
aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4+LCAzMj4gbV9mdW5jdGlvbkNhbGxzOwogCiAgICAg
U2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1bmN0aW9uVHlwZSBtX2Z1
bmN0aW9uVHlwZTsKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjCiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1h
dGlvbihTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIHVuc2lnbmVkIGxl
dmVsID0gMCk7CiAKLVNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBsYXN0U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNv
bnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmKQorU2VsZWN0b3JDb21w
aWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIGxhc3RTZWxl
Y3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+JiBjb2RlUmVmKQogewogICAgIGlmICghSlNDOjpW
TTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
OjpDYW5ub3RDb21waWxlOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBm
cmFnbWVudE1hdGNoZXNSaWdodG0KIAogRnVuY3Rpb25UeXBlIFNlbGVjdG9yRnJhZ21lbnQ6OmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29sICgqbWF0Y2hlcikoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmKSkKIHsKLSAgICB1bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVy
KSk7CisgICAgdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRleHQuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVyKSk7CiAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dDsKIH0KIApAQCAt
NTM0LDgzICs1MzQsODMgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xh
cwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIC8vIFVub3B0aW1pemVkIHBzZXVkbyBzZWxlY3Rv
ci4gVGhleSBhcmUganVzdCBmdW5jdGlvbiBjYWxsIHRvIGEgc2ltcGxlIHRlc3RpbmcgZnVuY3Rp
b24uCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbDoKLSAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRy
KGlzQXV0b2ZpbGxlZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0F1dG9maWxs
ZWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQXV0b2ZpbGxTdHJvbmdQYXNzd29y
ZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6
OkZ1bmN0aW9uUHRyKGlzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkKSk7CisgICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NP
cGVyYXRpb25QdHJUYWc+KGlzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkKSk7CiAgICAgICAgIHJl
dHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNrZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0NoZWNrZWQpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNDaGVja2VkKSk7CiAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RlZmF1bHQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRGVmYXVsdFBzZXVkb0NsYXNzKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3Mp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlzYWJsZWQ6Ci0gICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRj
aGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiht
YXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NFbmFibGVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzcykpOworICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25Q
dHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmluZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0RlZmluZWRFbGVt
ZW50KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzRGVmaW5lZEVsZW1lbnQpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRm9jdXM6Ci0gICAgICAgIGZyYWdtZW50LnVu
b3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihTZWxlY3RvckNo
ZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+KFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFBhZ2VNZWRpYToKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzTWVkaWFE
b2N1bWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc01lZGlhRG9jdW1lbnQp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5SYW5nZToKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzSW5S
YW5nZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0luUmFuZ2UpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5kZXRlcm1pbmF0ZToKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNJ
bmRldGVybWluYXRlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4o
bWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NJbnZhbGlkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNJbnZhbGlkKSk7CisgICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVy
YXRpb25QdHJUYWc+KGlzSW52YWxpZCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NP
cHRpb25hbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyKGlzT3B0aW9uYWxGb3JtQ29udHJvbCkpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NT
T3BlcmF0aW9uUHRyVGFnPihpc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzT3V0T2ZSYW5nZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzT3V0T2ZSYW5nZSkpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rp
b25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc091dE9mUmFuZ2UpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzUmVhZE9ubHk6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzUmVhZE9ubHlQc2V1ZG9D
bGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzUmVhZE9ubHlQc2V1
ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFkV3JpdGU6Ci0gICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlv
blB0cihtYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlv
blB0clRhZz4obWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1JlcXVpcmVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIoaXNSZXF1aXJlZEZvcm1Db250cm9sKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzUmVxdWlyZWRGb3JtQ29udHJvbCkpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWYWxpZDoKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzVmFsaWQpKTsK
KyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1
bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNWYWxpZCkpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzV2luZG93SW5hY3RpdmUp
KTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6
OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NG
dWxsU2NyZWVuOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rp
b25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7
CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3JlZW5Eb2N1bWVudDoKLSAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyKG1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NT
T3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVsbFNjcmVlbkRvY3VtZW50UHNldWRvQ2xhc3MpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25Q
dHIobWF0Y2hlc0Z1bGxTY3JlZW5BbmNlc3RvclBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NP
cGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdWxsU2NyZWVuQW5jZXN0b3JQc2V1ZG9DbGFzcykpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlv
bjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6
OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRp
b25Qc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVs
bFNjcmVlbkFuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uUHNldWRvQ2xhc3MpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
RnV0dXJlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CisgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNGdXR1cmVDdWVQc2V1ZG9DbGFzcykpOwogICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQYXN0OgotICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc1Bhc3RDdWVQ
c2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzUGFzdEN1
ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICNlbmRpZgogCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCB2b2lkIGNvbXB1dGVC
YWNrdHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVuCiAgICAgfQogfQogCi1pbmxpbmUgU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCitpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+JiBjb2RlUmVmKQogewogICAgIHN3aXRjaCAobV9mdW5j
dGlvblR5cGUpIHsKICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OgpAQCAtMTI0NCwxMSArMTI0NCwxMCBAQCBpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1
cyBTZWxlY3RvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnVuY3Rpb25DYWxscy5z
aXplKCk7IGkrKykKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fZnVuY3Rpb25DYWxsc1tpXS5m
aXJzdCwgbV9mdW5jdGlvbkNhbGxzW2ldLnNlY29uZCk7CiAKLSAgICBKU0M6OlB0clRhZyB0YWcg
PSBwdHJUYWcoJmNvZGVSZWYsIG1fc2VsZWN0b3JDb250ZXh0KTsKICNpZiBDU1NfU0VMRUNUT1Jf
SklUX0RFQlVHR0lORwotICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhE
aXNhc3NlbWJseSh0YWcsICJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVzXCIiLCBtX29yaWdpbmFs
U2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGNvZGVSZWYgPSBs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShDU1NTZWxlY3RvclB0clRhZywg
IkNTUyBTZWxlY3RvciBKSVQgZm9yIFwiJXNcIiIsIG1fb3JpZ2luYWxTZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCkudXRmOCgpLmRhdGEoKSk7CiAjZWxzZQotICAgIGNvZGVSZWYgPSBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIHRhZywgIkNTUyBTZWxlY3RvciBKSVQiKTsKKyAgICBjb2RlUmVmID0g
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBDU1NTZWxlY3RvclB0clRhZywgIkNTUyBTZWxlY3Rv
ciBKSVQiKTsKICNlbmRpZgogCiAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyIHx8IG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlw
ZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTMwMTksNyArMzAxOCw3IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1h
dGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcmIGV4cGVj
dGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwg
SlNDOjpGdW5jdGlvblB0ciBjYXNlU2Vuc2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0ciBjYXNl
SW5zZW5zaXRpdmVUZXN0KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFk
ZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNl
bnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4gY2FzZVNlbnNpdGl2ZVRlc3QsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0
aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVUZXN0KQogewogICAgIExvY2FsUmVnaXN0ZXJXaXRo
UHJlZmVyZW5jZSBleHBlY3RlZFZhbHVlUmVnaXN0ZXIobV9yZWdpc3RlckFsbG9jYXRvciwgSlND
OjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGV4cGVjdGVkVmFsdWUuaW1wbCgpKSwgZXhwZWN0ZWRWYWx1ZVJlZ2lz
dGVyKTsKQEAgLTMwNzUsNyArMzA3NCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW0KICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCit2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiB0
ZXN0RnVuY3Rpb24pCiB7CiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnRBZGRyZXNz
ID0gZWxlbWVudEFkZHJlc3NSZWdpc3RlcjsKICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwpAQCAtMzA4NCw3ICszMDgzLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxs
LmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0K
IAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2Fs
bFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRy
IHRlc3RGdW5jdGlvbikKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUNvbnRl
eHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlND
OjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IHRlc3RGdW5jdGlvbikKIHsKICAgICBB
c3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0ID0gbV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZVJlZ2lzdGVyKCk7CiAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0Nv
bnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCShy
ZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywzNCArNTMsMzAgQEAgdHlwZWRlZiB1bnNpZ25lZCAo
KlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZQogdHlwZWRlZiB1bnNpZ25lZCAoKlJ1bGVDb2xsZWN0b3JT
ZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KShjb25zdCBFbGVtZW50KiwgU2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqLCB1bnNpZ25lZCopOwogdHlwZWRlZiB1bnNpZ25l
ZCAoKlF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KShjb25z
dCBFbGVtZW50KiwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqKTsKIAot
U2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqLCBTZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvdXRwdXRD
b2RlUmVmKTsKK1NlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG9yKGNvbnN0
IENTU1NlbGVjdG9yKiwgU2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxDU1NTZWxlY3RvclB0clRhZz4mIG91dHB1dENvZGVSZWYpOwogCi1pbmxpbmUgUnVsZUNvbGxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBydWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVj
a2VyRnVuY3Rpb24oY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0
aW9uU3RhdHVzKQoraW5saW5lIFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgcnVs
ZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHZvaWQqIGV4ZWN1dGFibGVB
ZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewog
ICAgIEFTU0VSVF9VTlVTRUQoY29tcGlsYXRpb25TdGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09
IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcik7Ci0gICAg
SlNDOjpQdHJUYWcgdGFnID0gSlNDOjpwdHJUYWcoJmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6
UnVsZUNvbGxlY3Rvcik7Ci0gICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UnVsZUNv
bGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlcj4oZXhlY3V0YWJsZUFkZHJlc3MsIHRhZyk7Cisg
ICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxlY3RvclNpbXBsZVNlbGVj
dG9yQ2hlY2tlciwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzKTsKIH0KIAot
aW5saW5lIFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgcXVlcnlTZWxlY3RvclNp
bXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmJiBjb2RlUmVmLCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKK2lubGluZSBRdWVyeVNlbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyIHF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbih2
b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxh
dGlvblN0YXR1cykKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGF0aW9uU3RhdHVzLCBjb21w
aWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIpOwotICAgIEpTQzo6UHRyVGFnIHRhZyA9IEpTQzo6cHRyVGFnKCZjb2RlUmVmLCBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwotICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1
bmN0aW9uUHRyPFF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXI+KGV4ZWN1dGFibGVB
ZGRyZXNzLCB0YWcpOworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2Vs
ZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIsIENTU1NlbGVjdG9yUHRyVGFnPihleGVjdXRhYmxl
QWRkcmVzcyk7CiB9CiAKLWlubGluZSBSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hl
Y2tpbmdDb250ZXh0KGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmLCB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxh
dGlvblN0YXR1cykKK2lubGluZSBSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNr
aW5nQ29udGV4dCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tp
bmdDb250ZXh0KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29tcGlsYXRpb25T
dGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwotICAgIEpTQzo6UHRyVGFnIHRhZyA9
IEpTQzo6cHRyVGFnKCZjb2RlUmVmLCBTZWxlY3RvckNvbnRleHQ6OlJ1bGVDb2xsZWN0b3IpOwot
ICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0PihleGVjdXRhYmxlQWRkcmVzcywgdGFnKTsKKyAgICBy
ZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNz
KTsKIH0KIAotaW5saW5lIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdD
b250ZXh0IHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0Nv
bnRleHQoY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3Rh
dHVzKQoraW5saW5lIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0IHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRl
eHQodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsYXRpb25TdGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxhdGlvblN0YXR1cywg
Y29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7Ci0gICAgSlNDOjpQdHJUYWcgdGFnID0gSlNDOjpw
dHJUYWcoJmNvZGVSZWYsIFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcik7Ci0gICAgcmV0
dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQ+KGV4ZWN1dGFibGVBZGRyZXNzLCB0YWcpOworICAgIHJldHVybiBK
U0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0LCBDU1NTZWxlY3RvclB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAyMzA3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSwxMSArNDUxLDExIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUKICAgICAgICAgICAgIGJvb2wg
bWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICAgICAgdm9pZCogY29tcGlsZWRTZWxlY3RvckNoZWNr
ZXIgPSBzZWxlY3Rvci5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyA9PSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5
U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihzZWxlY3Rvci5jb21waWxlZFNl
bGVjdG9yQ29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yLmNvbXBpbGF0
aW9uU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVj
dG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihj
b21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMpOwogICAg
ICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3IuY29tcGlsYXRp
b25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIg
PSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25X
aXRoQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLCBjb21w
aWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMpOworICAgICAg
ICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlT
ZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxl
ZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMpOwogICAgICAgICAg
ICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQsICZjaGVja2luZ0NvbnRl
eHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHsKQEAgLTU0Mywx
MSArNTQzLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUKICAg
ICAgICAgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEgPSBtX3NlbGVjdG9ycy5maXJz
dCgpOwogICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHNlbGVjdG9yRGF0
YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgICAgIFNlbGVj
dG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hl
Y2tlckZ1bmN0aW9uKHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZiwgY29tcGls
ZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyk7CisgICAg
ICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVj
a2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTaW1w
bGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0
b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKICAgICAgICAgICAgIGV4ZWN1dGVDb21waWxlZFNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjxTZWxlY3RvclF1ZXJ5VHJhaXQ+KCpzZWFyY2hSb290Tm9kZSwg
c2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQpOwotICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxlY3RvclNlbGVjdG9y
Q2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21w
aWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29u
dGV4dChzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0
b3JDaGVja2VyLCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMpOworICAgICAgICAgICAg
U2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3Rv
clNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVj
dG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKICAgICAgICAgICAg
IGV4ZWN1dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQ8U2VsZWN0
b3JRdWVyeVRyYWl0Pihyb290Tm9kZSwgKnNlYXJjaFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIs
IG91dHB1dCwgc2VsZWN0b3JEYXRhKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAkocmV2aXNpb24gMjMwNzM0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yOwogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQotICAgICAgICBtdXRhYmxlIEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmOworICAgICAgICBt
dXRhYmxlIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiBjb21w
aWxlZFNlbGVjdG9yQ29kZVJlZjsKICAgICAgICAgbXV0YWJsZSBTZWxlY3RvckNvbXBpbGF0aW9u
U3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzOwogI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5H
CiAgICAgICAgIH5TZWxlY3RvckRhdGEoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338179</attachid>
            <date>2018-04-17 18:44:49 -0700</date>
            <delta_ts>2018-04-17 20:05:00 -0700</delta_ts>
            <desc>patch for landing + speculative build fix for Windows.</desc>
            <filename>bug-184702b.patch</filename>
            <type>text/plain</type>
            <size>627447</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyMCBA
QAorMjAxOC0wNC0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGVtcGxhdGl6ZSBDb2RlUHRyL1JlZnMvRnVuY3Rpb25QdHJzIHdpdGggUHRyVGFncy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcwMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzUzOTE2ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAg
UGl6bG8gYW5kIFNhYW0gQmFyYXRpLgorCisgICAgICAgIDEuIFRlbXBsYXRpemVkIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ci9SZWYsIEZ1bmN0aW9uUHRyLCBhbmQgQ29kZUxvY2F0aW9uIHZhcmlhbnRz
CisgICAgICAgICAgIHRvIHRha2UgYSBQdHJUYWcgdGVtcGxhdGUgYXJndW1lbnQuCisgICAgICAg
IDIuIFJlcGxhY2VkIHNvbWUgdXNlcyBvZiByYXcgcG9pbnRlcnMgd2l0aCB0aGUgZXF1aXZhbGVu
dCBDb2RlUHRyIC8gRnVuY3Rpb25QdHIuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Z2V0
TGlua2VyQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXBUb05vcCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDb21wYWN0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEludDMyKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZWFkUG9pbnRl
cik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoTG9h
ZCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRk
cmVzc0NvbXB1dGF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uQ29tbW9uOjpDb2RlTG9jYXRpb25Db21tb24pOgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25JbnN0cnVjdGlvbjo6Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24pOgorICAgICAg
ICAoSlNDOjpDb2RlTG9jYXRpb25MYWJlbDo6Q29kZUxvY2F0aW9uTGFiZWwpOgorICAgICAgICAo
SlNDOjpDb2RlTG9jYXRpb25MYWJlbDo6cmV0YWdnZWQpOgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25MYWJlbDo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uSnVtcDo6Q29k
ZUxvY2F0aW9uSnVtcCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkp1bXA6OnJldGFnZ2Vk
KToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ2FsbDo6Q29kZUxvY2F0aW9uQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNhbGw6OnJldGFnZ2VkKToKKyAgICAgICAgKEpTQzo6
Q29kZUxvY2F0aW9uTmVhckNhbGw6OkNvZGVMb2NhdGlvbk5lYXJDYWxsKToKKyAgICAgICAgKEpT
Qzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzI6OkNvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKToKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDo6Q29kZUxvY2F0aW9uRGF0
YUxhYmVsQ29tcGFjdCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjo6
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKToKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkOjpDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6aW5zdHJ1Y3Rpb25BdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpsYWJlbEF0T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46Omp1bXBBdE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpjYWxsQXRPZmZzZXQpOgorICAgICAgICAoSlND
OjpDb2RlTG9jYXRpb25Db21tb248dGFnPjo6bmVhckNhbGxBdE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWxQdHJBdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpkYXRhTGFiZWwzMkF0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0
aWJsZUxvYWRBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNvbW1vbjo6aW5z
dHJ1Y3Rpb25BdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlvbkNv
bW1vbjo6bGFiZWxBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVMb2NhdGlv
bkNvbW1vbjo6anVtcEF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0
aW9uQ29tbW9uOjpjYWxsQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9j
YXRpb25Db21tb246Om5lYXJDYWxsQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWwzMkF0T2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlTG9jYXRpb25Db21tb246OmNvbnZl
cnRpYmxlTG9hZEF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXRE
aXNhc3NlbWJseUltcGwpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVX
aXRoRGlzYXNzZW1ibHlJbXBsKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3Nl
bWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGF0Y2gpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjplbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZik6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAgICAgIChK
U0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OnRyYW1wb2xpbmVBdCk6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZWFk
Q2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXBsYWNlV2l0
aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cmVhZENhbGxUYXJnZXQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXBsYWNlV2l0aFZNSGFsdCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RhcnRPZlBhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk02NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk12Nzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
djc6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12
Nzo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
Y3BwOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5h
bWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjp0cnlUb0Rpc2Fz
c2VtYmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNz
ZW1ibHkpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50
Q29kZVB0cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
ZHVtcFdpdGhOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1ibGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmRpc2Fzc2VtYmx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkdW1wIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
Lmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0cik6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uUHRyOjpyZXRhZ2dlZCBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
UHRyOjpyZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25QdHI6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6
b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChKU0M6OlJldHVybkFkZHJlc3NQdHI6OlJldHVy
bkFkZHJlc3NQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpyZXRhZ2dlZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpk
dW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpyZXRhZ2dlZENvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fzc2Vt
YmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpkaXNhc3Nl
bWJseSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRyKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyTUlQUzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyTUlQUzo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Mp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXBhdGNoQ2FsbCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bGlua0NhbGwpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Njo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6
c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Njo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVz
cyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Njo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpyZXBhdGNoQ29tcGFjdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpyZXBsYWNlV2l0aFZNSGFsdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Nl82NDo6c3RhcnRPZkJyYW5jaDMyV2l0aFBhdGNoT25SZWdpc3Rlcik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
T25BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRy
V2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJlcGF0Y2hD
YWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmxpbmtDYWxsKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjpjb21waWxlKToK
KyAgICAgICAgKEpTQzo6aW52b2tlKToKKyAgICAgICAgKEpTQzo6dGVzdFByb2JlTW9kaWZpZXNQ
cm9ncmFtQ291bnRlcik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpDb21waWxhdGlvbjo6Q29tcGlsYXRpb24pOgorICAgICAgICAqIGIzL0IzQ29t
cGlsYXRpb24uaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpjb2RlUmVmIGNvbnN0KToKKyAgICAgICAg
KiBiMy9CM0NvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6CisgICAgICAg
ICogYjMvQjNMb3dlck1hY3Jvcy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckRpc2Fzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRpc2Fzc2VtYmxlcjo6ZHVtcCk6CisgICAg
ICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjppbnZva2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEludGVycHJldGVy
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFNpbXBsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmROb25Ucml2aWFsRW50cnlwb2ludCk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hMb29wKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToK
KyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAg
IChKU0M6OlNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5m
bzo6QnlWYWxJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6aG90UGF0aEJlZ2luKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzbG93UGF0
aFN0YXJ0KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpzZXRDYWxsTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjpob3RQYXRoT3RoZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJ5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6
R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29u
dGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmN1c3RvbUFjY2Vzc29yR2V0dGVyIGNvbnN0KToKKyAg
ICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6
OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmN1c3RvbUFjY2Vzc29yIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6SGFuZGxl
ckluZm86OmluaXRpYWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OmxpbmtDb2RlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
aDoKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
SnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OlNpbXBsZUp1bXBUYWJsZTo6
Y3RpRm9yVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkxMSW50Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlv
blN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
Ojpjb2RlIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2xvd1BhdGhDYWxsTG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZG9uZUxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNsb3dQYXRoU3RhcnRMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpwYXRjaGFibGVKdW1wRm9ySW4pOgorICAgICAgICAq
IGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YXBw
ZW5kQ2F0Y2hFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpub3RpY2VDYXRjaEVudHJ5cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxMaW5rUmVjb3JkOjpDYWxsTGlua1JlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFwcGVuZENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0NhbGxSZWNvcmQ6OkpTQ2FsbFJlY29yZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTRGlyZWN0Q2FsbFJlY29yZDo6SlNEaXJlY3RD
YWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNEaXJlY3RUYWls
Q2FsbFJlY29yZDo6SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR0pJ
VEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpKSVRGaW5h
bGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1l
bnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKdW1wUmVwbGFjZW1lbnQ6Okp1bXBSZXBsYWNlbWVu
dCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnku
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5o
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAg
KEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxs
RnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Q2Fs
bFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OnVucGFja0FuZEdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpzbG93UGF0aENhbGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2FsbERPTSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
YWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaEludEp1bXApOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0
cmluZ09uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXREaXJlY3RQbmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxTZXRSZXN1bHQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWRXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlND
OjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlU
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeVRvRGlz
YXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHA6
CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpkaXNhc3NlbWJsZSk6CisgICAgICAg
IChKU0M6OmRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAg
ICAgICogZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6
OnRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvVURp
czg2RGlzYXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGVXaXRoVURp
czg2KToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRp
b25UYXJnZXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvblRhcmdldDo6bGFiZWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvblRhcmdldDo6anVtcHMpOgorICAgICAgICAq
IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDoKKyAgICAgICAgKiBmdGwvRlRMR2VuZXJhdGVkRnVu
Y3Rpb24uaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6SklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2Rl
Ojppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmIzQ29kZSBjb25zdCk6CisgICAgICAgICogZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUNvbW1vbik6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRo
Lmg6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpwYXRjaGFibGVKdW1wIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmRvbmUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6c3R1YiBjb25zdCk6CisgICAgICAgICogZnRsL0ZU
TExhenlTbG93UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGlyZWN0Q2FsbE9yQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVj
dFZhcmFyZ3NTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVJbik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbERPTUdldHRlcik6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmxhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZU
TE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2ggY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0
dWIpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdEhhbmRsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdEhhbmRs
ZTo6ZW1pdEV4aXRUaHVuayk6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExMYXp5U2xvd1BhdGgpOgorICAgICAgICAqIGZ0bC9G
VExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCk6Cisg
ICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsQ29udGV4dDo6a2V5V2l0aFRhcmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZU
TDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93
UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0
aENhbGxLZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OlNsb3dQYXRoQ2FsbEtleSk6
CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpjYWxsVGFyZ2V0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OndpdGhDYWxsVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAo
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFB0clRhZyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3Rh
dGUpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omdl
bmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93
UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpr
ZXlGb3JUaHVuayk6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRTbG93UGF0aENhbGxU
aHVuayk6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjprZXlGb3JTbG93UGF0aENhbGxUaHVu
ayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpnZXRPcGNvZGVJRCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlv
bkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENh
bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAg
ICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6Omlu
aXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpwZXJmb3JtSklUTWVtY3B5KToK
KyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAo
SlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlv
bkhhbmRsZXI6OkdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKToKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAqIGppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSklUU3R1YlJvdXRpbmUpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlND
OjpDYWxsUmVjb3JkOjpDYWxsUmVjb3JkKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgor
ICAgICAgICAqIGppdC9KSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQ29kZVdpdGhDb2Rl
UmVmOjpKSVRDb2RlV2l0aENvZGVSZWYpOgorICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVS
ZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRD
b2RlOjpEaXJlY3RKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6aW5pdGlh
bGl6ZUNvZGVSZWYpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bCk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUpOgorICAgICAg
ICAoSlNDOjpOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6
Ok5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5o
OgorICAgICAgICAqIGppdC9KSVRDb2RlTWFwLmg6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6
OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChKU0M6OkpJVENvZGVNYXA6OkVudHJ5Ojpjb2RlTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlND
OjpKSVRDb2RlTWFwOjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkpOgor
ICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1Vu
d2luZCk6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5ha2VkVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbik6CisgICAgICAgIChK
U0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoKKyAgICAgICAg
KEpTQzo6aXNQcm9maWxlRW1wdHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChKU0M6
OkpJVFN0dWJSb3V0aW5lOjpKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjphc0Nv
ZGVQdHIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OmN0aU5hdGl2ZUNhbGwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2
ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVk
VGFncyk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1
bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgICogaml0L1BDVG9Db2RlT3JpZ2luTWFwLmg6Cisg
ICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
KToKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlYWRQdXRJQ0NhbGxUYXJnZXQpOgor
ICAgICAgICAoSlNDOjpmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjph
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZUdldEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6
CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUluKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6bGlu
a1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Rp
cmVjdEZvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxp
bmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6Omxp
bmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAg
ICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAg
ICogaml0L1Nsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpKSVRTbG93UGF0aENhbGw6OmNh
bGwpOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6
OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybik6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5j
cHA6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnNsb3dQYXRoRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUNhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmludGVybmFsRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjp1bnJlYWNoYWJsZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpj
bHozMlRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnRydW5jVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpyb3VuZFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZXhwVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsb2dUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW11bFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6cmFuZG9tVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpi
b3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRDb2RlUHRyKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENvZGVSZWYpOgor
ICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyKToKKyAgICAgICAgKiBsbGlu
dC9MTEludEVudHJ5cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RnVuY3Rpb25F
bnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEV2YWxFbnRyeXBvaW50KToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OnNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKiBsbGludC9MTElu
dEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Y2FsbFRvVGhyb3cpOgorICAg
ICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxM
SU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6Cisg
ICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjp2bUVudHJ5VG9X
YXNtKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFy
aXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50OjpldmFsRW50cnlU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojpwcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojptb2R1bGVQcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUpOgorICAgICAgICAq
IHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9m
aWxlck9TUkV4aXRTaXRlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRl
Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0U2l0ZTo6T1NSRXhpdFNpdGUpOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdFNpdGU6OmNvZGVBZGRyZXNzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjogY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRh
YmxlQmFzZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNlLmg6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjplbnRyeXBvaW50Rm9yKToKKyAgICAgICAg
KiBydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYXRpdmVGdW5jdGlv
bi5oOgorICAgICAgICAoSlNDOjpUYWdnZWROYXRpdmVGdW5jdGlvbjo6VGFnZ2VkTmF0aXZlRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpUYWdnZWROYXRpdmVGdW5jdGlvbjo6b3BlcmF0b3IgTmF0
aXZlRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgIChKU0M6
OnRhZ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjp1bnRhZ0NvZGVQdHIpOgorICAgICAgICAoSlND
OjpyZXRhZ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjp0YWdDRnVuY3Rpb25QdHIpOgorICAgICAg
ICAoSlNDOjp1bnRhZ0NGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6Om5leHRQdHJUYWdJRCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAg
KEpTQzo6UHV0UHJvcGVydHlTbG90OjpQdXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQ
dXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbVZhbHVlKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVy
dHlTbG90OjpzZXRDdXN0b21BY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xv
dDo6Y3VzdG9tU2V0dGVyIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVN0
dWIpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5oOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9X
YXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNt
Q2FsbGVlLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCBjb25zdCk6
CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblByb2xvZ3VlIGNvbnN0KToKKyAg
ICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJs
b2NrOjplbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAg
ICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAq
IHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRocm93U3RhY2tPdmVyZmxvd0Zyb21X
YXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HVGllclVw
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnN0dWIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OmV4aXN0aW5nU3R1Yik6CisgICAgICAgICogd2FzbS9X
YXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmhhbmRsZUJhZEk2NFVzZSk6CisgICAgICAgIChKU0M6Oldhc206
Ondhc21Ub0pTKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmg6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6bG9hZEZyb21GcmFtZUFuZEp1bXAp
OgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6
bGlua0RhdGFMYWJlbHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21w
aWxlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
ckNvZGVCbG9jazo6c2V0OEJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQxNkJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpz
ZXQ4Qml0Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6
OnNldDE2Qml0Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxv
Y2s6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpjbGVhcik6
CisKIDIwMTgtMDQtMTcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzA2OTcsIHIyMzA3MjAsIGFuZCBy
MjMwNzI0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGU7
CiAgICAgdHlwZWRlZiBBc3NlbWJsZXJUeXBlIEFzc2VtYmxlclR5cGVfVDsKIAotICAgIHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgQ29kZVJlZjsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2Rl
UHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OwogCiAgICAgY2xh
c3MgSnVtcDsKIApAQCAtMzk0LDcgKzM5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNs
YXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT47CiAgICAgICAgIGZyaWVu
ZCBzdHJ1Y3QgREZHOjpPU1JFeGl0OwogICAgICAgICBmcmllbmQgY2xhc3MgSnVtcDsKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKKyAgICAgICAgdGVtcGxhdGU8
UHRyVGFnPiBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogICAgICAgICBmcmll
bmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhdGNocG9pbnQ7CiAK
QEAgLTg0Myw5ICs4NDMsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlw
ZTo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoZnJvbS5tX2xhYmVsLCB0by5tX2xhYmVsKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgYikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRhZywgUHRyVGFnIGJUYWc+CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCiAg
ICAgewotICAgICAgICByZXR1cm4gYi5leGVjdXRhYmxlQWRkcmVzczxwdHJkaWZmX3Q+KCkgLSBh
LmV4ZWN1dGFibGVBZGRyZXNzPHB0cmRpZmZfdD4oKTsKKyAgICAgICAgcmV0dXJuIGIudGVtcGxh
dGUgZGF0YUxvY2F0aW9uPHB0cmRpZmZfdD4oKSAtIGEudGVtcGxhdGUgZGF0YUxvY2F0aW9uPHB0
cmRpZmZfdD4oKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJu
IG1fYXNzZW1ibGVyLmRlYnVnT2Zmc2V0KCk7IH0KQEAgLTg1Nyw3ICs4NTgsOCBAQCBwdWJsaWM6
CiAKICAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOwogICAgIAotICAgIHN0YXRpYyB2b2lk
IGxpbmtKdW1wKHZvaWQqIGNvZGUsIEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9p
ZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHRhcmdldCkKICAgICB7
CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtKdW1wKGNvZGUsIGp1bXAubV9sYWJlbCwgdGFy
Z2V0LmRhdGFMb2NhdGlvbigpKTsKICAgICB9CkBAIC04NjcsMTIgKzg2OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgQXNzZW1i
bGVyTGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB2YWx1ZSkKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFz
c2VtYmxlckxhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1
ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCogZ2V0TGlu
a2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9
IE5vUHRyVGFnKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQqIGdl
dExpbmtlckFkZHJlc3Modm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGFnQ29kZVB0cihBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRy
ZXNzKGNvZGUsIGxhYmVsKSwgdGFnKTsKICAgICB9CkBAIC04ODIsNTYgKzg4Niw2NCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KGNh
bGwubV9sYWJlbCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaEp1bXAoQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcganVtcFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVw
YXRjaEp1bXAoQ29kZUxvY2F0aW9uSnVtcDxqdW1wVGFnPiBqdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJl
bGlua0p1bXAoanVtcC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoSnVtcFRvTm9wKENvZGVMb2Nh
dGlvbkp1bXAganVtcCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcganVtcFRhZz4KKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoSnVtcFRvTm9wKENvZGVMb2NhdGlvbkp1bXA8anVtcFRhZz4ganVtcCkKICAg
ICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0p1bXBUb05vcChqdW1wLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoTmVhckNhbGwoQ29kZUxv
Y2F0aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQor
ICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoTmVhckNhbGwoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2FsbFRhZz4gbmVhckNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5l
YXJDb2RlUHRyVGFnKTsKICAgICAgICAgc3dpdGNoIChuZWFyQ2FsbC5jYWxsTW9kZSgpKSB7CiAg
ICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWlsOgogICAgICAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVsaW5rSnVtcChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxv
Y2F0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIE5lYXJDYWxsTW9k
ZTo6UmVndWxhcjoKLSAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0NhbGwobmVhckNh
bGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24o
KSwgZGVzdGluYXRpb24udW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRh
dGFMYWJlbENvbXBhY3QgZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2Nh
dGlvbkRhdGFMYWJlbENvbXBhY3Q8dGFnPiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVl
KQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVs
Q29tcGFjdC5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOworICAgICAgICBBc3NlbWJsZXJUeXBlOjpy
ZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0LnRlbXBsYXRlIGRhdGFMb2NhdGlvbigpLCB2
YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMihDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBkYXRhTGFiZWwzMiwgaW50MzJfdCB2YWx1ZSkKKworICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKENvZGVMb2NhdGlv
bkRhdGFMYWJlbDMyPHRhZz4gZGF0YUxhYmVsMzIsIGludDMyX3QgdmFsdWUpCiAgICAgewogICAg
ICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIuZGF0YUxvY2F0aW9u
KCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcihDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1ZSkKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cjx0YWc+IGRhdGFMYWJlbFB0ciwgdm9pZCogdmFsdWUpCiAgICAgewog
ICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxv
Y2F0aW9uKCksIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQqIHJlYWRQb2lu
dGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIpCisKKyAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkKiByZWFkUG9pbnRlcihDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8dGFnPiBkYXRhTGFiZWxQdHIpCiAgICAgewogICAgICAgICByZXR1cm4gQXNz
ZW1ibGVyVHlwZTo6cmVhZFBvaW50ZXIoZGF0YUxhYmVsUHRyLmRhdGFMb2NhdGlvbigpKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVMb2NhdGlvbkNv
bnZlcnRpYmxlTG9hZCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRp
YyB2b2lkIHJlcGxhY2VXaXRoTG9hZChDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8dGFnPiBs
YWJlbCkKICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoTG9hZChsYWJl
bC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9uKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhB
ZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkPHRhZz4gbGFiZWwp
CiAgICAgewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRh
dGlvbihsYWJlbC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCShyZXZpc2lvbiAyMzA3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxNSArMzMsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gTmVhckNh
bGxNb2RlIHsgUmVndWxhciwgVGFpbCB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlv
bjsKLWNsYXNzIENvZGVMb2NhdGlvbkxhYmVsOwotY2xhc3MgQ29kZUxvY2F0aW9uSnVtcDsKLWNs
YXNzIENvZGVMb2NhdGlvbkNhbGw7Ci1jbGFzcyBDb2RlTG9jYXRpb25OZWFyQ2FsbDsKLWNsYXNz
IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q7Ci1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMjsKLWNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjsKLWNsYXNzIENvZGVMb2NhdGlv
bkNvbnZlcnRpYmxlTG9hZDsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uSW5z
dHJ1Y3Rpb247Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkxhYmVsOwordGVt
cGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRpb25KdW1wOwordGVtcGxhdGU8UHRyVGFnPiBj
bGFzcyBDb2RlTG9jYXRpb25DYWxsOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25OZWFyQ2FsbDsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
Q29tcGFjdDsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzI7
Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjsKK3RlbXBs
YXRlPFB0clRhZz4gY2xhc3MgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwogCiAvLyBUaGUg
Q29kZUxvY2F0aW9uKiB0eXBlcyBhcmUgYWxsIHByZXR0eSBtdWNoIGRvLW5vdGhpbmcgd3JhcHBl
cnMgYXJvdW5kCiAvLyBDb2RlUHRyIChvciBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIHRvIGdpdmUg
aXQgaXRzIGZ1bGwgbmFtZSkuICBUaGVzZQpAQCAtNTQsMTY5ICs1NCwyMTIgQEAgY2xhc3MgQ29k
ZUxvY2F0aW9uQ29udmVydGlibGVMb2FkOwogLy8gb2Zmc2V0cyBhcGFydC4gIFRvIHJlZHVjZSBt
ZW1vcnkgb3ZlcmhlYWQgd2Ugd2lsbCBvbmx5IHJldGFpbiBhIHBvaW50ZXIgdG8KIC8vIG9uZSBv
ZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2lsbCB1c2UgdGhlICpBdE9mZnNldCBtZXRob2Rz
IHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25Db21tb24gdG8gZmluZCB0aGUgb3RoZXIgcG9p
bnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KLWNsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1
YmxpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgewotcHVibGljOgotICAgIENvZGVMb2NhdGlvbklu
c3RydWN0aW9uIGluc3RydWN0aW9uQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxBdE9m
ZnNldChpbnQgb2Zmc2V0KTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2FsbEF0T2Zm
c2V0KGludCBvZmZzZXQsIE5lYXJDYWxsTW9kZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyIGRhdGFMYWJlbFB0ckF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyIGRhdGFMYWJlbDMyQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoaW50IG9mZnNldCk7
Ci0gICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0
KGludCBvZmZzZXQpOwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkNv
bW1vbiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB7CisgICAgdXNpbmcgQmFz
ZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OworcHVibGljOgorICAgIHRlbXBsYXRlPFB0
clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVMb2NhdGlvbkluc3RydWN0aW9uPHJlc3VsdFRhZz4g
aW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVz
dWx0VGFnID0gdGFnPiBDb2RlTG9jYXRpb25MYWJlbDxyZXN1bHRUYWc+IGxhYmVsQXRPZmZzZXQo
aW50IG9mZnNldCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZyA9IHRhZz4gQ29kZUxv
Y2F0aW9uSnVtcDxyZXN1bHRUYWc+IGp1bXBBdE9mZnNldChpbnQgb2Zmc2V0KTsKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgcmVzdWx0VGFnID0gdGFnPiBDb2RlTG9jYXRpb25DYWxsPHJlc3VsdFRhZz4g
Y2FsbEF0T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbk5lYXJDYWxsPHJlc3VsdFRhZz4gbmVhckNhbGxBdE9mZnNldChp
bnQgb2Zmc2V0LCBOZWFyQ2FsbE1vZGUpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxyZXN1bHRUYWc+IGRhdGFMYWJlbFB0ckF0
T2Zmc2V0KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+
IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHJlc3VsdFRhZz4gZGF0YUxhYmVsMzJBdE9mZnNldChp
bnQgb2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnID0gdGFnPiBDb2RlTG9j
YXRpb25EYXRhTGFiZWxDb21wYWN0PHJlc3VsdFRhZz4gZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KGludCBvZmZzZXQpOworICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcgPSB0YWc+IENvZGVM
b2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+IGNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0
KGludCBvZmZzZXQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQg
ZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6dGVtcGxhdGUgZGF0YUxvY2F0aW9u
PFQ+KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIENvZGVMb2NhdGlvbkNvbW1vbigpCiAgICAgewog
ICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9j
YXRpb24pCi0gICAgICAgIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKQorICAgIENv
ZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAg
ICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikKICAgICB7CiAgICAg
fQogfTsKIAotY2xhc3MgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gOiBwdWJsaWMgQ29kZUxvY2F0
aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25JbnN0
cnVjdGlvbiA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAg
Q29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24oKSB7fQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbklu
c3RydWN0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24o
KSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFn
Pihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24odm9p
ZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENv
ZGVMb2NhdGlvbkxhYmVsIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7Cit0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJsaWMgQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4gewogcHVibGljOgotICAgIENvZGVMb2NhdGlvbkxhYmVsKCkge30KLSAgICBl
eHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9jYXRpb24p
Ci0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQorICAgIENvZGVMb2Nh
dGlvbkxhYmVsKCkgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
PHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkxhYmVsKHZvaWQq
IGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgbmV3VGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPG5ld1RhZz4gcmV0YWdnZWQoKSB7
IHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxuZXdUYWc+KENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
Ojp0ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCkpOyB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCByZXRhZ2dlZChQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSB7IHJldHVybiBDb2RlTG9j
YXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFn
KSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCB1bnRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46
OnRlbXBsYXRlIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8VD4oKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxUPigpOyB9
CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25KdW1wIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1v
biB7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorY2xhc3MgQ29kZUxvY2F0aW9uSnVtcCA6IHB1Ymxp
YyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6Ci0gICAgQ29kZUxvY2F0aW9uSnVt
cCgpIHt9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uSnVtcChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQor
ICAgIENvZGVMb2NhdGlvbkp1bXAoKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1w
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25K
dW1wKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fz
c2VtYmxlckNvZGVQdHIobG9jYXRpb24pKSB7fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiAKLSAgICBD
b2RlTG9jYXRpb25KdW1wIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIHsg
cmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpyZXRhZ2dlZChv
bGRUYWcsIG5ld1RhZykpOyB9CisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2Rl
TG9jYXRpb25KdW1wPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25KdW1w
PG5ld1RhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5l
d1RhZz4oKSk7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkNhbGwgOiBwdWJsaWMgQ29kZUxv
Y2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitjbGFzcyBDb2RlTG9jYXRpb25D
YWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBDb2Rl
TG9jYXRpb25DYWxsKCkge30KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9j
YXRpb24pIHt9CisgICAgQ29kZUxvY2F0aW9uQ2FsbCgpIHsgfQorICAgIGV4cGxpY2l0IENvZGVM
b2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENv
ZGVMb2NhdGlvbkNhbGwodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7
IH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxu
ZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbDxuZXdUYWc+KENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCkpOyB9CiB9Owog
Ci1jbGFzcyBDb2RlTG9jYXRpb25OZWFyQ2FsbCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24g
ewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbk5lYXJDYWxsIDogcHVi
bGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbCgpIHt9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxvY2F0aW9uLCBOZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCi0gICAgICAgIDog
Q29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9Cisg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0KKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25O
ZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2Rl
IGNhbGxNb2RlKQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNh
bGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSksIG1fY2FsbE1v
ZGUoY2FsbE1vZGUpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSksIG1fY2FsbE1vZGUoY2FsbE1vZGUpIHsg
fQogICAgIE5lYXJDYWxsTW9kZSBjYWxsTW9kZSgpIHsgcmV0dXJuIG1fY2FsbE1vZGU7IH0KIHBy
aXZhdGU6CiAgICAgTmVhckNhbGxNb2RlIG1fY2FsbE1vZGUgPSBOZWFyQ2FsbE1vZGU6OlJlZ3Vs
YXI7CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiA6IHB1YmxpYyBDb2RlTG9j
YXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMigpIHt9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvY2F0aW9uKQotICAgICAgICA6IENv
ZGVMb2NhdGlvbkNvbW1vbihsb2NhdGlvbikge30KKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwz
MigpIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0
YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMih2
b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFn
PihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAotY2xhc3Mg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24g
ewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBh
Y3QgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbENvbXBhY3QoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25E
YXRhTGFiZWxDb21wYWN0KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2NhdGlvbikKLSAgICAgICAg
OiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHsgfQorICAgIGV4cGxpY2l0IENvZGVMb2Nh
dGlvbkRhdGFMYWJlbENvbXBhY3QoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbG9jYXRpb24p
CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4
cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Qodm9pZCogbG9jYXRpb24pCi0gICAg
ICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikp
IHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9OwogCi1jbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3RlbXBsYXRlPFB0clRhZyB0YWc+
CitjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4gewogcHVibGljOgotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cigpIHt9Ci0g
ICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkgeyB9CisgICAgZXhwbGljaXQgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29k
ZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisgICAg
ICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4o
bG9jYXRpb24pKSB7IH0KIH07CiAKLWNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6
IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2NsYXNz
IENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248
dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKCkgeyB9Ci0g
ICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHsg
fQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFn
Pihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2Fk
KHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIobG9jYXRpb24pKSB7IH0KKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248
dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAotaW5s
aW5lIENvZGVMb2NhdGlvbkluc3RydWN0aW9uIENvZGVMb2NhdGlvbkNvbW1vbjo6aW5zdHJ1Y3Rp
b25BdE9mZnNldChpbnQgb2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0
clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFn
PiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6aW5zdHJ1Y3Rpb25BdE9mZnNldChpbnQgb2Zmc2V0
KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBD
b2RlTG9jYXRpb25JbnN0cnVjdGlvbihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOwor
ICAgIHJldHVybiBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbjxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8
cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5l
IENvZGVMb2NhdGlvbkxhYmVsIENvZGVMb2NhdGlvbkNvbW1vbjo6bGFiZWxBdE9mZnNldChpbnQg
b2Zmc2V0KQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+
CitpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248
dGFnPjo6bGFiZWxBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RF
X09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChkYXRhTG9jYXRp
b248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxyZXN1
bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZz
ZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkp1bXAgQ29kZUxvY2F0aW9uQ29tbW9uOjpq
dW1wQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQ
dHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkp1bXA8cmVzdWx0VGFnPiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPjo6anVtcEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgQVNT
RVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1
bXAoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0
aW9uSnVtcDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hh
cio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkNhbGwgQ29kZUxvY2F0
aW9uQ29tbW9uOjpjYWxsQXRPZmZzZXQoaW50IG9mZnNldCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+
Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5saW5lIENvZGVMb2NhdGlvbkNhbGw8cmVz
dWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6Y2FsbEF0T2Zmc2V0KGludCBvZmZzZXQp
CiB7CiAgICAgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkNhbGwoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICByZXR1
cm4gQ29kZUxvY2F0aW9uQ2FsbDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRh
TG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbk5l
YXJDYWxsIENvZGVMb2NhdGlvbkNvbW1vbjo6bmVhckNhbGxBdE9mZnNldChpbnQgb2Zmc2V0LCBO
ZWFyQ2FsbE1vZGUgY2FsbE1vZGUpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRy
VGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25OZWFyQ2FsbDxyZXN1bHRUYWc+IENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+OjpuZWFyQ2FsbEF0T2Zmc2V0KGludCBvZmZzZXQsIE5lYXJD
YWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0
KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoZGF0YUxvY2F0aW9uPGNoYXIqPigp
ICsgb2Zmc2V0LCBjYWxsTW9kZSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPHJl
c3VsdFRhZz4odGFnQ29kZVB0cjxyZXN1bHRUYWc+KGRhdGFMb2NhdGlvbjxjaGFyKj4oKSArIG9m
ZnNldCksIGNhbGxNb2RlKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBD
b2RlTG9jYXRpb25Db21tb246OmRhdGFMYWJlbFB0ckF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgordGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHI8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09E
RV9PRkZTRVQob2Zmc2V0KTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKGRh
dGFMb2NhdGlvbjxjaGFyKj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248
Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMy
IENvZGVMb2NhdGlvbkNvbW1vbjo6ZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KQordGVt
cGxhdGU8UHRyVGFnIHRhZz4KK3RlbXBsYXRlPFB0clRhZyByZXN1bHRUYWc+CitpbmxpbmUgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzI8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6
ZGF0YUxhYmVsMzJBdE9mZnNldChpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVF9WQUxJRF9DT0RF
X09GRlNFVChvZmZzZXQpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMihkYXRh
TG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRh
TGFiZWwzMjxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hh
cio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBh
Y3QgQ29kZUxvY2F0aW9uQ29tbW9uOjpkYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoaW50IG9mZnNl
dCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+Cit0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnPgoraW5s
aW5lIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25D
b21tb248dGFnPjo6ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAg
QVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbENvbXBhY3QoZGF0YUxvY2F0aW9uPGNoYXIqPigpICsgb2Zmc2V0KTsKKyAgICBy
ZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDxyZXN1bHRUYWc+KHRhZ0NvZGVQdHI8
cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBvZmZzZXQpKTsKIH0KIAotaW5saW5l
IENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBDb2RlTG9jYXRpb25Db21tb246OmNvbnZlcnRp
YmxlTG9hZEF0T2Zmc2V0KGludCBvZmZzZXQpCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgordGVtcGxh
dGU8UHRyVGFnIHJlc3VsdFRhZz4KK2lubGluZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8
cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6Y29udmVydGlibGVMb2FkQXRPZmZz
ZXQoaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQob2Zmc2V0KTsK
LSAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKGRhdGFMb2NhdGlvbjxjaGFy
Kj4oKSArIG9mZnNldCk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxy
ZXN1bHRUYWc+KHRhZ0NvZGVQdHI8cmVzdWx0VGFnPihkYXRhTG9jYXRpb248Y2hhcio+KCkgKyBv
ZmZzZXQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDIwICs0NCwyMCBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihD
b2RlQmxvY2sqCiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpOwogfQogCi1M
aW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseShQdHJUYWcgdGFnKQorTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHlJbXBsKCkKIHsKICAgICBw
ZXJmb3JtRmluYWxpemF0aW9uKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZGlkQWxsb2NhdGUpOwog
ICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCi0gICAgICAgIHJldHVybiBDb2RlUmVmKCptX2V4
ZWN1dGFibGVNZW1vcnksIHRhZyk7CisgICAgICAgIHJldHVybiBDb2RlUmVmPExpbmtCdWZmZXJQ
dHJUYWc+KCptX2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIAotICAgIHJldHVybiBDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHRhZ0NvZGVQdHIo
bV9jb2RlLCB0YWcpKSk7CisgICAgcmV0dXJuIENvZGVSZWY8TGlua0J1ZmZlclB0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0
clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPihtX2NvZGUpKSk7CiB9CiAKLUxpbmtC
dWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KFB0
clRhZyB0YWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorTGlua0J1ZmZlcjo6Q29kZVJlZjxM
aW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJ
bXBsKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQogewotICAgIENvZGVSZWYgcmVzdWx0ID0gZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRhZyk7CisgICAgQ29kZVJlZjxMaW5rQnVmZmVy
UHRyVGFnPiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHlJbXBsKCk7CiAK
ICAgICBpZiAobV9hbHJlYWR5RGlzYXNzZW1ibGVkKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNzAsMTggKzcwLDE5IEBAIExpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxp
emUKICAgICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1
aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlbW92ZUNvZGVQdHJUYWc8dWludDhfdCo+KHJl
c3VsdC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdWludDhfdCogZXhlY3V0YWJs
ZUFkZHJlc3MgPSByZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDhf
dCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENvZGUgYXQgWyVwLCAlcCk6XG4iLCBleGVjdXRh
YmxlQWRkcmVzcywgZXhlY3V0YWJsZUFkZHJlc3MgKyByZXN1bHQuc2l6ZSgpKTsKICAgICAKICAg
ICBDU3RyaW5nIGhlYWRlciA9IG91dC50b0NTdHJpbmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9u
czo6YXN5bmNEaXNhc3NlbWJseSgpKSB7Ci0gICAgICAgIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3Vz
bHkoaGVhZGVyLCByZXN1bHQsIG1fc2l6ZSwgIiAgICAiKTsKKyAgICAgICAgQ29kZVJlZjxEaXNh
c3NlbWJseVB0clRhZz4gY29kZVJlZkZvckRpc2Fzc2VtYmx5ID0gcmVzdWx0LnJldGFnZ2VkPERp
c2Fzc2VtYmx5UHRyVGFnPigpOworICAgICAgICBkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KGhl
YWRlciwgV1RGTW92ZShjb2RlUmVmRm9yRGlzYXNzZW1ibHkpLCBtX3NpemUsICIgICAgIik7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGRhdGFMb2coaGVhZGVyKTsK
LSAgICBkaXNhc3NlbWJsZShyZXN1bHQuY29kZSgpLCBtX3NpemUsICIgICAgIiwgV1RGOjpkYXRh
RmlsZSgpKTsKKyAgICBkaXNhc3NlbWJsZShyZXN1bHQucmV0YWdnZWRDb2RlPERpc2Fzc2VtYmx5
UHRyVGFnPigpLCBtX3NpemUsICIgICAgIiwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBA
IGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIExpbmtCdWZmZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExpbmtCdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAKLSAgICB0
eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwotICAgIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcg
Q29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OworICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+IHVzaW5nIENvZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0
eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBMYWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIEp1bXA7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBQYXRjaGFibGVKdW1wOwpAQCAtMTIxLDMyICsxMjEsMzYgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gbGluayBvciBzZXQgdmFsdWVzIGF0IGNv
ZGUgZ2VuZXJhdGlvbiB0aW1lLgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1v
dmVfcG9pbnRlcjxGdW5jPjo6dHlwZT46OnZhbHVlPj4KLSAgICB2b2lkIGxpbmsoQ2FsbCBjYWxs
LCBGdW5jIGZ1bmNOYW1lLCBQdHJUYWcgdGFnKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWcsIHR5
cGVuYW1lIEZ1bmMsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Z1bmN0aW9u
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8RnVuYz46OnR5cGU+Ojp2YWx1ZT4+CisgICAg
dm9pZCBsaW5rKENhbGwgY2FsbCwgRnVuYyBmdW5jTmFtZSkKICAgICB7Ci0gICAgICAgIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uKGZ1bmNOYW1lLCB0YWcpOworICAgICAgICBGdW5jdGlvblB0cjx0YWc+
IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAgbGluayhjYWxsLCBmdW5jdGlvbik7CiAgICAg
fQogCi0gICAgdm9pZCBsaW5rKENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0
cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENh
bGw6OkxpbmthYmxlKSk7CiAgICAgICAgIGNhbGwubV9sYWJlbCA9IGFwcGx5T2Zmc2V0KGNhbGwu
bV9sYWJlbCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlKCksIGNhbGws
IGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBsaW5rKENhbGwgY2FsbCwgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICB2b2lkIGxp
bmsoQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGxhYmVsKQogICAgIHsKLSAgICAg
ICAgbGluayhjYWxsLCBGdW5jdGlvblB0cihsYWJlbCkpOworICAgICAgICBsaW5rKGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4obGFiZWwpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBsaW5rKEp1bXAg
anVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGxhYmVsKQog
ICAgIHsKICAgICAgICAganVtcC5tX2xhYmVsID0gYXBwbHlPZmZzZXQoanVtcC5tX2xhYmVsKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUoKSwganVtcCwgbGFiZWwpOwog
ICAgIH0KIAotICAgIHZvaWQgbGluayhjb25zdCBKdW1wTGlzdCYgbGlzdCwgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICB2b2lkIGxpbmsoY29u
c3QgSnVtcExpc3QmIGxpc3QsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewog
ICAgICAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBsaXN0Lmp1bXBzKCkpCiAgICAgICAgICAg
ICBsaW5rKGp1bXAsIGxhYmVsKTsKQEAgLTE1OCw3ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlKCksIHRhcmdldCwgdmFsdWUpOwogICAg
IH0KIAotICAgIHZvaWQgcGF0Y2goRGF0YUxhYmVsUHRyIGxhYmVsLCBDb2RlTG9jYXRpb25MYWJl
bCB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHZvaWQgcGF0Y2goRGF0YUxh
YmVsUHRyIGxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHZhbHVlKQogICAgIHsKICAgICAg
ICAgQXNzZW1ibGVyTGFiZWwgdGFyZ2V0ID0gYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCk7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlKCksIHRhcmdldCwgdmFsdWUp
OwpAQCAtMTY2LDU0ICsxNzEsNjMgQEAgcHVibGljOgogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgdXNlZCB0byBvYnRhaW4gaGFuZGxlcyB0byBhbGxvdyB0aGUgY29kZSB0byBiZSByZWxpbmtl
ZCAvIHJlcGF0Y2hlZCBsYXRlci4KICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeXBv
aW50KCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkxhYmVsPHRh
Zz4gZW50cnlwb2ludCgpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwo
Y29kZSgpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4odGFnQ29kZVB0
cjx0YWc+KGNvZGUoKSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkNhbGwgbG9jYXRpb25P
ZihDYWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBDb2RlTG9jYXRpb25D
YWxsPHRhZz4gbG9jYXRpb25PZihDYWxsIGNhbGwpCiAgICAgewogICAgICAgICBBU1NFUlQoY2Fs
bC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKICAgICAgICAgQVNTRVJUKCFjYWxsLmlzRmxh
Z1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsKE1hY3Jv
QXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xh
YmVsKSkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbDx0YWc+KE1hY3JvQXNzZW1i
bGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFi
ZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbG9jYXRpb25PZk5lYXJD
YWxsKENhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsPHRhZz4gbG9jYXRpb25PZk5lYXJDYWxsKENhbGwgY2FsbCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NF
UlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBs
eU9mZnNldChjYWxsLm1fbGFiZWwpKSwKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJD
YWxsPHRhZz4oTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFw
cGx5T2Zmc2V0KGNhbGwubV9sYWJlbCkpLAogICAgICAgICAgICAgY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6VGFpbCkgPyBOZWFyQ2FsbE1vZGU6OlRhaWwgOiBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOwog
ICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxvY2F0aW9uT2YoUGF0Y2hhYmxlSnVtcCBq
dW1wLCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGxvY2F0aW9uT2YoUGF0Y2hhYmxlSnVtcCBqdW1wKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyOjpn
ZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCks
IHRhZykpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPihNYWNyb0Fzc2Vt
Ymxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQoanVtcC5tX2p1
bXAubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsb2NhdGlvbk9m
KExhYmVsIGxhYmVsLCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCisgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwp
CiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXI6
OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSwgdGFn
KSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+KE1hY3JvQXNzZW1ibGVy
OjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVs
KSkpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsb2NhdGlvbk9mKERh
dGFMYWJlbFB0ciBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxvY2F0aW9uT2YoRGF0YUxhYmVsUHRyIGxhYmVsKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihNYWNyb0Fzc2VtYmxl
cjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpKSk7
CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPihNYWNyb0Fzc2Vt
Ymxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+KGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9s
YWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBsb2NhdGlvbk9m
KERhdGFMYWJlbDMyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsMzI8dGFnPiBsb2NhdGlvbk9mKERhdGFMYWJlbDMyIGxhYmVsKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNzZW1ibGVy
OjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsK
KyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4oTWFjcm9Bc3NlbWJs
ZXI6OmdldExpbmtlckFkZHJlc3M8dGFnPihjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFi
ZWwpKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgbG9j
YXRpb25PZihEYXRhTGFiZWxDb21wYWN0IGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdDx0YWc+IGxvY2F0aW9uT2YoRGF0YUxh
YmVsQ29tcGFjdCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRh
TGFiZWxDb21wYWN0KE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBw
bHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbENvbXBhY3Q8dGFnPihNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzczx0YWc+
KGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICBDb2Rl
TG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgbG9jYXRpb25PZihDb252ZXJ0aWJsZUxvYWRMYWJlbCBs
YWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIENvZGVMb2NhdGlvbkNvbnZlcnRp
YmxlTG9hZDx0YWc+IGxvY2F0aW9uT2YoQ29udmVydGlibGVMb2FkTGFiZWwgbGFiZWwpCiAgICAg
ewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1i
bGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkp
KTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDx0YWc+KE1hY3Jv
QXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzPHRhZz4oY29kZSgpLCBhcHBseU9mZnNldChsYWJl
bC5tX2xhYmVsKSkpOwogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIG9idGFpbnMgdGhlIHJl
dHVybiBhZGRyZXNzIG9mIHRoZSBjYWxsLCBnaXZlbiBhcyBhbiBvZmZzZXQgZnJvbQpAQCAtMjM4
LDEzICsyNTIsMzEgQEAgcHVibGljOgogICAgIC8vIGNvbXBsZXRlIGdlbmVyYXRpb24gb2YgdGhl
IGNvZGUuIEFsdGVybmF0aXZlbHksIGNhbGwKICAgICAvLyBmaW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHkoKSBkaXJlY3RseSBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YKICAgICAvLyBk
aXNwbGF5aW5nIGRpc2Fzc2VtYmx5LgotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVS
ZWYgZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KFB0clRhZyk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29kZVJlZiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoUHRyVGFnLCBjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMywgNCk7CiAKLSAgICBD
b2RlUHRyIHRyYW1wb2xpbmVBdChMYWJlbCBsYWJlbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgorICAgIENvZGVSZWY8dGFnPiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKS50
ZW1wbGF0ZSByZXRhZ2dlZDx0YWc+KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRh
ZywgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBDb2RlUmVmPHRhZz4gZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZvcm1hdCwgQXJncy4uLiBhcmdzKQorICAgIHsKKyNpZiBD
T01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1zZWN1cml0eSIKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5SW1wbChmb3JtYXQsIGFyZ3MuLi4p
LnRlbXBsYXRlIHJldGFnZ2VkPHRhZz4oKTsKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CisgICAgQ29kZVB0cjx0YWc+IHRyYW1wb2xpbmVBdChMYWJlbCBsYWJlbCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBDb2RlUHRyKE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6
OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkp
OworICAgICAgICByZXR1cm4gQ29kZVB0cjx0YWc+KE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJU
eXBlX1Q6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xh
YmVsKSkpOwogICAgIH0KIAogICAgIHZvaWQqIGRlYnVnQWRkcmVzcygpCkBAIC0yNTgsNiArMjkw
LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQWxyZWFkeURpc2Fzc2VtYmxlKCkgeyBtX2FscmVh
ZHlEaXNhc3NlbWJsZWQgPSB0cnVlOyB9CiAKIHByaXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1i
bHlJbXBsKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFn
PiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKTsKKwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFD
VElPTikKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNldEZvcihpbnQgbG9jYXRpb24pCiAgICAgewpA
QCAtMzE2LDggKzM1MSw4IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgRklOQUxJWkVfQ09ERV9JRihj
b25kaXRpb24sIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAg
IChVTkxJS0VMWSgoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICA/IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNv
ZGVXaXRoRGlzYXNzZW1ibHkocmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykgXAotICAgICAgICA6
IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkocmVz
dWx0UHRyVGFnKSkKKyAgICAgICAgPyAobGlua0J1ZmZlclJlZmVyZW5jZSkuZmluYWxpemVDb2Rl
V2l0aERpc2Fzc2VtYmx5PHJlc3VsdFB0clRhZz4oX19WQV9BUkdTX18pIFwKKyAgICAgICAgOiAo
bGlua0J1ZmZlclJlZmVyZW5jZSkuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PHJlc3Vs
dFB0clRhZz4oKSkKIAogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc3MiwxNyArMzc3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0
aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAg
IHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KKyAgICBzdGF0
aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
PGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxv
Y2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2Fs
bC5kYXRhTG9jYXRpb24oKSkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0
aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0KQorICAgIHRlbXBsYXRl
PFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0
aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0KQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVy
OjpyZXBsYWNlV2l0aFZNSGFsdChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRoVk1IYWx0KGluc3RydWN0aW9uU3RhcnQu
ZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVt
cChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBk
ZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFy
dFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGlu
YXRpb24pCiAgICAgewogICAgICAgICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVj
dGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSk7CiAg
ICAgfQpAQCAtMzgwNiw0NSArMzgwOSw1MyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBj
YW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQ
YXRjaCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxh
YmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENv
ZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICByZXR1
cm4gbGFiZWwubGFiZWxBdE9mZnNldCgwKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIENvZGVM
b2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Mo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsK
ICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2Rl
TG9jYXRpb25MYWJlbCgpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigp
OwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKQor
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8
dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0
aW9uRGF0YUxhYmVsMzI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZv
aWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQor
CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3Ry
dWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAg
ICAgIHJlZW1pdEluaXRpYWxNb3ZlV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0
aW9uKCksIGluaXRpYWxWYWx1ZSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJldmVy
dEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlv
bkxhYmVsLCBBZGRyZXNzLCB2b2lkKikKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAg
c3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCopCiAgICAgewogICAg
ICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVM
b2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAg
IHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxs
VGFnPiBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7
CiAgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9m
ZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRhdGFMb2NhdGlvbigpLCBkZXN0
aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9u
KQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1bmN0
aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NB
TExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogICAgIH0KQEAgLTQ0MzgsMTcgKzQ0NDksMTUgQEAgcHJvdGVjdGVkOgogCiAgICAg
ZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lk
KiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxs
LCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlz
RmxhZ1NldChDYWxsOjpOZWFyKSkKICAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIo
Y29kZSwgY2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19Q
T0lOVEVSKSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKSB7Ci0gICAgICAgICAgICBhc3NlcnRJc05vdFRh
Z2dlZChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIEFzc2VtYmxl
cjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZ1
bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5r
Q2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQor
ICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Tm9QdHJUYWc+KCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9s
YWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0clRh
Zz4oKSk7CiAgICAgfQogCiAgICAgQ2FjaGVkVGVtcFJlZ2lzdGVyIG1fZGF0YU1lbW9yeVRlbXBS
ZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MTUwNSwxMiArMTUwNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmRtYklTSFNU
KCk7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkNhbGwgY2FsbCkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcg
bG9jYXRpb25UYWc+CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDx0YWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4g
RnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KEFSTUFzc2VtYmxlcjo6cmVh
ZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+
KEFSTUFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVt
cGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCBy
ZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9uU3Rh
cnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAg
ICAgQVJNQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KQEAgLTE1MjgsNDQg
KzE1MzAsNTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9v
bCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIpCisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwot
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFi
ZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25B
ZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+KQogICAgIHsKICAgICAgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJl
bCgpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8dGFnPigpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8dGFnPiBsYWJl
bCkKICAgICB7CiAgICAgICAgIHJldHVybiBsYWJlbC5sYWJlbEF0T2Zmc2V0KDApOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2
b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
dm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRp
b25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0
aWFsVmFsdWUpCiAgICAgewogICAgICAgICBBUk1Bc3NlbWJsZXI6OnJldmVydEJyYW5jaFB0cldp
dGhQYXRjaChpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCByZWcsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUpICYgMHhmZmZmKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQz
Ml90KQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIHZvaWQqKQorICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9Q
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVz
cywgdm9pZCopCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxs
VGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgQVJNQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBk
ZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2Fs
bFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAg
ICAgICBBUk1Bc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpAQCAtMTYxOSw3ICsxNjI5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcChBUk1SZWdpc3RlcnM6OlMxLCBt
X2Fzc2VtYmxlci5nZXRJbW0ocmlnaHQubV92YWx1ZSwgQVJNUmVnaXN0ZXJzOjpTMCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMg
dm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVu
Y3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCiAg
ICAgICAgICAgICBBUk1Bc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVu
Y3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzODIsNyArMTM4Miw4IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIuZG1iSVNIU1QoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJU
YWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9u
TGFiZWw8c3RhcnRUYWc+IGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RU
YWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRh
TG9jYXRpb24oKSk7CiAgICAgfQpAQCAtMTk5MywyMiArMTk5NCwyNCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogICAgIH0KIAotICAgIAotICAgIHN0YXRp
YyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAg
dGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRp
YyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8
bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KEFSTXY3QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJUYWcpOworICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJs
ZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKLSAgICBzdGF0
aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAg
ewogICAgICAgICBjb25zdCB1bnNpZ25lZCB0d29Xb3JkT3BTaXplID0gNDsKICAgICAgICAgcmV0
dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXR3b1dvcmRPcFNpemUgKiAyKTsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCByZCwgdm9p
ZCogaW5pdGlhbFZhbHVlKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZv
aWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIHJkLCB2b2lkKiBpbml0aWFs
VmFsdWUpCiAgICAgewogI2lmIE9TKExJTlVYKQogICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmV2
ZXJ0SnVtcFRvX21vdlQzbW92dGNtcFQyKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCks
IHJkLCBkYXRhVGVtcFJlZ2lzdGVyLCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5pdGlh
bFZhbHVlKSk7CkBAIC0yMDE3LDM1ICsyMDIwLDQxIEBAIHB1YmxpYzoKICAgICAgICAgQVJNdjdB
c3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZUMyhpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlv
bigpLCBkYXRhVGVtcFJlZ2lzdGVyLCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSAmIDB4ZmZmZikpOwogI2VuZGlm
CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cikK
KworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRk
cmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMikKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4pCiAgICAg
ewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSAgICAgICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDx0YWc+
KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRyZXNzLCB2
b2lkKikKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCopCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsLCBBZGRy
ZXNzLCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQg
cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9j
YXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAgIHsKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlTG9j
YXRpb25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIEFSTXY3QXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRh
Zz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2Fs
bChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICB9CkBAIC0yMTQ0LDcgKzIxNTMsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
RnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxh
Z1NldChDYWxsOjpUYWlsKSkKICAgICAgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcChj
b2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2MiArMjgsNDEgQEAKIAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJQdHJUYWcu
aCIKICNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihPcGNvZGVJ
RCBvcGNvZGVJRCkKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1l
KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIq
IG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgQVNTRVJUKG9wY29kZUlEID49IE5VTUJF
Ul9PRl9CWVRFQ09ERV9JRFMpOwotICAgIHJldHVybiBjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MoTExJbnQ6OmdldENvZGVQdHIob3Bjb2RlSUQpKTsKLX0KLQotdm9pZCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotewotICAgIGlmICghbV92YWx1ZSkgeworICAgIGlmICghZXhlY3V0YWJsZUFkZHJl
c3MpIHsKICAgICAgICAgb3V0LnByaW50KG5hbWUsICIobnVsbCkiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBkYXRhTG9jYXRpb24oKSkg
ewotICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCAiKSIpOworICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcyA9PSBkYXRhTG9jYXRpb24p
IHsKKyAgICAgICAgb3V0LnByaW50KG5hbWUsICIoIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRk
cmVzcyksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgb3V0LnByaW50KG5hbWUs
ICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSksICIsIGRh
dGFMb2NhdGlvbiA9ICIsIFJhd1BvaW50ZXIoZGF0YUxvY2F0aW9uKCkpLCAiKSIpOwotfQotCi12
b2lkIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7CisgICAgb3V0LnByaW50KG5hbWUs
ICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRh
TG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFMb2NhdGlvbiksICIpIik7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJl
ZihPcGNvZGVJRCBvcGNvZGVJRCkKK2Jvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6dHJ5
VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNv
ZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihvcGNvZGVJRCkpOworICAgIHJldHVybiBKU0M6OnRy
eVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQpOwogfQogCi1ib29sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6dHJ5VG9EaXNhc3NlbWJsZShQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Citib29sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6
OnRyeVRvRGlzYXNzZW1ibGUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFn
PiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4KQogewotICAgIHJldHVy
biBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9jb2RlUHRyLCBzaXplKCksIHByZWZpeCwgb3V0KTsK
KyAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIFdURjo6
ZGF0YUZpbGUoKSk7CiB9CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjp0cnlUb0Rpc2Fz
c2VtYmxlKGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ5VG9EaXNh
c3NlbWJsZShXVEY6OmRhdGFGaWxlKCksIHByZWZpeCk7Ci19Ci0KLUNTdHJpbmcgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpkaXNhc3NlbWJseSgpIGNvbnN0CitDU3RyaW5nIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJs
eVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUpCiB7CiAgICAgU3RyaW5nUHJpbnRTdHJlYW0g
b3V0OwotICAgIGlmICghdHJ5VG9EaXNhc3NlbWJsZShvdXQsICIiKSkKKyAgICBpZiAoIXRyeVRv
RGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgIiIsIG91dCkpCiAgICAgICAgIHJldHVybiBDU3Ry
aW5nKCk7CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAotdm9pZCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBtX2NvZGVQ
dHIuZHVtcFdpdGhOYW1lKCJDb2RlUmVmIiwgb3V0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTEgKzQwLDE0IEBACiAvLyBpbnRvIHRoZSBwcm9jZXNzb3IgYXJlIGRlY29yYXRl
ZCB3aXRoIHRoZSBib3R0b20gYml0IHNldCwgd2hpbGUgdHJhZGl0aW9uYWwgQVJNIGhhcwogLy8g
dGhlIGxvd2VyIGJpdCBjbGVhci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgcG9p
bnRlciwgd2UgY2hlY2sgZm9yIGJvdGgKIC8vIGRlY29yYXRlZCBhbmQgdW5kZWNvcmF0ZWQgbnVs
bC4KKyNkZWZpbmUgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAg
IEFTU0VSVCghcHRyIHx8IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHB0cikgJiB+MSkKICNk
ZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKICAgICBBU1NFUlQocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4ocHRyKSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09E
RV9PRkZTRVQob2Zmc2V0KSBcCiAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMSkpIC8vIE11c3QgYmUg
bXVsdGlwbGUgb2YgMi4KICNlbHNlCisjZGVmaW5lIEFTU0VSVF9OVUxMX09SX1ZBTElEX0NPREVf
UE9JTlRFUihwdHIpIC8vIEFueXRoaW5nIGdvZXMhCiAjZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIocHRyKSBcCiAgICAgQVNTRVJUKHB0cikKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NP
REVfT0ZGU0VUKG9mZnNldCkgLy8gQW55dGhpbmcgZ29lcyEKQEAgLTUyLDcgKzU1LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKK3RlbXBsYXRl
PFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwogCiBlbnVtIE9wY29kZUlEIDog
dW5zaWduZWQ7CiAKQEAgLTYwLDE3ICs2MywxOSBAQCBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7
CiAvLwogLy8gRnVuY3Rpb25QdHIgc2hvdWxkIGJlIHVzZWQgdG8gd3JhcCBwb2ludGVycyB0byBD
L0MrKyBmdW5jdGlvbnMgaW4gSlNDCiAvLyAocGFydGljdWxhcmx5LCB0aGUgc3R1YiBmdW5jdGlv
bnMpLgordGVtcGxhdGU8UHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZz4KIGNsYXNzIEZ1bmN0
aW9uUHRyIHsKIHB1YmxpYzoKICAgICBGdW5jdGlvblB0cigpIHsgfQorICAgIEZ1bmN0aW9uUHRy
KHN0ZDo6bnVsbHB0cl90KSB7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKCp2YWx1
ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKLSAgICAgICAg
OiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4odmFsdWUsIHRhZykpCisgICAgRnVuY3Rp
b25QdHIoUmV0dXJuVHlwZSgqdmFsdWUpKEFyZ3VtZW50cy4uLikpCisgICAgICAgIDogbV92YWx1
ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIHRhZz4odmFsdWUpKQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25l
ZChtX3ZhbHVlKTsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsK
KyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAg
IH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdpdGggZGlmZmVy
ZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKQEAgLTc4LDEyICs4MywxMiBAQCBwdWJsaWM6CiAj
aWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAg
RnVuY3Rpb25QdHIoUmV0dXJuVHlwZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRh
ZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcpCi0gICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoQ0RFQ0wg
KnZhbHVlKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqLCB0YWc+KHZhbHVlKSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRy
KHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIodmFsdWUpOwogICAg
ICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9O
VUxMX09SX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKICNlbmRpZiAvLyBD
QUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykKQEAgLTkxLDU0ICs5
Niw3NCBAQCBwdWJsaWM6CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRkFTVENBTExfQ0FMTElOR19D
T05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoRkFTVENBTEwgKnZhbHVl
KShBcmd1bWVudHMuLi4pLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnKQotICAgICAgICA6
IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKKyAgICBGdW5jdGlv
blB0cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSkKKyAgICAgICAg
OiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFnPih2YWx1ZSkpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CisgICAgICAgIGFzc2VydElzTnVsbE9y
Q0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05v
dFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1f
dmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7CiAgICAgfQogCiAjZW5kaWYgLy8gQ09NUElMRVJfU1VQUE9SVFMoRkFTVENBTExfQ0FMTElO
R19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUg
PSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQdHJUeXBlPjo6dHlw
ZT46OnZhbHVlPj4KLSAgICBleHBsaWNpdCBGdW5jdGlvblB0cihQdHJUeXBlIHZhbHVlLCBQdHJU
YWcgdGFnKQorICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKFB0clR5cGUgdmFsdWUpCiAgICAgICAg
IC8vIFVzaW5nIGEgQy1jdHlsZSBjYXN0IGhlcmUgdG8gYXZvaWQgY29tcGlsZXIgZXJyb3Igb24g
UlZUQzoKICAgICAgICAgLy8gRXJyb3I6ICAjNjk0OiByZWludGVycHJldF9jYXN0IGNhbm5vdCBj
YXN0IGF3YXkgY29uc3Qgb3Igb3RoZXIgdHlwZSBxdWFsaWZpZXJzCiAgICAgICAgIC8vIChJIGd1
ZXNzIG9uIFJWVEMgZnVuY3Rpb24gcG9pbnRlcnMgaGF2ZSBhIGRpZmZlcmVudCBjb25zdG5lc3Mg
dG8gR0NDL01TVkM/KQotICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2
YWx1ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKiwgdGFn
Pih2YWx1ZSkpCiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7Cisg
ICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29u
ZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBBU1NFUlRfTlVMTF9PUl9WQUxJ
RF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgRnVuY3Rpb25Q
dHIoRnVuY3Rpb25QdHIgb3RoZXIsIFB0clRhZyB0YWcpCi0gICAgICAgIDogbV92YWx1ZSh0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KG90aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRhZykpCisgICAg
ZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4pOworCisgICAg
dGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgorICAgIEZ1bmN0aW9uUHRyPG90aGVyVGFnPiByZXRh
Z2dlZCgpIGNvbnN0CiAgICAgewotICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihvdGhlci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05v
dFBvaXNvbmVkKG1fdmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1f
dmFsdWUpOworICAgICAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHI8b3RoZXJUYWc+KCk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxvdGhlclRhZz4o
KnRoaXMpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cik7Ci0KICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0CiAgICAgewog
ICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPFB0clRhZyBuZXdU
YWc+CisgICAgdm9pZCogcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dGFnLCBuZXdUYWc+KG1fdmFsdWUpOworICAgIH0K
KwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7
IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CiAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFs
dWU7IH0KKwogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+CisgICAgZXhw
bGljaXQgRnVuY3Rpb25QdHIoY29uc3QgRnVuY3Rpb25QdHI8b3RoZXJUYWc+JiBvdGhlcikKKyAg
ICAgICAgOiBtX3ZhbHVlKHJldGFnQ29kZVB0cjxvdGhlclRhZywgdGFnPihvdGhlci5leGVjdXRh
YmxlQWRkcmVzcygpKSkKKyAgICB7CisgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNO
b3RQb2lzb25lZChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUX05VTExfT1JfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgIH0KKwogICAgIHZvaWQqIG1fdmFsdWUgeyBudWxscHRyIH07
CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFzcyBGdW5jdGlvblB0cjsKIH07CiAK
LXN0YXRpY19hc3NlcnQoc2l6ZW9mKEZ1bmN0aW9uUHRyKSA9PSBzaXplb2Yodm9pZCopLCAiIik7
CitzdGF0aWNfYXNzZXJ0KHNpemVvZihGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KSA9PSBz
aXplb2Yodm9pZCopLCAiIik7CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQlVJTFRJTl9JU19UUklW
SUFMTFlfQ09QWUFCTEUpCi1zdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5X2NvcHlhYmxlKEZ1
bmN0aW9uUHRyKSwgIiIpOworc3RhdGljX2Fzc2VydChfX2lzX3RyaXZpYWxseV9jb3B5YWJsZShG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KSwgIiIpOwogI2VuZGlmCiAKIC8vIFJldHVybkFk
ZHJlc3NQdHI6CkBAIC0xNTgsOCArMTgzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IFJldHVybkFk
ZHJlc3NQdHIoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCi0gICAgICAgIDogbV92YWx1ZShmdW5jdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgZXhw
bGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQorICAgICAg
ICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpCiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQo
bV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CkBA
IC0xODMsOSArMjA5LDE2IEBAIHByaXZhdGU6CiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6CiAv
LwogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNob3VsZCBiZSB1c2VkIHRvIHdyYXAgcG9pbnRl
cnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHsK
K2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgeworcHJvdGVjdGVkOgorICAgIHN0YXRp
YyB2b2lkIGR1bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9pZCogZGF0YUxv
Y2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KTsKK307CisKK3RlbXBs
YXRlPFB0clRhZyB0YWc+CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpID0gZGVmYXVsdDsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RkOjpudWxscHRyX3QpIDogbV92YWx1ZShudWxscHRyKSB7
IH0KIAogICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cih2b2lkKiB2YWx1ZSkKICNp
ZiBDUFUoQVJNX1RIVU1CMikKQEAgLTE5NSw2ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIDog
bV92YWx1ZSh2YWx1ZSkKICNlbmRpZgogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRo
KHZhbHVlLCB0YWcpOwogICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAg
ICAgQVNTRVJUKHZhbHVlKTsKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTIwNywxNyArMjQxLDE3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VS
VF9WQUxJRF9DT0RFX1BPSU5URVIodmFsdWUpOworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgo
dmFsdWUsIHRhZyk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQ7CiAgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gUG9pc29uZWRNYXNtUHRyKHZhbHVlKTsKICAgICAgICAgcmVz
dWx0Lm1fdmFsdWUuYXNzZXJ0SXNQb2lzb25lZCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3JlYXRlTExJbnRDb2Rl
UHRyKE9wY29kZUlEIGNvZGVJZCk7Ci0KICAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoUmV0dXJuQWRkcmVzc1B0ciByYSkKLSAgICAgICAgOiBtX3ZhbHVlKHJhLnZhbHVlKCkpCisg
ICAgICAgIDogbV92YWx1ZSh0YWdDb2RlUHRyPHRhZz4ocmEudmFsdWUoKSkpCiAgICAgeworICAg
ICAgICBhc3NlcnRJc05vdFRhZ2dlZChyYS52YWx1ZSgpKTsKICAgICAgICAgQVNTRVJUKHJhLnZh
bHVlKCkpOwogICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlLnVucG9pc29uZWQoKSk7CkBAIC0yMjUsOSAr
MjU5LDEyIEBAIHB1YmxpYzoKIAogICAgIFBvaXNvbmVkTWFzbVB0ciBwb2lzb25lZFB0cigpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXRh
Z2dlZChQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSBjb25zdAorICAgIHRlbXBsYXRlPFB0
clRhZyBuZXdUYWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4gcmV0YWdnZWQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cihleGVjdXRhYmxlQWRkcmVzcygp
LCBvbGRUYWcsIG5ld1RhZykpOworICAgICAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4oKTsKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxuZXdUYWc+KCkpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KQEAgLTIzNiw2ICsyNzMsMjEgQEAgcHVibGljOgogICAg
ICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUu
dW5wb2lzb25lZDxUPigpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lk
Kj4KKyAgICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV92YWx1ZS5hc3NlcnRJc1BvaXNvbmVkKCk7CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQ
dHI8VCwgdGFnPihtX3ZhbHVlLnVucG9pc29uZWQoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
UHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgcmV0YWdnZWRFeGVjdXRh
YmxlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29u
ZWQoKTsKKyAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxULCB0YWcsIG5ld1RhZz4obV92YWx1
ZS51bnBvaXNvbmVkKCkpOworICAgIH0KKwogI2lmIENQVShBUk1fVEhVTUIyKQogICAgIC8vIFRv
IHVzZSB0aGlzIHBvaW50ZXIgYXMgYSBkYXRhIGFkZHJlc3MgcmVtb3ZlIHRoZSBkZWNvcmF0aW9u
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KQEAgLTI1MSw3ICszMDMsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAg
ICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxUPihtX3ZhbHVlID8gcmVtb3ZlQ29kZVB0clRhZyhtX3ZhbHVlLnVucG9pc29u
ZWQoKSkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1f
dmFsdWUudW5wb2lzb25lZCgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjgxLDEwICszMzMsMTMg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgp
ID0gZGVsZXRlOwogCi0gICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OwotICAgIAorICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9u
KCksIG5hbWUsIG91dCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQorCiAgICAgZW51bSBFbXB0
eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwogICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVs
ZXRlZFZhbHVlIH07CiAgICAgCkBAIC0zMTAsOSArMzY1LDEwIEBAIHByaXZhdGU6CiAgICAgUG9p
c29uZWRNYXNtUHRyIG1fdmFsdWU7CiB9OwogCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogc3RydWN0
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgcHRyKSB7IHJldHVybiBwdHIuaGFzaCgpOyB9Ci0g
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhLCBjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGIpCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4mIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
JiBhLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiYgYikKICAgICB7CiAgICAgICAg
IHJldHVybiBhID09IGI7CiAgICAgfQpAQCAtMzI0LDIzICszODAsMjkgQEAgc3RydWN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ckhhc2ggewogLy8gQSByZWZlcmVuY2UgdG8gYSBzZWN0aW9uIG9mIEpJ
VCBnZW5lcmF0ZWQgY29kZS4gIEEgQ29kZVJlZiBjb25zaXN0cyBvZiBhCiAvLyBwb2ludGVyIHRv
IHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0byB0aGUgcG9vbCBmcm9tIHdpdGhpbiB3aGlj
aCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB7Citj
bGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMg
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKKyAg
ICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNh
c3NlbWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4KTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgQ1N0cmluZyBkaXNhc3NlbWJseShNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RGlzYXNzZW1ibHlQdHJUYWc+LCBzaXplX3QpOworfTsKKwordGVtcGxhdGU8UHRyVGFnIHRh
Zz4KK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmQmFzZSB7CiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0
J3MgZGFuZ2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAogICAgIC8vIHRvIGJl
IGVhc3kgdG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KLSAg
ICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIpCisgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+IGNvZGVQdHIpCiAgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKQotICAgIHsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmKCkgPSBkZWZhdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFJlZjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiYmIGV4ZWN1dGFibGVNZW1vcnksIFB0clRhZyB0YWcpCi0gICAgICAg
IDogbV9jb2RlUHRyKHRhZ0NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSwgdGFnKSkK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoUmVmPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+JiYg
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIodGFnQ29kZVB0cjx0YWc+KGV4
ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShX
VEZNb3ZlKGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZXhlY3V0
YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOwpAQCAtMzUxLDI3ICs0MTMsMzEgQEAgcHVibGljOgog
ICAgIC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Uga25vdyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVy
cyB0byBjb2RlIHRoYXQgaXMKICAgICAvLyBhbHJlYWR5IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3Vn
aCBzb21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkgdGhpcyBtZWFucwogICAgIC8vIHRoYXQgY29k
ZVB0ciBpcyBpbW1vcnRhbC4KLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBjb2RlUHRyKQogICAgIHsKICAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKICAgICB9CiAgICAgCi0gICAgLy8gSGVscGVy
IGZvciBjcmVhdGluZyBzZWxmLW1hbmFnZWQgY29kZSByZWZzIGZyb20gTExJbnQuCi0gICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVMTEludENvZGVSZWYoT3Bjb2RlSUQgY29k
ZUlkKTsKLQogICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS5nZXQoKTsKICAg
ICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdAorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fY29kZVB0cjsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdn
ZWRDb2RlKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpIGNvbnN0CisgICAgdGVtcGxhdGU8
UHRyVGFnIG5ld1RhZz4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPiByZXRhZ2dl
ZENvZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZVB0ci50ZW1wbGF0ZSBy
ZXRhZ2dlZDxuZXdUYWc+KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8bmV3VGFnPiByZXRhZ2dlZCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9jb2RlUHRyLnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxuZXdUYWc+KCp0aGlzKTsKICAgICB9
CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0zODEsMjIgKzQ0Nyw0MyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAg
fQogCi0gICAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNo
YXIqIHByZWZpeCA9ICIiKSBjb25zdDsKKyAgICBib29sIHRyeVRvRGlzYXNzZW1ibGUoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShyZXRhZ2dlZENvZGU8RGlzYXNzZW1ibHlQdHJUYWc+
KCksIHNpemUoKSwgcHJlZml4LCBvdXQpOworICAgIH0KICAgICAKLSAgICBib29sIHRyeVRvRGlz
YXNzZW1ibGUoY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0OworICAgIGJvb2wgdHJ5VG9E
aXNhc3NlbWJsZShjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKHJldGFnZ2VkQ29kZTxEaXNhc3NlbWJseVB0clRhZz4o
KSwgc2l6ZSgpLCBwcmVmaXgpOworICAgIH0KICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBD
U3RyaW5nIGRpc2Fzc2VtYmx5KCkgY29uc3Q7CisgICAgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlz
YXNzZW1ibHkocmV0YWdnZWRDb2RlPERpc2Fzc2VtYmx5UHRyVGFnPigpLCBzaXplKCkpOworICAg
IH0KICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2NvZGVQdHI7IH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBt
X2NvZGVQdHIuZHVtcFdpdGhOYW1lKCJDb2RlUmVmIiwgb3V0KTsKKyAgICB9CiAKIHByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgb3RoZXJUYWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICAgICAgOiBtX2NvZGVQdHIo
b3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRh
Zz4oKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0
YWJsZU1lbW9yeSkKKyAgICB7IH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1f
Y29kZVB0cjsKICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxl
TWVtb3J5OworCisgICAgdGVtcGxhdGU8UHRyVGFnPiBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOwogfTsKIAotaW5saW5lIEZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0cihNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgcHRyKQordGVtcGxhdGU8UHRyVGFnIHRhZz4KK2lubGluZSBGdW5jdGlv
blB0cjx0YWc+OjpGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBwdHIpCiAg
ICAgOiBtX3ZhbHVlKHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKQogewogICAgIFBvaXNvbmVkTWFz
bVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKQEAgLTQwNywxMSArNDk0LDExIEBA
IGlubGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3MKIG5hbWVzcGFjZSBXVEYg
ewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gewotICAgIHR5
cGVkZWYgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIEhhc2g7Cit0ZW1wbGF0ZTxKU0M6
OlB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+PiB7CisgICAgdHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g8dGFn
PiBIYXNoOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiA6
IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiB7IH07
Cit0ZW1wbGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8dGFnPj4geyB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ck1JUFMuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM5NSwxMiArMzM5
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihyZWFzb24pOwogICAgIH0K
IAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
IGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFn
PgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRD
YWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZVB0clRhZyk7CisgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihN
SVBTQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBp
bnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICBNSVBTQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwogICAgIH0KQEAgLTM0MTksNDQg
KzM0MjEsNTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9v
bCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIpCisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwot
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFi
ZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4g
bGFiZWwubGFiZWxBdE9mZnNldCgwKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0
cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0Jy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQs
IFJlZ2lzdGVySUQsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIE1JUFNBc3Nl
bWJsZXI6OnJldmVydEp1bXBUb01vdmUoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwg
aW1tVGVtcFJlZ2lzdGVyLCByZWludGVycHJldF9jYXN0PGludD4oaW5pdGlhbFZhbHVlKSAmIDB4
ZmZmZik7CiAgICAgfQogCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
PHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8dGFnPikKICAgICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVM
b2NhdGlvbkxhYmVsLCBBZGRyZXNzLCBpbnQzMl90KQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+LCBBZGRyZXNzLCBpbnQzMl90KQogICAg
IHsKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwsIEFkZHJlc3MsIHZvaWQqKQorICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgQWRkcmVzcywgdm9pZCop
CiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJU
YWcgZGVzdFRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxs
PGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQog
ICAgIHsKICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRl
c3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4K
KyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNh
bGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgTUlQ
U0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0zNDY4LDcgKzM0NzgsOCBAQCBwcml2YXRl
OgogCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5r
Q2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwg
Q2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYg
KGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQogICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDE3
ICsyOTgsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2lu
dFRydW5jYXRlKCkgeyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CiAgICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQog
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpIHsgcmV0dXJuIGlzU1NF
MlByZXNlbnQoKTsgfQotICAgIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdl
dChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
LCBQdHJUYWcgbG9jYXRpb25UYWc+CisgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4g
cmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7
CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGNh
bGwuZGF0YUxvY2F0aW9uKCkpWy0xXTsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYWxsLmRhdGFM
b2NhdGlvbigpKSArIG9mZnNldCksIENvZGVQdHJUYWcpOworICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgp
IHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAotICAgIHN0YXRpYyBD
b2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgor
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0
Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjx0YWc+IGxhYmVsKQogICAgIHsK
ICAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG1v
ZFJNQnl0ZXMgPSAxOwpAQCAtMzE3LDggKzMxOSw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKICAgICAgICAgcmV0dXJu
IGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMpOwogICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9u
QWRkcmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PHRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOwog
ICAgICAgICBjb25zdCBpbnQgbW9kUk1CeXRlcyA9IDE7CkBAIC0zMjgsOCArMzMxLDkgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXpl
KCkpOwogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAg
ICAgfQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgbGFiZWwp
CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJl
bDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgY29uc3QgaW50IG9w
Y29kZUJ5dGVzID0gMTsKICAgICAgICAgY29uc3QgaW50IG1vZFJNQnl0ZXMgPSAxOwpAQCAtMzM5
LDMwICszNDMsMzUgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhK
dW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNl
dCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIFJlZ2lzdGVySUQgcmVnLCB2b2lkKiBpbml0aWFsVmFsdWUpCisKKyAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRv
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgUmVnaXN0ZXJJRCByZWcsIHZvaWQqIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIFg4
NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX2NtcGxfaXJfZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxW
YWx1ZSksIHJlZyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1
Y3Rpb25TdGFydCwgQWRkcmVzcyBhZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3Ry
dWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFhZGRyZXNzLm9mZnNldCk7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6
cmV2ZXJ0SnVtcFRvX2NtcGxfaW1fZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSksIDAsIGFk
ZHJlc3MuYmFzZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVj
dGlvblN0YXJ0LCBBZGRyZXNzIGFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQorICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3Ry
dWN0aW9uU3RhcnQsIEFkZHJlc3MgYWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIWFkZHJlc3Mub2Zmc2V0KTsKICAgICAgICAgWDg2QXNzZW1ibGVy
OjpyZXZlcnRKdW1wVG9fY21wbF9pbV9mb3JjZTMyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgaW5pdGlhbFZhbHVlLCAwLCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRh
ZyBkZXN0VGFnPgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8
Y2FsbFRhZz4gY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24o
KSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0
aW5hdGlvbikKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Cisg
ICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxs
LCBGdW5jdGlvblB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIFg4NkFz
c2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICB9CkBAIC0zNzAsNyArMzc5LDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIAotICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMDMsOCArMTIwMyw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bF9tcl9kaXNwOChhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAg
ICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3QodGhpcyk7CiAgICAgfQotICAgIAotICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgZGF0
YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29t
cGFjdDx0YWc+IGRhdGFMYWJlbENvbXBhY3QsIGludDMyX3QgdmFsdWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQodmFsdWUpKTsKICAgICAg
ICAgQXNzZW1ibGVyVHlwZV9UOjpyZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0LmRhdGFM
b2NhdGlvbigpLCB2YWx1ZSk7CkBAIC0zODc5LDEyICszODgwLDE0IEBAIHB1YmxpYzoKICAgICB9
CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2NhdGlv
bkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3Ry
dWN0aW9uU3RhcnQpCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSGx0
KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3Rh
cnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyBz
dGFydFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1w
KENvZGVMb2NhdGlvbkxhYmVsPHN0YXJ0VGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRp
b25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
ZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODg0LDkgKzE4ODQsMTAg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJz
KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2Fs
bFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3Vs
dFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRU
YWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAg
ICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRl
cihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0
YUxvY2F0aW9uKCkpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJl
c3VsdFRhZz4oWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zm
c2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCkpKTsKICAgICB9CiAK
ICAgICBib29sIGhhdmVTY3JhdGNoUmVnaXN0ZXJGb3JCbGluZGluZygpIHsgcmV0dXJuIG1fYWxs
b3dTY3JhdGNoUmVnaXN0ZXI7IH0KQEAgLTE4OTQsOCArMTg5NSw5IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgc3RhdGljIENv
ZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Cisg
ICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRj
aE9uUmVnaXN0ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCiAgICAgewog
ICAgICAgICBjb25zdCBpbnQgcmV4Qnl0ZXMgPSAxOwogICAgICAgICBjb25zdCBpbnQgb3Bjb2Rl
Qnl0ZXMgPSAxOwpAQCAtMTkwNCw4ICsxOTA2LDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOwogICAgICAgICByZXR1cm4g
bGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7CiAgICAgfQotICAgIAotICAgIHN0YXRp
YyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mQnJhbmNoMzJXaXRoUGF0Y2hPblJlZ2lzdGVyKENv
ZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
KyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoMzJXaXRoUGF0
Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4gbGFiZWwpCiAgICAgewog
ICAgICAgICBjb25zdCBpbnQgcmV4Qnl0ZXMgPSAxOwogICAgICAgICBjb25zdCBpbnQgb3Bjb2Rl
Qnl0ZXMgPSAxOwpAQCAtMTkxNCwzOCArMTkxNyw0NSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCh0b3RhbEJ5dGVzID49IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CiAgICAgICAgIHJldHVy
biBsYWJlbC5sYWJlbEF0T2Zmc2V0KC10b3RhbEJ5dGVzKTsKICAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hP
bkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQorCisgICAgdGVtcGxhdGU8
UHRyVGFnIHRhZz4KKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBzdGFydE9mUGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjx0YWc+IGxhYmVsKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKGxhYmVsKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9u
TGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyIGxhYmVsKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAgc3Rh
dGljIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gc3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyPHRhZz4gbGFiZWwpCiAgICAgewog
ICAgICAgICByZXR1cm4gc3RhcnRPZkJyYW5jaDMyV2l0aFBhdGNoT25SZWdpc3RlcihsYWJlbCk7
CiAgICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3Rh
cnQsIEFkZHJlc3MsIHZvaWQqIGluaXRpYWxWYWx1ZSkKKworICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0LCBB
ZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6
OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVz
cygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hS
ZWdpc3Rlcik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBBZGRyZXNzLCBpbnQzMl90IGluaXRpYWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVjdGlvblN0YXJ0
LCBBZGRyZXNzLCBpbnQzMl90IGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmV2ZXJ0SnVtcFRvX21vdmxfaTMycihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVB
ZGRyZXNzKCksIGluaXRpYWxWYWx1ZSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENv
ZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIFJlZ2lzdGVySUQsIHZvaWQqIGluaXRp
YWxWYWx1ZSkKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIHN0YXRpYyB2b2lkIHJldmVy
dEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRh
Zz4gaW5zdHJ1Y3Rpb25TdGFydCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQogICAg
IHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0
aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
aW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZGVzdGluYXRpb24pCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFn
PgorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4g
Y2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewogICAg
ICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9S
MTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAg
ICB9CkBAIC0xOTY2LDcgKzE5NzYsOCBAQCBwcml2YXRlOgogCiAgICAgZnJpZW5kIGNsYXNzIExp
bmtCdWZmZXI7CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CisgICAg
c3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0
YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpO
ZWFyKSkKICAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5t
X2xhYmVsLmxhYmVsQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxOCAr
MTQ0LDE4IEBAIGJvb2wgaXNTcGVjaWFsR1BSKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3QKIH0KICNl
bmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBp
bGUoR2VuZXJhdG9yJiYgZ2VuZXJhdGUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0
clRhZz4gY29tcGlsZShHZW5lcmF0b3ImJiBnZW5lcmF0ZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0OwogICAgIGdlbmVyYXRlKGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
bnVsbHB0cik7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0
clRhZywgInRlc3RtYXNtIGNvbXBpbGF0aW9uIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgInRlc3RtYXNtIGNvbXBpbGF0aW9uIik7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorVCBpbnZv
a2UoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5j
dGlvblB0cihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsK
KyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpTRW50cnlQ
dHJUYWc+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFQgKCpmdW5jdGlv
bikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1
dGFibGVBZGRyZXNzKTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KQEAg
LTU5Myw3ICs1OTMsNyBAQCB2b2lkIHRlc3RQcm9iZU1vZGlmaWVzUHJvZ3JhbUNvdW50ZXIoKQog
ICAgIHVuc2lnbmVkIHByb2JlQ2FsbENvdW50ID0gMDsKICAgICBib29sIGNvbnRpbnVhdGlvbldh
c1JlYWNoZWQgPSBmYWxzZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb250aW51YXRp
b24gPSBjb21waWxlKFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29udGludWF0aW9uID0gY29tcGlsZShbJl0gKENDYWxs
SGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgd2UgcmVhY2hlZCB0aGUg
Y29udGludWF0aW9uLgogICAgICAgICBqaXQucHJvYmUoWyZdIChQcm9iZTo6Q29udGV4dCYpIHsK
ICAgICAgICAgICAgIHByb2JlQ2FsbENvdW50Kys7CkBAIC02MTAsNyArNjEwLDcgQEAgdm9pZCB0
ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKCkKICAgICAgICAgLy8gV3JpdGUgZXhwZWN0
ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4KICAgICAgICAgaml0LnByb2JlKFsmXSAoUHJv
YmU6OkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgICAgIHByb2JlQ2FsbENvdW50Kys7Ci0g
ICAgICAgICAgICBjb250ZXh0LmNwdS5wYygpID0gdW50YWdDb2RlUHRyKGNvbnRpbnVhdGlvbi5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRhZyk7CisgICAgICAgICAgICBj
b250ZXh0LmNwdS5wYygpID0gdW50YWdDb2RlUHRyKGNvbnRpbnVhdGlvbi5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGpp
dC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDIzMDc0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLUNvbXBpbGF0aW9uOjpDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJl
Ziwgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IGJ5cHJvZHVjdHMpCitDb21waWxh
dGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJU
YWc+IGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3Rz
KQogICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCiAgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShi
eXByb2R1Y3RzKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDE3ICs0OCwxNyBAQCBjbGFzcyBDb21w
aWxhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6
dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29t
cGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+LCBzdGQ6
OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENv
bXBpbGF0aW9uKENvbXBpbGF0aW9uJiYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxh
dGlvbigpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVSZWYuY29kZSgpOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWY7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
QjNDb21waWxhdGlvblB0clRhZz4gY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2Rl
KCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21waWxhdGlvblB0clRhZz4gY29k
ZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZjsgfQogICAgIAogICAgIENTdHJpbmcgZGlz
YXNzZW1ibHkoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuZGlzYXNzZW1ibHkoKTsgfQogCiBw
cml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGVSZWY7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fY29kZVJlZjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gbV9ieXByb2R1Y3RzOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIENvbXBpbGF0aW9uIGNvbXBpbGUoUHJvY2VkdXJlJiBwcm9jKQogICAg
IGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVs
bHB0cik7CiAKLSAgICByZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBKSVRDb2RlUHRyVGFnLCAiQjM6OkNvbXBpbGF0aW9uIiksIHByb2MucmVsZWFzZUJ5cHJvZHVj
dHMoKSk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
QjNDb21waWxhdGlvblB0clRhZywgIkIzOjpDb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXBy
b2R1Y3RzKCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk5LDIwICs0OTksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cioganVtcFRhYmxlID0gc3RhdGljX2Nhc3Q8TWFjcm9B
c3NlbWJsZXJDb2RlUHRyKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnBy
b2MoKS5hZGREYXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKSAqIHRhYmxl
U2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVzaW5nIEp1bXBUYWJsZUNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0
Y2hQdHJUYWc+OworICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFRhYmxlQ29kZVB0cioganVt
cFRhYmxlID0gc3RhdGljX2Nhc3Q8SnVtcFRhYmxlQ29kZVB0cio+KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKEp1bXBUYWJs
ZUNvZGVQdHIpICogdGFibGVTaXplKSk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJl
ZyBpbmRleCA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IEdQUlJlZyBwb2lzb25TY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFB0clRhZyBzd2l0Y2hUYWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSklUQ29kZVBvaXNvbjo6a2V5KCkpLCBwb2lzb25TY3Jh
dGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihqdW1wVGFibGUpLCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaCwgaW5kZXgsIENDYWxs
SGVscGVyczo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0Lmp1bXAoc2NyYXRjaCwgc3dpdGNoVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5qdW1wKHNjcmF0Y2gsIEpTU3dpdGNoUHRyVGFnKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlc2UgbGFiZWxzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHBvcHVsYXRlZCBiZWZv
cmUgZWl0aGVyIGxhdGUgcGF0aHMgb3IKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsg
dGFza3MgcnVuLgpAQCAtNTIxLDE0ICs1MjEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1VuaGFuZGxlZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbFRocm91Z2ggPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoKmxhYmVscy5sYXN0KCksIHN3aXRjaFRhZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBKdW1wVGFibGVDb2RlUHRyIGZhbGxUaHJvdWdoID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPigqbGFiZWxzLmxhc3QoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0YWJsZVNpemU7
IGktLTspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxl
W2ldID0gZmFsbFRocm91Z2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxhYmVsSW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRhYmxlSW5kZXggOiBoYW5kbGVkSW5kaWNlcykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVt0YWJsZUluZGV4XSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2xhYmVsSW5kZXgrK10sIHN3aXRjaFRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbdGFibGVJbmRleF0g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KCpsYWJlbHNbbGFiZWxJbmRl
eCsrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDkgKzEyNSw5IEBAIHN0ZDo6dW5p
cXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZVByb2MKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotVCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1QgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBwdHIsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7
Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihwdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRhZyk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxCM0NvbXBpbGF0aW9uUHRyVGFnPihwdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lz
ZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVy
biBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwogfQpAQCAtMTMwMzMsOCArMTMwMzMsOCBAQCB2b2lk
IHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBWZWN0b3I8Qm94PENDYWxsSGVs
cGVyczo6TGFiZWw+PiBsYWJlbHMgPSBwYXJhbXMuc3VjY2Vzc29yTGFiZWxzKCk7CiAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cioganVtcFRhYmxlID0gYml0d2lzZV9jYXN0PE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cio+KAotICAgICAgICAgICAgICAgIHBhcmFtcy5wcm9jKCkuYWRk
RGF0YVNlY3Rpb24oc2l6ZW9mKE1hY3JvQXNzZW1ibGVyQ29kZVB0cikgKiBsYWJlbHMuc2l6ZSgp
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRh
Zz4qIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2FzdDxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8QjNDb21w
aWxhdGlvblB0clRhZz4qPigKKyAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFT
ZWN0aW9uKHNpemVvZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8QjNDb21waWxhdGlvblB0clRhZz4p
ICogbGFiZWxzLnNpemUoKSkpOwogCiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFt
cy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICBHUFJSZWcgcG9pc29uU2NyYXRjaCA9IHBhcmFt
cy5ncFNjcmF0Y2goMSk7CkBAIC0xMzA0MywxMyArMTMwNDMsMTIgQEAgdm9pZCB0ZXN0SW50ZXJw
cmV0ZXIoKQogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SklUQ29kZVBvaXNvbjo6a2V5KCkpLCBwb2lzb25TY3JhdGNoKTsKICAgICAgICAgICAgIGppdC5s
b2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaCwgcGFyYW1zWzBdLmdwcigpLCBD
Q2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICAgICAgICAgIGppdC54b3I2
NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIFB0clRhZyBzd2l0Y2hUYWcg
PSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAg
IGppdC5qdW1wKHNjcmF0Y2gsIHN3aXRjaFRhZyk7CisgICAgICAgICAgICBqaXQuanVtcChzY3Jh
dGNoLCBCM0NvbXBpbGF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAogICAgICAgICAgICAgICAgIFsmLCBqdW1wVGFibGUsIGxhYmVsc10gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGFiZWxz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2ldLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAganVtcFRhYmxlW2ldID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGls
YXRpb25QdHJUYWc+KCpsYWJlbHNbaV0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9
KTsKICAgICAKQEAgLTEzMjk4LDExICsxMzI5NywxMSBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFNp
bXBsZSgpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwog
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0
clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2lu
dExhYmVsKDEpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBs
YWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHBy
b2MuZW50cnlwb2ludExhYmVsKDIpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNv
bXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJU
YWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJU
YWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVs
T25lLCAxLCAyKSA9PSAzKTsKICAgICBDSEVDSyhpbnZva2U8aW50PihsYWJlbFR3bywgMSwgMikg
PT0gLTEpOwpAQCAtMTMzMzEsMTEgKzEzMzMwLDExIEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoTm9F
bnRyeVN3aXRjaCgpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBq
aXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlw
b2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJl
bFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklU
Q29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFi
ZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVs
VHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50
cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRy
VGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJU
YWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVz
dGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRp
b25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAogICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KGxhYmVsT25lLCAxLCAyKSwgMyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxU
d28sIDEsIDIpLCAzKTsKQEAgLTEzNDE4LDExICsxMzQxNywxMSBAQCB2b2lkIHRlc3RFbnRyeVN3
aXRjaFdpdGhDb21tb25QYXRocygpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0
ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJl
bCgxKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0
clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxP
bmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRy
eXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJU
YWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+
KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxCM0NvbXBp
bGF0aW9uUHRyVGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGls
YXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRy
VGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIz
Q29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIz
Q29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAogICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KGxhYmVsT25lLCAxLCAyLCAxMCksIDMpOwogICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KGxhYmVsVHdvLCAxLCAyLCAxMCksIC0xKTsKQEAgLTEzNTM1LDExICsxMzUzNCwxMSBA
QCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFn
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9p
bnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21w
aWxhdGlvblB0clRhZz4gbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxh
dGlvblB0clRhZz4ocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEIzQ29tcGlsYXRpb25QdHJUYWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxCM0NvbXBpbGF0aW9uUHRyVGFnPiBsYWJlbFRocmVlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+KHByb2MuZW50cnlwb2ludExhYmVsKDIp
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIzIGNvbXBpbGF0aW9uIik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IGNvZGVSZWYgPSBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRp
b24iKTsKIAogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsT25lLCAxLCAyLCAxMCwgZmFs
c2UpLCAzKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PihsYWJlbFR3bywgMSwgMiwgMTAsIGZh
bHNlKSwgLTEpOwpAQCAtMTM2MTMsMTAgKzEzNjEyLDEwIEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNo
TG9vcCgpCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwog
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0
clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8QjNDb21waWxhdGlvblB0clRhZz4gbGFiZWxP
bmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8QjNDb21waWxhdGlvblB0clRhZz4ocHJvYy5lbnRy
eXBvaW50TGFiZWwoMCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEIzQ29tcGlsYXRpb25QdHJU
YWc+IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEIzQ29tcGlsYXRpb25QdHJUYWc+
KHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAidGVzdGIz
IGNvbXBpbGF0aW9uIik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25Q
dHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25Q
dHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KGxh
YmVsT25lLCAwKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PihsYWJlbE9uZSwgNDIpID09
IDQzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fz
c2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCwxMCArNzQsMTAgQEAg
dm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoQ29kZSYgY29kZSwgUHJpbgogICAgIGF1dG8gZHVtcEFz
bVJhbmdlID0gWyZdIChDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0TGFiZWwsIENDYWxsSGVscGVy
czo6TGFiZWwgZW5kTGFiZWwpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhcnRMYWJlbC5p
c1NldCgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW5kTGFiZWwuaXNTZXQoKSk7Ci0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXJ0
TGFiZWwpOwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoZW5kTGFiZWwpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBkaXNhc3NlbWJsZShzdGFy
dCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSksIGFzbVByZWZp
eCwgb3V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IHN0
YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPihzdGFydExhYmVs
KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IGVuZCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4oZW5kTGFiZWwpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSA+PSBzdGFydC5k
YXRhTG9jYXRpb248dWludHB0cl90PigpKTsKKyAgICAgICAgZGlzYXNzZW1ibGUoc3RhcnQsIGVu
ZC5kYXRhTG9jYXRpb248dWludHB0cl90PigpIC0gc3RhcnQuZGF0YUxvY2F0aW9uPHVpbnRwdHJf
dD4oKSwgYXNtUHJlZml4LCBvdXQpOwogICAgIH07CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ibG9ja3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVz
dGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0
YWlyLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTMgKzkwLDEzIEBAIHN0ZDo6dW5p
cXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21w
aWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRh
ZywgInRlc3RhaXIgY29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKKyAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAidGVz
dGFpciBjb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBUIGludm9rZShjb25zdCBC
Mzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyKGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEIzQ29tcGlsYXRpb25QdHJUYWcpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9
IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKICAg
ICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODE4LDE0ICs4MTgsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChzbG93UGF0aENhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRo
Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihzbG93UGF0
aENhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFkZHJlc3NPZkxpbmtG
dW5jdGlvbkNoZWNrKSksCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RQYXRoQ2FsbCkpOwogCi0gICAgICAgICAgICAg
ICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsICZ2bSk7CiAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwsCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRy
VGFnKSkpOworICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0
clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nv
clNldHRlcik7CkBAIC04NTUsMTAgKzg1NCw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CiAKLSAgICAgICAg
ICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEdldHRlclNldHRlclB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOwotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwor
ICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9u
UHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5v
cGFxdWUsIGNhbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vz
c29yKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3Rv
bVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikKQEAgLTEwMDAs
MTIgKzk5OCwxMSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlU
b0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KT4oYmFzZUdQUik7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0
clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eSwgY2FsbFRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1
Y3R1cmUvYnV0dGVyZmx5CkBAIC0xMDEzLDEyICsxMDEwLDExIEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0
eVN0b3JhZ2UpPigKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOworICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25D
YWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIGNhbGxUYWcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZVNuaXBwZXRQYXJhbXMuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwxMSArNjEsMTAgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxGdW5jdGlvblR5cGU+KHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cyku
Li4pOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBu
ZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxs
ID0gaml0LmNhbGwodGFnKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uID0g
bV9mdW5jdGlvbjsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1
bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhv
cGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7CiAg
ICAgICAgIH0pOwogCiAgICAgICAgIGppdC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Ywogc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgQnlWYWxJbmZvKCkgeyB9CiAK
LSAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uSnVtcCBu
b3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsIGV4Y2VwdGlvbkhhbmRsZXIsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lLCBpbnQxNl90IGJhZFR5
cGVKdW1wVG9OZXh0SG90UGF0aCwgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAg
ICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uSnVtcDxKU0Vu
dHJ5UHRyVGFnPiBub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkp1bXA8SlNFbnRyeVB0clRhZz4g
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4
Y2VwdGlvbkhhbmRsZXIsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lLCBpbnQxNl90IGJhZFR5cGVKdW1w
VG9OZXh0SG90UGF0aCwgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKICAgICAgICAg
OiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbm90SW5kZXhKdW1wKG5v
dEluZGV4SnVtcCkKICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKQEAgLTI0NCw5
ICsyNDQsOSBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRl
Y29kZUluZGV4OwotICAgIENvZGVMb2NhdGlvbkp1bXAgbm90SW5kZXhKdW1wOwotICAgIENvZGVM
b2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9u
SGFuZGxlcjsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJUYWc+IG5vdEluZGV4SnVt
cDsKKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTRW50cnlQdHJUYWc+IGJhZFR5cGVKdW1wOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvbkhhbmRs
ZXI7CiAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3
YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgogICAgIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlOwogICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24g
MjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NywyNSArOTcsMjUgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbCBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlv
bigpCitDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBDYWxsTGlua0luZm86OmNh
bGxSZXR1cm5Mb2NhdGlvbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwot
ICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0
Y2hhYmxlSnVtcCwgUmVndWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpT
RW50cnlQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLCBSZWd1bGFy
KTsKIH0KIAotQ29kZUxvY2F0aW9uSnVtcCBDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1bXAoKQor
Q29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1
bXAoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGlyZWN0VGFpbENhbGwp
OwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wKG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRj
aGFibGVKdW1wKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiht
X2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCk7CiB9CiAKLUNvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0ciBDYWxsTGlua0luZm86OmhvdFBhdGhCZWdpbigpCitDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNFbnRyeVB0clRhZz4gQ2FsbExpbmtJbmZvOjpob3RQYXRoQmVnaW4oKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyKG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0KTsKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTRW50cnlQdHJUYWc+KG1faG90UGF0aEJlZ2luT3JT
bG93UGF0aFN0YXJ0KTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWwgQ2FsbExpbmtJbmZvOjpzbG93
UGF0aFN0YXJ0KCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IENhbGxMaW5rSW5m
bzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CiAg
ICAgcmV0dXJuIG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjMwNzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB2b2lkIHNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxS
ZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
aG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAotICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bCBob3RQYXRoT3RoZXIpCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAorICAgICAg
ICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPiBob3RQYXRoT3RoZXIpCiAgICAg
ewogICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCA9IGNhbGxSZXR1
cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKICAgICAgICAgbV9ob3RQYXRoQmVnaW5PclNsb3dQ
YXRoU3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7CkBAIC0xODEsMTIgKzE4MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbigpOwotICAgIENvZGVMb2Nh
dGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCgpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBo
b3RQYXRoQmVnaW4oKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0YXJ0KCk7Cisg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9u
KCk7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPiBwYXRjaGFibGVKdW1wKCk7
CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTRW50cnlQdHJUYWc+IGhvdFBhdGhCZWdp
bigpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IHNsb3dQYXRoU3RhcnQo
KTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcigpCisgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gaG90UGF0aE90aGVyKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hvdFBhdGhPdGhlcjsKICAgICB9CkBAIC0zMjcsOSArMzI3LDExIEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9jYWxsUmV0
dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9ob3RQ
YXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9ob3RQ
YXRoT3RoZXI7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSB0YWdnZWQgd2l0aCBKU0lu
dGVybmFsUHRyVGFnIGluc3RlYWQgb2YgSlNFbnRyeVRhZy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzEyCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRo
U3RhcnQ7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gbV9ob3RQYXRo
T3RoZXI7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDc0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8m
IHVubGlua2VkSGFuZGxlciA9IHVubGlua2VkQ29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkp
OwogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRD
b2RlUHRyKG9wX2NhdGNoKSkpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUo
dW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PihMTEludDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0clRhZz4ob3BfY2F0Y2gpLnJldGFnZ2VkPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgaGFuZGxl
ci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIz
MDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
SW5saW5lYWJsZTogewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXM7CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogaW50cmlu
c2ljRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAg
ICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlOwogCiAgICAgICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CkBAIC0y
NzgsNyArMjc4LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAg
ICAgICAgICAgICBjdXN0b21BY2Nlc3NvckdldHRlciA9IGJpdHdpc2VfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3Vz
dG9tQWNjZXNzb3IoKSk7CisgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVy
ID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsK
ICAgICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlID0gYWNjZXNzLmFzPEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U+KCkuZG9tQXR0cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZG9tQXR0cmlidXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQo
CiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzLAogICAgIEpT
RnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLAotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyLAorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIsCiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpCiAgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCkBAIC0xNTUsNyArMTU1LDcg
QEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIGlmIChtX2lu
dHJpbnNpY0Z1bmN0aW9uKQogICAgICAgICBvdXQucHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1f
aW50cmluc2ljRnVuY3Rpb24pOwogICAgIGlmIChtX2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAg
ICAgICBvdXQucHJpbnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKGJp
dHdpc2VfY2FzdDxjb25zdCB2b2lkKj4obV9jdXN0b21BY2Nlc3NvckdldHRlcikpKTsKKyAgICAg
ICAgb3V0LnByaW50KCIsIGN1c3RvbWFjY2Vzc29yZ2V0dGVyID0gIiwgUmF3UG9pbnRlcihtX2N1
c3RvbUFjY2Vzc29yR2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBpZiAobV9kb21B
dHRyaWJ1dGUpIHsKICAgICAgICAgb3V0LnByaW50KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRl
cihtX2RvbUF0dHJpYnV0ZS0+Y2xhc3NJbmZvKSk7CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0
ZS0+ZG9tSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+ID0gbnVsbHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRy
LAotICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAg
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxs
cHRyLAogICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+ID0gc3Rk
OjpudWxsb3B0KTsKIAogICAgIH5HZXRCeUlkVmFyaWFudCgpOwpAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbjsgfQogICAgIEludHJp
bnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY0Z1bmN0aW9uID8gbV9p
bnRyaW5zaWNGdW5jdGlvbi0+aW50cmluc2ljKCkgOiBOb0ludHJpbnNpYzsgfQotICAgIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVyKCkgY29uc3QgeyByZXR1
cm4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsgfQorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUFjY2Vz
c29yR2V0dGVyOyB9CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBk
b21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2RvbUF0dHJpYnV0ZTsgfQogCiAgICAgYm9v
bCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXQoKSA9PSBpbnZhbGlkT2Zm
c2V0OyB9CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwogICAgIEpTRnVuY3Rpb24qIG1faW50cmluc2ljRnVuY3Rpb247Ci0gICAgUHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmMgbV9jdXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgc3RkOjpvcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw3IEBAIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2UKIAog
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0LCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0
ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwKKyAgICBib29sIHZpYVByb3h5LCBXYXRjaHBv
aW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3Rv
bUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAogICAgIHN0ZDo6b3B0aW9uYWw8RE9N
QXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVBy
b3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewpAQCAtNjUsMTcgKzY1LDE3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0
ZXJTZXR0ZXIKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiBy
ZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQcm94eSwgYWRkaXRpb25hbFNldCwgY3VzdG9t
U2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7CiAgICAgcmVzdWx0LT5t
X2RvbUF0dHJpYnV0ZSA9IGRvbUF0dHJpYnV0ZTsKLSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNz
b3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9
IGN1c3RvbUdldHRlciA/IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY3VzdG9tR2V0dGVy
KSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21T
ZXR0ZXIsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIsCiAgICAgSlNP
YmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0
eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3
IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBmYWxzZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7Ci0gICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yLnNl
dHRlciA9IGN1c3RvbVNldHRlcjsKKyAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0
b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBu
dWxscHRyOwogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcg
QEAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZQogICAgIDogQmFzZShv
dGhlcikKICAgICAsIG1fY3VzdG9tU2xvdEJhc2Uob3RoZXIubV9jdXN0b21TbG90QmFzZSkKIHsK
LSAgICBtX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IG90aGVyLm1fY3VzdG9tQWNjZXNzb3Iub3Bh
cXVlOworICAgIG1fY3VzdG9tQWNjZXNzb3IgPSBvdGhlci5tX2N1c3RvbUFjY2Vzc29yOwogICAg
IG1fZG9tQXR0cmlidXRlID0gb3RoZXIubV9kb21BdHRyaWJ1dGU7CiB9CiAKQEAgLTExMyw3ICsx
MTMsNyBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByCiAgICAgb3V0
LnByaW50KGNvbW1hLCAiY3VzdG9tU2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKGN1c3RvbVNsb3RC
YXNlKCkpKTsKICAgICBpZiAoY2FsbExpbmtJbmZvKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxMaW5rSW5mbyA9ICIsIFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKCkpKTsKLSAgICBv
dXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIobV9jdXN0b21B
Y2Nlc3Nvci5vcGFxdWUpKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9
ICIsIFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiB9
CiAKIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklU
LCBHUFJSZWcgYmFzZUZvckdldEdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vz
c0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQog
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJveHlhYmxl
QWNjZXNzQ2FzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDE5ICs0OSwxOSBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3Ry
dWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYywKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNs
b3RCYXNlLCBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1
ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKLSAgICAg
ICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgPSBudWxscHRyLCBKU09iamVjdCogY3Vz
dG9tU2xvdEJhc2UgPSBudWxscHRyKTsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBu
dWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXIm
KSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUo
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIH5HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCk7CiAKLSAg
ICB2b2lkKiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3Iu
b3BhcXVlOyB9CisgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3Nv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlP
ZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9v
bCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3Rv
bVNsb3RCYXNlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKQEAgLTY5
LDExICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3Vz
dG9tU2xvdEJhc2U7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlu
a0luZm87Ci0gICAgdW5pb24gewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
YyBzZXR0ZXI7Ci0gICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKLSAg
ICAgICAgdm9pZCogb3BhcXVlOwotICAgIH0gbV9jdXN0b21BY2Nlc3NvcjsKKyAgICBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25h
bDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMTA5LDE0ICsxMDksMTMgQEAgc3RydWN0IEhhbmRsZXJJbmZvIDog
cHVibGljIEhhbmRsZXJJbmZvQgogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBp
bml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWwpCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFu
ZGxlckluZm8mIHVubGlua2VkSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gbGFiZWwpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKHVubGlua2VkSW5mbyk7
CiAgICAgICAgIG5hdGl2ZUNvZGUgPSBsYWJlbDsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRo
KG5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbmF0aXZlQ29kZTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBuYXRpdmVDb2RlOwogI2VuZGlmCiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmRhdGFMb2NhdGlvbigpLCBz
dHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVk
c0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICBBU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkp
OwogICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsKLSAgICAgICAgRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUp
OworICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSW5saW5lQWNj
ZXNzVHlwZTogJyVzJyIsIG5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTI3OCw3ICsyNzgsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChT
CiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9u
TGFiZWwgdGFyZ2V0KQordm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gdGFyZ2V0KQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI5MCw3ICsyOTAs
NyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAgICAgUkVMRUFT
RV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCB0YXJnZXQpOwogCi0gICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRh
ZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFu
dCBqdW1wIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQpOwogICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJl
U3R1YkluZm8mLCBKU0FycmF5Kik7CiAgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgdm9pZCByZXdpcmVT
dHViQXNKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0
YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVs
IHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgYW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBs
YXRmb3Jtcy4gV2hlbiBhZGRpbmcgYSBuZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCShyZXZpc2lvbiAyMzA3
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBPZmZzZXRM
b2NhdGlvbiB7CiAgICAgICAgIGludDMyX3QgYnJhbmNoT2Zmc2V0OwogI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGN0aU9mZnNldDsKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+IGN0aU9mZnNldDsKICNlbmRpZgogICAgIH07CiAKQEAg
LTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8U3RyaW5nSW1wbD4sIE9mZnNldExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKICAg
ICAgICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0VGFibGU7CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY3RpRGVmYXVsdDsgLy8gRklYTUU6IGl0IHNob3VsZCBu
b3QgYmUgbmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMuCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZhdWx0OyAvLyBGSVhNRTogaXQgc2hvdWxkIG5vdCBiZSBu
ZWNlc3NhcnkgdG8gc3RvcmUgdGhpcy4KICNlbmRpZgogCiAgICAgICAgIGlubGluZSBpbnQzMl90
IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQp
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgY3RpRm9yVmFsdWUoU3Ry
aW5nSW1wbCogdmFsdWUpCisgICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRj
aFB0clRhZz4gY3RpRm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJs
ZS5lbmQoKTsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBs
b2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwogICAgICAgICBp
bnQzMl90IG1pbjsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9u
TGFiZWw+IGN0aU9mZnNldHM7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGN0aURlZmF1bHQ7
CisgICAgICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4+IGN0aU9m
ZnNldHM7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTU3dpdGNoUHRyVGFnPiBjdGlEZWZh
dWx0OwogI2VuZGlmCiAKICAgICAgICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZh
bHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOwpAQCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIGN0aU9mZnNldHMuZ3JvdyhicmFuY2hPZmZzZXRzLnNpemUoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlubGluZSBDb2RlTG9jYXRpb25MYWJlbCBj
dGlGb3JWYWx1ZShpbnQzMl90IHZhbHVlKQorICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNTd2l0Y2hQdHJUYWc+IGN0aUZvclZhbHVlKGludDMyX3QgdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICh2YWx1ZSA+PSBtaW4gJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlIC0gbWluKSA8IGN0aU9mZnNldHMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBj
dGlPZmZzZXRzW3ZhbHVlIC0gbWluXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMTQgKzUwLDE0IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1IKICAgICB2b2lkIHVubGluaygpCiAgICAgewogICAgICAgICBjYWxsZWUuY2xl
YXIoKTsKLSAgICAgICAgbWFjaGluZUNvZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKyAgICAgICAgbWFjaGluZUNvZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4oKTsKICAgICAgICAgaWYgKGlzT25MaXN0KCkpCiAgICAgICAgICAgICByZW1v
dmUoKTsKICAgICB9CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBsYXN0U2VlbkNhbGxlZTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbWFjaGluZUNvZGVUYXJnZXQ7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IG1hY2hpbmVDb2RlVGFyZ2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
OSwxMSArMTk5LDEwIEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQK
ICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmbV92bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgUHRy
VGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0
LT5jYWxsKHRhZyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25I
YW5kbGVyQ2FsbCA9IGppdC0+Y2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQtPmFk
ZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxs
LCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyLCB0YWcpKTsKKyAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAgICB9
CkBAIC01MzksNyArNTM4LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0Fj
Y2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0
aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAgICAgIEhh
bmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAgICAgICAg
ICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1h
a2VzaGlmdENhdGNoSGFuZGxlciwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgICAg
ICAgICAgaGFuZGxlclRvUmVnaXN0ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihtYWtlc2hpZnRDYXRjaEhhbmRsZXIpOwogICAgICAg
ICAgICAgICAgIGhhbmRsZXJUb1JlZ2lzdGVyLnN0YXJ0ID0gbmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZS5iaXRzKCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIuZW5kID0g
bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5iaXRzKCkgKyAxOwogICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+YXBwZW5kRXhjZXB0aW9uSGFuZGxlcihoYW5kbGVyVG9SZWdpc3Rlcik7CkBA
IC01NTksOCArNTU4LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vz
cwogICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwogICAgIH0K
IAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2Nh
dGlvbigpOwotICAgICAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBz
dWNjZXNzTGFiZWwgPSBzdHViSW5mby5kb25lTG9jYXRpb24oKTsKKwogICAgIGxpbmtCdWZmZXIu
bGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwogCiAgICAgbGlua0J1ZmZlci5saW5r
KGZhaWx1cmUsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKQEAgLTU2OCw4ICs1
NjcsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgaWYg
KFBvbHltb3JwaGljQWNjZXNzSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coRnVs
bENvZGVPcmlnaW4oY29kZUJsb2NrLCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjogR2VuZXJhdGlu
ZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0g
ICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlID0gRklOQUxJWkVfQ09E
RV9GT1IoCisgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJU
YWcsCiAgICAgICAgICIlcyIsIHRvQ1N0cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxv
Y2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNj
ZXNzTGFiZWwsICI6ICIsIGxpc3REdW1wKGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9l
c0NhbGxzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAh
PSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0KICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUpCisgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdChLaW5kIGtpbmQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHVi
Um91dGluZVB0clRhZz4gY29kZSkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICAgICAgLCBt
X2NvZGUoY29kZSkKICAgICB7CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CiAgICAgCiAgICAgYm9vbCBtYWRlTm9DaGFuZ2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kID09IE1hZGVOb0NoYW5nZXM7IH0KICAgICBib29sIGdhdmVV
cCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBHYXZlVXA7IH0KQEAgLTEyMyw3ICsxMjMsNyBA
QCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5kOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBtX2NvZGU7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBv
aW50U2V0JiwgU3RyaW5nRmlyZURldGFpbD4+IG1fd2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjksNyArMTY5LDcg
QEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAgICAgCiAg
ICAgc3RydWN0IHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7IC8vIFRoaXMgaXMg
ZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMsIG9yIHRo
ZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luJyBjYWNoZXMuCisgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBl
aXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhl
IGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4KICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKICAgICAgICAgdWludDMyX3QgaW5saW5lU2l6ZTsKICAg
ICAgICAgaW50MzJfdCBkZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb247CkBAIC0x
ODUsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9IHBhdGNoOwogCi0gICAgQ29k
ZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0
LmNhbGxBdE9mZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24p
OyB9Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2gu
c3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5pbmxpbmVTaXplKTsgfQotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVs
QXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Ci0gICAgQ29k
ZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wRm9ySW4oKQorICAgIENvZGVMb2NhdGlvbkNhbGw8
SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhDYWxsTG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5z
dGFydC5jYWxsQXRPZmZzZXQ8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2guZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQ8
SlNFbnRyeVB0clRhZz4ocGF0Y2guaW5saW5lU2l6ZSk7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4g
cGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhT
dGFydCk7IH0KKyAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJs
ZUp1bXBGb3JJbigpCiAgICAgeyAKICAgICAgICAgQVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6SW4pOwotICAgICAgICByZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOwor
ICAgICAgICByZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0PEpTSW50ZXJuYWxQdHJUYWc+
KDApOwogICAgIH0KIAogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncygpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjMwNzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFtdIChjb25zdCBD
YXRjaEVudHJ5cG9pbnREYXRhKiBpdGVtKSB7IHJldHVybiBpdGVtLT5ieXRlY29kZUluZGV4OyB9
KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB2b2lkKiBtYWNoaW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3Vt
ZW50Rm9ybWF0cykKKyAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4g
bWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1bWVudEZvcm1hdHMpCiAgICAg
ewogICAgICAgICBjYXRjaEVudHJ5cG9pbnRzLmFwcGVuZChDYXRjaEVudHJ5cG9pbnREYXRhIHsg
bWFjaGluZUNvZGUsICBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cyksIGJ5dGVjb2RlSW5kZXggfSk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1i
bGVyLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY1LDExICsxNjUsMTEgQEAg
dm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseShQcmludAogICAgICAgICBwcmVmaXhC
dWZmZXJbaSArIHByZWZpeExlbmd0aF0gPSAnICc7CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExl
bmd0aCArIGFtb3VudE9mTm9kZVdoaXRlU3BhY2VdID0gMDsKICAgICAKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcmV2aW91c0xhYmVsKTsKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbmQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY3VycmVudExh
YmVsKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gc3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KHByZXZpb3VzTGFiZWwpOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fzc2VtYmx5UHRyVGFnPiBlbmQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KGN1cnJlbnRMYWJlbCk7CiAgICAgcHJldmlv
dXNMYWJlbCA9IGN1cnJlbnRMYWJlbDsKLSAgICBBU1NFUlQoZW5kLmV4ZWN1dGFibGVBZGRyZXNz
PHVpbnRwdHJfdD4oKSA+PSBzdGFydC5leGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwot
ICAgIGRpc2Fzc2VtYmxlKHN0YXJ0LCBlbmQuZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90Pigp
IC0gc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3M8dWludHB0cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0
YSgpLCBvdXQpOworICAgIEFTU0VSVChlbmQuZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSA+PSBz
dGFydC5kYXRhTG9jYXRpb248dWludHB0cl90PigpKTsKKyAgICBkaXNhc3NlbWJsZShzdGFydCwg
ZW5kLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkgLSBzdGFydC5kYXRhTG9jYXRpb248dWludHB0
cl90PigpLCBwcmVmaXhCdWZmZXIuZGF0YSgpLCBvdXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUQ29kZTsKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsOSArODUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1
bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgUHRyVGFn
IG9zckV4aXRUaHVua1RhZyA9IHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSgpKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKG9z
ckV4aXRUaHVuay5yZXRhZ2dlZENvZGUob3NyRXhpdFRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykp
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
ID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gb3Ny
RXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhp
dFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+
b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBp
bmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVy
ZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTE2Miw4ICsxNjEsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgICAgIHBva2UoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwog
I2VuZGlmCi0gICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29y
ZChjYWxsKGNhbGxUYWcpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lLCBjYWxsVGFnKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1Jl
Y29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKIAogICAgICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9CkBAIC0xODIsOCArMTgwLDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICBwb2tlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAx
KTsKICNlbmRpZgotICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25Q
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtS
ZWNvcmQoY2FsbChjYWxsVGFnKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwg
Y2FsbFRhZykpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChP
cGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKSk7CiAKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7
CiAgICAgfQpAQCAtMjE3LDE1ICsyMTQsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgICAgICAKICAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAg
IFB0clRhZyBzd2l0Y2hUYWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7Ci0g
ICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hl
YWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKKyAgICAgICAg
dGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4o
bV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIHRh
YmxlLmN0aU9mZnNldHMuZ3Jvdyh0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAg
ICAgICAgdGFibGUuY3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBT
d2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3Rp
T2Zmc2V0c1tteUNhc2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxl
Lm1pbl0gPQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVh
ZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW215
Q2FzZS50YXJnZXQuYmxvY2stPmluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0y
NDgsOSArMjQ0LDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICBQdHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxl
UHRyVGFnLCAmdGFibGUpOwogCi0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwg
c3dpdGNoVGFnKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2st
PmluZGV4XSk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0
ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBmb3IgKGl0
ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAt
MjU5LDcgKzI1NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAg
ICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3RyaW5nSW1w
bCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAgICAg
ICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2Nr
SGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdLCBzd2l0Y2hUYWcpOworICAgICAgICAg
ICAgaXRlci0+dmFsdWUuY3RpT2Zmc2V0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNo
UHRyVGFnPihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMjc3LDUyICsyNzIsNTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucy5z
aXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX2luc1tp
XS5tX3N0dWJJbmZvOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVtcCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
SVRTdHViUm91dGluZVB0clRhZz4obV9pbnNbaV0ubV9qdW1wKTsKICAgICAgICAgaW5mby5wYXRj
aC5zdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25lKSk7CisgICAgICAgICAgICBzdGFy
dCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1fZG9u
ZSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVTaXplID49IDApOwogICAgICAgICBp
bmZvLnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXplOwogCiAgICAgICAgIGluZm8ucGF0Y2gu
ZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CisgICAgICAg
ICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5z
W2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSkpOwogCiAgICAgICAgIGluZm8ucGF0Y2gu
ZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgICAgICBz
dGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1faW5zW2ldLm1f
c2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCi0gICAgUHRyVGFnIGxp
bmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKCkpOwotICAgIGF1dG8gbGlua0NhbGxU
aHVuayA9IEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgYXV0byBsaW5r
Q2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9QdHJUYWc+KHZtKCktPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1
dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAq
cmVjb3JkLmluZm87CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxp
bmtDYWxsVGh1bmspOwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQu
c2xvd0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLmZhc3RDYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0VudHJ5UHRyVGFnPihyZWNvcmQuc2xvd0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
PihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4ocmVjb3JkLmZhc3RDYWxsKSk7CiAgICAgfQogICAg
IAogICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMp
IHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBs
aW5rQnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQu
c2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNv
cmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgp
KTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xv
d1BhdGgsIE5lYXJDb2RlUHRyVGFnKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKHJlY29yZC5jYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPigpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KHJlY29yZC5zbG93UGF0aCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihyZWNvcmQuY2FsbCkpOwogICAgIH0KICAgICAK
ICAgICBmb3IgKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWls
Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocmVjb3JkLnBhdGNoYWJsZUp1bXApLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHJlY29yZC5zbG93UGF0aCwgTmVhckNvZGVQdHJUYWcpLAotICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLmNhbGwpKTsKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCks
CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4ocmVjb3Jk
LnNsb3dQYXRoKSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
RW50cnlQdHJUYWc+KHJlY29yZC5jYWxsKSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpOwotICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWco
REZHT1NSRXhpdFB0clRhZywgdm0oKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0g
Q29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtU
YWcsIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewpAQCAtMzMyLDggKzMyNSw4IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgfQogICAg
ICAgICBpZiAoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAg
IG1faml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVu
dCgKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2Vt
ZW50U291cmNlLCBOZWFyQ29kZVB0clRhZyksCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0aW9uLCBOZWFyQ29kZVB0clRhZykp
KTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oaW5mby5tX3JlcGxhY2VtZW50U291cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8T1NSRXhpdFB0clRhZz4oaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24p
KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zNDEsOSArMzM0LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBBU1NFUlQobV9leGl0U2l0
ZUxhYmVscy5zaXplKCkgPT0gbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4aXRTaXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBWZWN0b3I8TGFiZWw+JiBsYWJlbHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwot
ICAgICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBhZGRyZXNzZXM7CisgICAgICAgICAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytq
KQotICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9m
KGxhYmVsc1tqXSwgREZHT1NSRXhpdFB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4obGFiZWxzW2pdKSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9u
KCktPmFkZE9TUkV4aXRTaXRlKGFkZHJlc3Nlcyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAg
LTM2MCw3ICszNTMsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
CiAgICAgICAgICAgICAvLyBpLmUsIHdlIGV4cGxpY2l0bHkgZW1pdHRlZCBhbiBleGNlcHRpb25D
aGVjayB0aGF0IHdlIGtub3cgd2lsbCBiZSBjYXVnaHQgaW4gdGhpcyBtYWNoaW5lIGZyYW1lLgog
ICAgICAgICAgICAgLy8gSWYgdGhpcyAqaXMgc2V0KiwgaXQgbWVhbnMgd2Ugd2lsbCBiZSBsYW5k
aW5nIGF0IHRoaXMgY29kZSBsb2NhdGlvbiBmcm9tIGdlbmVyaWNVbndpbmQgZnJvbSBhbgogICAg
ICAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBpbiBhIGNoaWxkIGNhbGwgZnJhbWUuCi0gICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYXRjaExhYmVsID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0aW9uLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IGNhdGNoTGFiZWwgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4oaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24pOwogICAgICAgICAgICAgSGFuZGxlcklu
Zm8gbmV3RXhjZXB0aW9uSGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0
ZXNbaV0uYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZSA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNp
dGVJbmRleDsKICAgICAgICAgICAgIG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0
ZS5iaXRzKCk7CkBAIC01MzksMTEgKzUzMiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
RnVuY3Rpb24oKQogICAgIG1faml0Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2RlQmxvY2so
KS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKIAotICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlG
aXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgp
KSwgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1
cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1
cEdlbmVyYXRvcikuY29kZSgpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5s
b2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgQ29kZVB0clRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwogCiAgICAgbV9ncmFwaC5tX3BsYW4u
ZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxKSVRGaW5hbGl6ZXI+KAogICAgICAgICBtX2dy
YXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZl
ciksIHdpdGhBcml0eUNoZWNrKTsKQEAgLTU4Myw3ICs1NzYsNyBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpub3RpY2VDYXRjaEVudHJ5cG9pbnQoCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9j
ay5pc0NhdGNoRW50cnlwb2ludCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzaWNCbG9jay5pbnRl
cnNlY3Rpb25PZkNGQUhhc1Zpc2l0ZWQpOyAvLyBBbiBlbnRyeXBvaW50IGlzIHJlYWNoYWJsZSBi
eSBkZWZpbml0aW9uLgotICAgIG1faml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2lu
dChiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtCdWZmZXIubG9jYXRpb25PZihibG9ja0hl
YWQsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUo
YXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRy
eXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRz
KSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJh
c2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhp
dDsKIC8vIEV2ZXJ5IENhbGxMaW5rUmVjb3JkIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBj
YWxsIGluc3RydWN0aW9uICYgdGhlIGZ1bmN0aW9uCiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxp
bmtlZCB0by4KIHN0cnVjdCBDYWxsTGlua1JlY29yZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbExp
bmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2Z1
bmN0aW9uKGZ1bmN0aW9uKQogICAgIHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBtX2NhbGw7Ci0gICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKKyAgICBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rpb247CiB9OwogCiBzdHJ1Y3QgSW5SZWNvcmQgewpAQCAt
MTU2LDEwICsxNTYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0
IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlv
blB0clRhZykKKyAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICB7Ci0gICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2Fs
bCh0YWcpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNh
bGwsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CisgICAgICAgIENhbGwgZnVuY3Rpb25D
YWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
TGlua1JlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRh
Zz4oKSkpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMx
MCw2ICszMTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdl
dFRvQ2hlY2spCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGZhc3RDYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7CisgICAgICAgICAgICBB
U1NFUlQoc2xvd0NhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgQ2FsbCBmYXN0Q2FsbDsKQEAgLTMyNCw2ICszMjYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZv
KQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVh
cikpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDYWxsIGNhbGw7CkBAIC0zMzgsNiAr
MzQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCiAgICAg
ICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNhbGwu
aXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAko
cmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYg
cGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+
IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK0pJVEZp
bmFsaXplcjo6SklURmluYWxpemVyKFBsYW4mIHBsYW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUs
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCiAgICAgOiBGaW5hbGl6ZXIocGxh
bikKICAgICAsIG1faml0Q29kZShXVEZNb3ZlKGppdENvZGUpKQogICAgICwgbV9saW5rQnVmZmVy
KFdURk1vdmUobGlua0J1ZmZlcikpCkBAIC01Niw3ICs1Niw3IEBAIHNpemVfdCBKSVRGaW5hbGl6
ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtC
dWZmZXIsIENvZGVQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEo
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYoY29kZVJlZiwgY29kZVJlZi5jb2RlKCkpOwogICAgIAogICAgIG1fcGxhbi5jb2Rl
QmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CkBAIC03MCw3ICs3MCw3IEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZigKLSAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZl
ciwgQ29kZVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwK
KyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywg
IkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9w
bGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKICAgICAgICAgbV93aXRo
QXJpdHlDaGVjayk7CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUu
Y29weVJlZigpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
RmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklURmluYWxpemVyIDogcHVibGlj
IEZpbmFsaXplciB7CiBwdWJsaWM6Ci0gICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29k
ZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpFbXB0eVZhbHVlKSk7CisgICAgSklURmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4m
Jiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVl
KSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CiAgICAgCiAgICAgc2l6ZV90IGNvZGVT
aXplKCkgb3ZlcnJpZGU7CkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVm
PEpJVENvZGU+IG1faml0Q29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbV9s
aW5rQnVmZmVyOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX3dpdGhBcml0eUNoZWNrOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNr
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCShyZXZpc2lvbiAyMzA3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIGNsYXNzIEp1bXBSZXBsYWNlbWVudCB7CiBwdWJsaWM6Ci0gICAgSnVtcFJlcGxhY2VtZW50
KENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24p
CisgICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IHNvdXJjZSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24pCiAg
ICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCiAgICAgewpAQCAtNDQsOCArNDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogZGF0YUxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZGF0YUxvY2F0aW9uKCk7IH0KIAogcHJp
dmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3NvdXJjZTsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBtX2Rlc3RpbmF0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IG1fc291cmNlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJUYWc+IG1fZGVz
dGluYXRpb247CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDcsNyArMjQ3LDcg
QEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiB9OwogCiBzdHJ1Y3QgQ2FsbERPTUdldHRlckRh
dGEgewotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUFjY2Vzc29yR2V0dGVy
IHsgbnVsbHB0ciB9OworICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CiAgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51
bGxwdHIgfTsKICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVs
bHB0ciB9OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgeyAwIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjMwNzQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0Yo
IiAgICBPU1IgdXNpbmcgdGFyZ2V0IFBDICVwLlxuIiwgdGFyZ2V0UEMpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKHRhcmdldFBDKTsKLSAgICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEp
ID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBDb2RlUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFn
PihleGVjKSk7CisgICAgKmJpdHdpc2VfY2FzdDx2b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHJldGFn
Q29kZVB0cih0YXJnZXRQQywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhl
YykpOwogCiAgICAgUmVnaXN0ZXIqIHBpdm90ID0gc2NyYXRjaCArIDIgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVyczsKICAgICAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAK
LXZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsgCiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKQEAg
LTczLDcgKzc0LDcgQEAgaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSQog
c3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewogICAgIC8vIFdlIHVzZSB0aGlzIHdoZW4gZG9p
bmcgT1NSIGVudHJ5IGF0IGNhdGNoLiBXZSBwcm92ZSB0aGUgYXJndW1lbnRzCiAgICAgLy8gYXJl
IG9mIHRoZSBleHBlY3RlZCB0eXBlIGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgot
ICAgIHZvaWQqIG1hY2hpbmVDb2RlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZTsKICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFy
Z3VtZW50Rm9ybWF0czsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKQEAgLTgzLDkg
Kzg0LDkgQEAgc3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewogdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogCiAv
LyBJZiBudWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51
bGwsIGl0J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi12b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbHNl
Ci1pbmxpbmUgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVu
c2lnbmVkKSB7IHJldHVybiAwOyB9CitpbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDExICszOTAsMTAgQEAgdm9pZCBPU1JFeGl0
OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjbwogCiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxv
Y2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAgICAgY29uc3Qg
SklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQu
bV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAg
ICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tGb3JF
eGl0LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgdm9pZCoganVt
cFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRhZyku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVl
IHJlY292ZXJpZXMuCiAgICAgICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwpA
QCAtNzkxLDcgKzc5MCw3IEBAIHN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29u
dGUKIAogI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKICAgICAgICAgICAgIHZvaWQqIG5ld0Vu
dHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQ
dHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOworICAgICAg
ICAgICAganVtcFRhcmdldCA9IHJldGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBKU0VudHJ5UHRyVGFn
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CiAjZW5kaWYKICAgICAgICAgICAg
IGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1w
VGFyZ2V0KTsKICAgICAgICAgfQpAQCAtODY2LDcgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChDb250ZXgKICAgICB9CiAKICAgICB2bS50b3BDYWxsRnJhbWUgPSBj
b250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7Ci0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRy
KGp1bXBUYXJnZXQsIENvZGVQdHJUYWcpOworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRPU1JF
eGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhp
dCYgZXhpdCkKQEAgLTkzMSw5ICs5MzAsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0
OjpnZXRQYXRjaGFiCiAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wKEFzc2VtYmxlckxh
YmVsKG1fcGF0Y2hhYmxlQ29kZU9mZnNldCkpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wIE9TUkV4
aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2spIGNvbnN0
CitDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlv
bkZvclJlcGF0Y2goQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IENvZGVMb2NhdGlvbkp1bXAoZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRhdGFBZGRyZXNzQXRP
ZmZzZXQobV9wYXRjaGFibGVDb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1
bXA8SlNJbnRlcm5hbFB0clRhZz4odGFnQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPihkZmdDb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGF0YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZz
ZXQpKSk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikKQEAgLTk5NSwxOSArOTk0LDE4IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1
bWVudHMoQ0NhbGwKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCksIGRlY2x0eXBlKG9wZXJh
dGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpPjo6dmFsdWUsICJXZSBhc3N1bWUg
dGhlc2UgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIGJlbG93LiIpOwogICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1l
bnRzRHVyaW5nRXhpdCk+KAogICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJh
dGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25DcmVhdGVEaXJl
Y3RBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OgotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0LCB0
YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhZyk7CisgICAg
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAg
ICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKICAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3Vt
ZW50cy5hZGQoaWQsIG9wZXJhbmQpOwpAQCAtMTA0Niw3ICsxMDQ0LDYgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeAogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRl
eCAhPSBVSU5UX01BWCkKICAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZygpLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKIAotICAg
IFB0clRhZyBleGl0VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICB7CiAg
ICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKIApAQCAtMTA3NywxNCArMTA3NCwx
NCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29k
ZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHko
KSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQo
KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLCBleGl0VGFnLAorICAgICAgICAgICAgcGF0Y2hC
dWZmZXIsIE9TUkV4aXRQdHJUYWcsCiAgICAgICAgICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMs
ICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAg
ICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5k
YXRhKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29u
dGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUucmV0YWdnZWRDb2RlKGV4aXRUYWcsIE5lYXJDb2RlUHRy
VGFnKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlv
bkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4o
ZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAKICAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9
IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1
LDkgKzE0NSw5IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBz
dGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKICAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYp
OwogCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQ5ODI0ND4uCiAgICAgdW5zaWdu
ZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0IHsgMCB9OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBtX2NvZGU7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+
IG1fY29kZTsKIAogICAgIFJlZlB0cjxPU1JFeGl0U3RhdGU+IGV4aXRTdGF0ZTsKICAgICAKQEAg
LTE1OCw3ICsxNTgsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAK
ICAgICB2b2lkIHNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXApOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRB
c0p1bXAoKSBjb25zdDsKLSAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0
Y2goQ29kZUJsb2NrKikgY29uc3Q7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPiBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwogICAgIHZvaWQg
Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYpOwogCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDkgKzEwOSw4IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVy
YXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHRyaWdnZXJSZW9wdGltaXphdGlvbk5v
dywgdGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIHRhZyk7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRyaWdnZXJSZW9wdGltaXphdGlv
bk5vdykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25l
QWRqdXN0aW5nID0gaml0Lmp1bXAoKTsKICAgICAKICAgICB0b29GZXdGYWlscy5saW5rKCZqaXQp
OwpAQCAtMTg4LDcgKzE4Nyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhl
bHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAgICAgICAgICAg
ICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBAIHZv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNh
bGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8pOwogCi0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRp
b24oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBz
dHViSW5mby0+ZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yNzYsOSArMjc1LDggQEAg
c3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwogI2VuZGlmCiAKICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4ob3du
ZXIpOwotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyKG9wZXJhdGlvbk9TUldyaXRlQmFycmllciwgdGFnKSksIHNjcmF0Y2gpOwot
ICAgIGppdC5jYWxsKHNjcmF0Y2gsIHRhZyk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gpOworICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJh
dGlvblB0clRhZyk7CiAKICNpZiBDUFUoWDg2KQogICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yodm9pZCopICogNCksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0zMTksMTIgKzMxNywxMCBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0
ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrRm9yRXhpdCA9PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24o
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uID0gY29kZUJs
b2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9u
ID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKLSAgICBQdHJUYWcg
bG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZVB0clRhZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWco
REZHT1NSRXhpdFB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBjb2RlTG9jYXRpb24ucmV0YWdnZWQobG9jYXRpb25UYWcsIGV4aXRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGlu
ZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCkBAIC0zMzIs
NyArMzI4LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAg
IH0KICAgICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVt
cFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwg
ZXhpdFRhZyk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NDQsNyArMzA0NCw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihq
aXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxu
Iik7CiAgICAgICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5
KGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFt
SW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2Nr
LCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBDb2RlUHRyVGFnLCBi
aXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldGFn
Q29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRh
Zz4oZXhlYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE2Niw3ICsz
MTY2LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAg
ICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0ZWNv
ZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAgIGlmICghYWRkcmVzcykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0
clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOworICAgIHJldHVybiByZXRhZ0NvZGVQ
dHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4
ZWMpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTIgKzE2MiwxMSBAQCBjbGFzcyBDYWxsUmVzdWx0QW5k
QXJndW1lbnRzU2xvd1BhdGhHZW5lCiAgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
PEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKICAgICBDYWxs
UmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNh
bGxUYWcsCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0
aW9uVHlwZSBmdW5jdGlvbiwKICAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1bHQs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
PEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAogICAgICAgICAgICAgZnJvbSwg
aml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXF1aXJlbWVudCwgcmVzdWx0KQogICAgICAgICAs
IG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCi0gICAg
ICAgICwgbV9jYWxsVGFnKGNhbGxUYWcpCiAgICAgewogICAgIH0KIApAQCAtMTc2LDcgKzE3NSw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHVucGFja0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZlSklU
KiBqaXQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8QXJndW1lbnRzSW5kZXguLi4+KQogICAgIHsKICAg
ICAgICAgdGhpcy0+c2V0VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNh
bGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgbV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRo
aXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikp
OworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1
bmN0aW9uLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRz
SW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOwogICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwog
ICAgIH0KIApAQCAtMTg2LDM2ICsxODUsMTYgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0
ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3VtZW50czsKLSAgICBQdHJUYWcgbV9jYWxsVGFn
OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogaW5saW5lIHN0
ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAotICAgIEp1bXBU
eXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRy
VGFnIGNhbGxUYWcsCi0gICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9u
Q2hlY2tSZXF1aXJlbWVudCByZXF1aXJlbWVudCwKLSAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
UmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlw
ZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRzLi4uPj4oCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rp
b24sIGNhbGxUYWcsIHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4u
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotaW5saW5lIHN0
ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAogICAgIEp1bXBU
eXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAg
ICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50
IHJlcXVpcmVtZW50LAogICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVu
dHNTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBB
cmd1bWVudHMuLi4+PigKLSAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRy
VGFnLCBzcGlsbE1vZGUsIHJlcXVpcmVtZW50LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLWlubGluZSBzdGQ6OnVuaXF1
ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKLSAgICBKdW1wVHlwZSBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIFB0clRhZyBjYWxs
VGFnLAotICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotewot
ICAgIHJldHVybiBzbG93UGF0aENhbGwoCi0gICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNh
bGxUYWcsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRl
ZCwgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBz
cGlsbE1vZGUsIHJlcXVpcmVtZW50LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJl
c3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KQEAgLTIyNCw3ICsyMDMsNyBAQCBpbmxp
bmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yCiAgICAgUmVzdWx0VHlwZSByZXN1
bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgK
LSAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBOZWVkVG9TcGls
bCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCwgYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2Vw
dGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5
cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHVuc2lnbmVkIG51bWJlck9mQXNzaWdubWVudHM+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogCiAgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRo
Q2FsbCgKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24odHlwZSksIEdldFByb3BlcnR5UHRyVGFnLAorICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAg
ICAgc3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAg
ICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChp
ZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaAogICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAKICAgICBhdXRvIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAot
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
LCBHZXRQcm9wZXJ0eVB0clRhZywKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAgICAgRG9udFNwaWxsLCBFeGNlcHRpb25DaGVj
a1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKICAgICAgICAgcmVzdWx0R1BSLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
CiAgICAgCkBAIC0yNTA2LDcgKzI1MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgR2V0UHJvcGVydHlQ
dHJUYWcsCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0
QnlWYWxPYmplY3RJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjU2Miw3ICsyNTYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
IEdldFByb3BlcnR5UHRyVGFnLAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
Z3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2MTQsNyArMjYxNCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAKICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVj
dEludCwgR2V0UHJvcGVydHlQdHJUYWcsCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjc3Myw3ICsyNzczLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgID8gKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdCkKICAgICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0
cmljdCksCi0gICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKQEAgLTI4NTcsNyArMjg1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFs
RGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAg
ICAgICAgICAgICA6IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QpLAotICAgICAgICAgICAgICAgICAgICBQdXRQcm9w
ZXJ0eVB0clRhZywgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwor
ICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVl
UmVnKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MzIsOCArMzkzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMo
Tm9kZSoKIAogICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wg
Z2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmFkZElDR2Vu
ZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKLSAgICBQdHJUYWcgbWF0aElDVGFn
ID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKLQogICAgIGlm
IChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVyYXRpb25TdGF0
ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKIApAQCAtMzk2Miw5ICszOTYwLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
LSAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoaW5n
RnVuY3Rpb24pLCBtYXRoSUNUYWcsIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgICAgIGFkZElDR2Vu
ZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxK
X0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGlu
bmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFn
LCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CisgICAgICAgICAg
ICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
bm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJp
Z2h0UmVncyk7CiAKICAgICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAg
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC0zOTkzLDcgKzM5OTEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqCiAgICAgICAgIH0KIAogICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0K
IApAQCAtNDYzOCw4ICs0NjM2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJ
QyhOb2RlKgogCiAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgYm9v
bCBnZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKG1faml0LCAqaWNHZW5l
cmF0aW9uU3RhdGUsIHNob3VsZEVtaXRQcm9maWxpbmcpOwotICAgIFB0clRhZyBtYXRoSUNUYWcg
PSBwdHJUYWcoTWF0aElDUHRyVGFnLCBtYXRoSUMtPmluc3RydWN0aW9uKCkpOwotCiAgICAgaWYg
KGdlbmVyYXRlZElubGluZSkgewogICAgICAgICBBU1NFUlQoIWljR2VuZXJhdGlvblN0YXRlLT5z
bG93UGF0aEp1bXBzLmVtcHR5KCkpOwogCkBAIC00NjU4LDkgKzQ2NTQsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChz
YXZlUGxhbnMpOwogCiAgICAgICAgICAgICBpZiAoaWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNs
b3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+
KHJlcGF0Y2hpbmdGdW5jdGlvbiksIG1hdGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRl
LT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlj
R2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAg
ICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsKIAogICAgICAgICAg
ICAgc2lsZW50RmlsbChzYXZlUGxhbnMpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKQEAgLTQ2ODEsNyArNDY3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVN
YXRoSUMoTm9kZSoKICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1h
dGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihu
b25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGNoaWxkUmVncyk7CiAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgfQogCkBAIC05MDAwLDYgKzg5OTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2RlCiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGFz
c2VydElzVGFnZ2VkV2l0aChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaWduYXR1cmUtPnVuc2Fm
ZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNo
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAgIGNhc2UgMToKQEAgLTkwMjQsNyAr
OTAyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUKIHsKICAg
ICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0ID0gbm9kZS0+Y2FsbERPTUdl
dHRlckRhdGEoKS0+c25pcHBldDsKICAgICBpZiAoIXNuaXBwZXQpIHsKLSAgICAgICAgYXV0byog
Z2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7
CisgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2Fs
bERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTkwMzUsNyArOTAzMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHM8Sl9KSVRPcGVyYXRpb25fRUpJPihDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVy
TnVtYmVyKSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAmbV9qaXQudm0oKS0+dG9wQ2FsbEZyYW1lKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3Jl
Q29kZU9yaWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBtX2pp
dC5hcHBlbmRDYWxsKGdldHRlcik7CisgICAgICAgIG1faml0LmFwcGVuZENhbGwoZ2V0dGVyLnJl
dGFnZ2VkPENGdW5jdGlvblB0clRhZz4oKSk7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhy
ZXN1bHRSZWdzKTsKIAogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtMTAyMjIs
OCArMTAyMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIG1faml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0Y2gp
OwogI2VuZGlmCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRh
YmxlKTsKLSAgICBtX2ppdC5qdW1wKHNjcmF0Y2gsIHRhZyk7CisgICAgbV9qaXQuanVtcChzY3Jh
dGNoLCBKU1N3aXRjaFB0clRhZyk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsK
IH0KIApAQCAtMTAyNDksOCArMTAyNDUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tKE5vZGUqCiAKICAgICAgICAgdmFsdWUudXNlKCk7CiAKLSAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiB0YWJsZSA9IG1faml0LmNvZGVCbG9jaygpLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS0+
c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFi
bGVQdHJUYWcsICZ0YWJsZSk7CiAgICAgICAgIGF1dG8gbm90SW50MzIgPSBtX2ppdC5icmFuY2hJ
Zk5vdEludDMyKHZhbHVlUmVncyk7CiAgICAgICAgIGVtaXRTd2l0Y2hJbnRKdW1wKGRhdGEsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAgICAgbm90SW50
MzIubGluaygmbV9qaXQpOwpAQCAtMTAyNTksNyArMTAyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5z
d2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0g
ICAgICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgdGFnKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3Jh
dGNoLCBKU1N3aXRjaFB0clRhZyk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNTE2LDE2ICsx
MDUxMCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAg
ICAgIH0KICAgICAgICAgdG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9Ci0g
ICAgCi0gICAgYXV0byogY29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisKICAgICBpZiAo
IWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFy
eVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0
YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxl
SW5kZXgpOwotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAm
dGFibGUpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9u
KAogICAgICAgICAgICAgb3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIHN0YXRpY19jYXN0
PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRleCksIHN0cmluZyk7CiAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOworICAg
ICAgICBtX2ppdC5qdW1wKHN0cmluZywgSlNTd2l0Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtMTA1NTgsMTUgKzEwNTQ5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICBlbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJz
ZSgKICAgICAgICAgZGF0YSwgY2FzZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgc3RyaW5nLCBsZW5n
dGhHUFIsIHRlbXBHUFIsIDAsIGZhbHNlKTsKICAgICAKLSAgICBTdHJpbmdKdW1wVGFibGUmIHRh
YmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJ
bmRleCk7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxl
KTsKLQogICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoc3RyaW5nKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywg
c3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJp
bmcpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwotICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOworICAgIG1faml0Lmp1bXAoc3Ry
aW5nLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0
Y2hTdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKQEAgLTEyNzEzLDcgKzEyNzAx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcgogICAgIH0KICAg
ICB9CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgSGFzUHJvcGVydHlQdHJUYWcs
IHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIsIHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGUt
PmludGVybmFsTWV0aG9kVHlwZSgpKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50
LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2Rl
LT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKIAogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEyNzgxLDcgKzEyNzY5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYQogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAK
LSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsQ2VsbCwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFJlZ3MsIGJhc2VH
UFIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHByb3BlcnR5R1BSKSkpOworICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9w
ZXJ0eUdQUikpKTsKIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAjZW5k
aWYKQEAgLTEyODg5LDcgKzEyODc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlTwogICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKIAog
ICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhp
cywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgUHV0UHJvcGVydHlQdHJUYWcsIE5vUmVzdWx0LCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAog
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChp
ZGVudGlmaWVyTnVtYmVyKSk7CiAKICAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGgu
Z2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsMzAgKzkzMSwxMCBAQCBw
dWJsaWM6CiAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgRnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KLSAgICBjYWxs
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdU
eXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgdGFnLCByZXN1bHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFJlZ1R5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+Ci0gICAgc3RkOjplbmFibGVfaWZfdDwKLSAgICAgICAgRnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwKLSAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBj
YWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBSZXN1bHRSZWdUeXBlIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHJlc3VsdCwgYXJncy4uLik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4u
LiBBcmdzPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0Ci0gICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBO
b1Jlc3VsdFRhZz46OnZhbHVlLAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVy
YXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZyBhcmcsIEFyZ3Mu
Li4gYXJncykKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5
cGU+KGFyZywgYXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwg
dGFnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZSBBcmcsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05NjQsMTcgKzk0NCw4IEBAIHB1YmxpYzoKICAg
ICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBBcmcgYXJnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgYXJnLCBhcmdzLi4uKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxP
cGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIE5vUmVzdWx0VGFn
LCBBcmdzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9u
LCB0YWcpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmcs
IGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CkBAIC05ODMsMTcgKzk1NCw4IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbD4KICAg
ICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJn
cy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBDRnVuY3Rpb25QdHJUYWcsIE5vUmVzdWx0LCBhcmdzLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAg
ICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAotICAgIEpJVENv
bXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFB0clRhZyB0YWcpCi0gICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRp
b25UeXBlPigpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wZXJhdGlvblR5cGU+CkBAIC0xMDAyLDcgKzk2NCw4IEBAIHB1YmxpYzoKICAg
ICBKSVRDb21waWxlcjo6Q2FsbD4KICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBD
RnVuY3Rpb25QdHJUYWcpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25U
eXBlPigpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAog
I3VuZGVmIEZJUlNUX0FSR1VNRU5UX1RZUEUKQEAgLTEwMzksNjIgKzEwMDIsNTYgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywg
b3B0aW9uYWxseSBzZXR0aW5nIHJlc3VsdHMsIGFuZCBvcHRpb25hbGx5IHJvbGxpbmcgYmFjayB0
aGUgY2FsbCBmcmFtZSBvbiBhbiBleGNlcHRpb24uCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlv
blB0clRhZykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9y
RXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJy
ZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENh
bGwoZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewog
ICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAg
ICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25Q
dHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb25TZXRSZXN1bHQoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oZnVuY3Rpb24pOwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJ
bnZhbGlkR1BSUmVnKSAmJiAocmVzdWx0ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKSkKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRD
YWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJS
ZWcgcmVzdWx0KQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0
KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVu
Y3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxs
KGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxT
ZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9u
UHRyVGFnLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcg
cmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRD
YWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKICAgICB7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcpOworICAgICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0
LnNldHVwUmVzdWx0cyhyZXN1bHQxLCByZXN1bHQyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rpb25Q
dHJUYWcsIHJlc3VsdDEsIHJlc3VsdDIpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFn
LCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHJl
c3VsdFJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1
bHQoZnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1
bHRSZWdzKTsKLSAgICB9CisKICNpZiBDUFUoWDg2KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFw
cGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcs
IEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVz
dWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwo
ZnVuY3Rpb24sIHRhZyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAg
ICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5mc3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3VsdCk7CkBAIC0xMTAyLDI2ICsxMDU5LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2VsaWYgQ1BVKEFSTSkgJiYg
IUNQVShBUk1fSEFSREZQKQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAg
ICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7
CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkudm1vdihyZXN1bHQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZWxzZSAv
LyBDUFUoWDg2XzY0KSB8fCAoQ1BVKEFSTSkgJiYgQ1BVKEFSTV9IQVJERlApKSB8fCBDUFUoQVJN
NjQpIHx8IENQVShNSVBTKQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAg
ICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7
CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQu
bW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQogI2VuZGlmCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCBDRnVuY3Rp
b25QdHJUYWcsIHJlc3VsdCk7Ci0gICAgfQogCiAgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29t
cGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBC
YXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1h
Y3JvQXNzZW1ibGVyIGppdDsKICAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQs
IHZtKTsKLSAgICBQdHJUYWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJU
YWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgb3NyRXhpdFRodW5rVGFn
LCAiREZHIE9TUiBleGl0IHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogCkBAIC04
Myw4ICs4Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAg
ICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICNlbmRpZgogCi0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9u
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVu
Y3Rpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDApKTsKQEAgLTEwMSwxNyArOTksMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9zckV4aXRHZW5lcmF0aW9uVAogI2VuZGlmCiAgICAgfQogCi0gICAgaml0Lmp1bXAoTWFjcm9B
c3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBw
dHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pKTsKKyAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQ
dHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRy
KE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0LCBjYWxsVGFnKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oT1NSRXhpdDo6Y29t
cGlsZU9TUkV4aXQpKTsKIAotICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZH
T1NSRXhpdFB0clRhZywgdm0pOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBvc3JFeGl0VGh1bmtUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBP
U1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQXNzZW1i
bHlIZWxwZXJzIGppdChudWxscHRyKTsKIApAQCAtMTQ5LDkgKzE0Niw4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXIKIAogICAgIGppdC5qdW1wKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICBQdHJUYWcgb3NyRW50cnlU
aHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBvc3JFbnRyeVRodW5rVGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkRGRyBPU1IgZW50cnkgdGh1bmsiKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAyMzA3NDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
c3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxMSArMzMsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9E
aXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlz
YXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYg
Y29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91
dCkKIHsKICAgICBBNjRET3Bjb2RlIGFybTY0T3Bjb2RlOwogCi0gICAgdWludDMyX3QqIGN1cnJl
bnRQQyA9IHJlbW92ZUNvZGVQdHJUYWc8dWludDMyX3QqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgIHVpbnQzMl90KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0
YWJsZUFkZHJlc3M8dWludDMyX3QqPigpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwog
CiAgICAgd2hpbGUgKGJ5dGVDb3VudCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjdEaXNh
c3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0m
IG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJl
Zml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIEFSTXY3RE9wY29kZSBhcm1PcGNvZGU7CiAK
LSAgICB1aW50MTZfdCogY3VycmVudFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpJn4x
KTsKKyAgICB1aW50MTZfdCogY3VycmVudFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSkmfjEpOwogICAgIHVpbnQxNl90KiBlbmRQQyA9IGN1cnJlbnRQQyArIChzaXplIC8g
c2l6ZW9mKHVpbnQxNl90KSk7CiAKICAgICB3aGlsZSAoY3VycmVudFBDIDwgZW5kUEMpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2Vt
Ymxlci5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEyICszNywx
MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJiBvdXQpCit2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgaWYgKHRyeVRvRGlzYXNzZW1i
bGUoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgb3V0LnByaW50ZigiJXNkaXNhc3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4u
LiVwXG4iLCBwcmVmaXgsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzczxjaGFyKj4oKSArIHNpemUpOworICAgIG91dC5wcmludGYoIiVzZGlzYXNz
ZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4LCBjb2RlUHRy
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzPGNoYXIqPigpICsgc2l6ZSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgY2hhciogaGVhZGVyIHsgbnVsbHB0ciB9Owot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVJlZjsKICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsK
ICAgICBjb25zdCBjaGFyKiBwcmVmaXggeyBudWxscHRyIH07CiB9OwpAQCAtMTI4LDcgKzEyOCw3
IEBAIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciYgYXN5bmNocm9ub3VzRGkKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29u
c3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYs
IHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCisgICAgY29uc3QgQ1N0cmluZyYgaGVh
ZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2Rl
UmVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4KQogewogICAgIHN0ZDo6dW5pcXVl
X3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERpc2Fzc2VtYmx5
VGFzaz4oKTsKICAgICB0YXNrLT5oZWFkZXIgPSBzdHJkdXAoaGVhZGVyLmRhdGEoKSk7IC8vIFl1
Y2shIFdlIG5lZWQgdGhpcyBiZWNhdXNlIENTdHJpbmcgZG9lcyByYWN5IHJlZmNvdW50aW5nLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNz
ZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE5ICsy
NiwyMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorI2lu
Y2x1ZGUgIlB0clRhZy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwotY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOwordGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7
Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAogI2lmIEVO
QUJMRShESVNBU1NFTUJMRVIpCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7
Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fz
c2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYp
OwogI2Vsc2UKLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQoraW5saW5lIGJv
b2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1i
bHlQdHJUYWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTQ2LDEyICs0NywxMiBAQCBpbmxpbmUgYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlKGNvbnN0IE1hY3JvCiAKIC8vIFByaW50cyBlaXRoZXIgdGhlIGRpc2Fzc2VtYmx5LCBv
ciBhIGxpbmUgb2YgdGV4dCBpbmRpY2F0aW5nIHRoYXQgZGlzYXNzZW1ibHkgZmFpbGVkIGFuZAog
Ly8gdGhlIHJhbmdlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzZXMuCi12b2lkIGRpc2Fzc2VtYmxl
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4
LCBQcmludFN0cmVhbSYgb3V0KTsKK3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4
LCBQcmludFN0cmVhbSYgb3V0KTsKIAogLy8gQXN5bmNocm9ub3VzIGRpc2Fzc2VtYmx5LiBUaGlz
IGhhcHBlbnMgb24gYW5vdGhlciB0aHJlYWQsIGFuZCBjYWxscyB0aGUgcHJvdmlkZWQKIC8vIGNh
bGxiYWNrIHdoZW4gdGhlIGRpc2Fzc2VtYmx5IGlzIGRvbmUuCiB2b2lkIGRpc2Fzc2VtYmxlQXN5
bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYmLCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgY29uc3QgQ1N0
cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RGlzYXNzZW1ibHlQdHJU
YWc+Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgpOwogCiBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJseSgpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJs
ZXIuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNz
ZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxNyAr
MzMsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhV
RGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2Vt
YmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJU
YWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVh
bSYgb3V0KQogewogICAgIHVkX3QgZGlzYXNzZW1ibGVyOwogICAgIHVkX2luaXQoJmRpc2Fzc2Vt
Ymxlcik7Ci0gICAgdWRfc2V0X2lucHV0X2J1ZmZlcigmZGlzYXNzZW1ibGVyLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzPHVuc2lnbmVkIGNoYXIqPigpLCBzaXplKTsKKyAgICB1ZF9zZXRfaW5w
dXRfYnVmZmVyKCZkaXNhc3NlbWJsZXIsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czx1bnNpZ25lZCBjaGFyKj4oKSwgc2l6ZSk7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICB1ZF9zZXRf
bW9kZSgmZGlzYXNzZW1ibGVyLCA2NCk7CiAjZWxzZQogICAgIHVkX3NldF9tb2RlKCZkaXNhc3Nl
bWJsZXIsIDMyKTsKICNlbmRpZgotICAgIHVkX3NldF9wYygmZGlzYXNzZW1ibGVyLCBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSk7CisgICAgdWRfc2V0X3BjKCZkaXNhc3Nl
bWJsZXIsIGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCkpOwog
ICAgIHVkX3NldF9zeW50YXgoJmRpc2Fzc2VtYmxlciwgVURfU1lOX0FUVCk7CiAgICAgCiAgICAg
dWludDY0X3QgY3VycmVudFBDID0gZGlzYXNzZW1ibGVyLnBjOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5o
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L1VEaXM4NkRpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDExICszMSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIFVTRShVRElTODYpCiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdp
dGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6
ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKK2Jvb2wgdHJ5VG9EaXNh
c3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsK
IAogI2Vsc2UgLy8gVVNFKFVESVM4NikKIAotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdp
dGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFy
KiwgUHJpbnRTdHJlYW0mKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5VG9EaXNh
c3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYsIHNpemVfdCwgY29uc3QgY2hhciosIFByaW50U3RyZWFtJikgeyByZXR1cm4gZmFs
c2U7IH0KIAogI2VuZGlmIC8vIFVTRShVRElTODYpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlz
YXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1i
bGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDEyICsxMzQsMTEgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50
OjpSZQogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcp
KTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7CiAKICAgICBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMTUzLDkg
KzE1Miw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBp
ZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQogICAgICAgICBjb2Rl
QmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmln
aW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwg
KnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCi0gICAgUHRyVGFnIGVudHJ5
VGFnID0gcHRyVGFnKEZUTENvZGVQdHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9u
T2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKDApLCBlbnRyeVRhZyk7Ci0gICAgc3RhdGUu
Z2VuZXJhdGVkRnVuY3Rpb24gPSBsYWJlbC5leGVjdXRhYmxlQWRkcmVzczxHZW5lcmF0ZWRGdW5j
dGlvbj4oKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
PihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCkpOworICAgIHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uID0gbGFiZWw7CiAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0
cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIAogICAgIGZvciAoYXV0byBwYWly
IDogc3RhdGUuZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsK
QEAgLTE2Myw3ICsxNjEsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6
OlJlCiAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OwogICAgICAg
ICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJn
dW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNv
bW1vbi5hcHBlbmRDYXRjaEVudHJ5cG9pbnQoCi0gICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zm
c2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUu
cHJvYy0+ZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7Cisg
ICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxp
bmtCdWZmZXItPmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oc3RhdGUucHJvYy0+
ZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0
cykpOwogICAgIH0KICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5
cG9pbnRzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvblRhcmdldC5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEg
KzM2LDExIEBAIEV4Y2VwdGlvblRhcmdldDo6fkV4Y2VwdGlvblRhcmdldCgpCiB7CiB9CiAKLUNv
ZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvblRhcmdldDo6bGFiZWwoTGlua0J1ZmZlciYgbGlua0J1
ZmZlciwgUHRyVGFnIGhhbmRsZXJUYWcpCitDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPiBFeGNlcHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
CiB7CiAgICAgaWYgKG1faXNEZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmV0dXJuIGxpbmtCdWZm
ZXIubG9jYXRpb25PZigqbV9kZWZhdWx0SGFuZGxlciwgaGFuZGxlclRhZyk7Ci0gICAgcmV0dXJu
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2hhbmRsZS0+bGFiZWwsIGhhbmRsZXJUYWcpOworICAg
ICAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KCptX2RlZmF1bHRIYW5kbGVyKTsKKyAgICByZXR1cm4gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG1faGFuZGxlLT5sYWJlbCk7CiB9CiAKIEJveDxDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRpb25UYXJnZXQ6Omp1bXBzKENDYWxsSGVscGVycyYgaml0
KQpAQCAtNTAsMTMgKzUwLDEzIEBAIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBFeGNlcHRp
b25UYXIKICAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGRlZmF1bHRIYW5kbGVyID0g
bV9kZWZhdWx0SGFuZGxlcjsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAg
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKCpyZXN1bHQsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
KnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCpk
ZWZhdWx0SGFuZGxlcikpOwogICAgICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
UmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IG1faGFuZGxlOwogICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGhhbmRsZS0+bGFiZWwsIERGR09TUkV4aXRQdHJUYWcpKTsKKyAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE9TUkV4aXRQdHJU
YWc+KGhhbmRsZS0+bGFiZWwpKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlv
blRhcmdldC5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4Y2VwdGlvblRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1
YmxpYzoKICAgICB+RXhjZXB0aW9uVGFyZ2V0KCk7CiAKICAgICAvLyBJdCdzIE9LIHRvIGNhbGwg
dGhpcyBkdXJpbmcgbGlua2luZywgYnV0IG5vdCBhbnkgc29vbmVyLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsKExpbmtCdWZmZXImLCBQdHJUYWcgaGFuZGxlclRhZyk7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwoTGlua0J1ZmZlciYpOwog
CiAgICAgLy8gT3IsIHlvdSBjYW4gZ2V0IGEgSnVtcExpc3QgYXQgYW55IHRpbWUuIEFueXRoaW5n
IHlvdSBhZGQgdG8gdGhpcyBKdW1wTGlzdCB3aWxsIGJlIGxpbmtlZCB0bwogICAgIC8vIHRoZSB0
YXJnZXQncyBsYWJlbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEdlbmVyYXRlZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCAr
MjgsMTIgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlv
bikoRXhlY1N0YXRlKik7CisvLyBQb2ludHMgdG8gYSBmdW5jdGlvbiBvZiBwcm90b3R5cGU6IEVu
Y29kZWRKU1ZhbHVlICgqKShFeGVjU3RhdGUqKS4KK3VzaW5nIEdlbmVyYXRlZEZ1bmN0aW9uID0g
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz47CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShy
ZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkK
ICAgICB9CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29k
ZSkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IGIzQ29kZSkKIHsKICAgICBtX2IzQ29kZSA9IGIzQ29kZTsKIH0KQEAgLTYxLDE3ICs2MSwxNyBA
QCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3RkCiAgICAgbV9iM0J5cHJv
ZHVjdHMgPSBXVEZNb3ZlKGJ5cHJvZHVjdHMpOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxp
emVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyIGFkZHJlc3MpCit2b2lkIEpJVENvZGU6OmluaXRpYWxp
emVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGFkZHJlc3MpCiB7CiAgICAg
bV9hZGRyZXNzRm9yQ2FsbCA9IGFkZHJlc3M7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6
ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6
aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50
cnlwb2ludCkKIHsKICAgICBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0K
IAotSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSBhcml0eUNoZWNrKQorSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjph
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQogewogICAgIHN3aXRjaCAo
YXJpdHlDaGVjaykgewogICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtODAsMTgg
KzgwLDE2IEBAIEpJVENvZGU6OkNvZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwKICAgICAg
ICAgcmV0dXJuIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQuY29kZSgpOwogICAgIH0KICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgcmV0
dXJuIENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewotICAgIHJldHVybiBtX2FkZHJl
c3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgb2Zmc2V0OwotICAgIGFzc2Vy
dElzVGFnZ2VkV2l0aChtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQ
dHJUYWcpOwogICAgIGlmICghb2Zmc2V0KQogICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2Fs
bC5leGVjdXRhYmxlQWRkcmVzcygpOwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1
bnRhZ0NvZGVQdHI8Y2hhcio+KG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
Q29kZVB0clRhZyk7Ci0gICAgcmV0dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBv
ZmZzZXQsIENvZGVQdHJUYWcpOworICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRy
ZXNzRm9yQ2FsbC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVy
biB0YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsK
IH0KIAogdm9pZCogSklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDQsMTcgKzQ0LDE3IEBAIHB1YmxpYzoKICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUo
KTsKIAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRl
OworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01v
ZGUpIG92ZXJyaWRlOwogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KSBvdmVycmlkZTsKICAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50
b0NvZGUpIG92ZXJyaWRlOwogICAgIHNpemVfdCBzaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBj
b250YWlucyh2b2lkKikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29k
ZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQjNDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4p
OwogICAgIHZvaWQgaW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9w
YXF1ZUJ5cHJvZHVjdHM+KTsKLSAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyKTsKLSAgICB2b2lkIGluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsK
KyAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KTsKKyAgICB2b2lkIGluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmPEpTRW50
cnlQdHJUYWc+KTsKICAgICAKICAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFj
a2VkUmVmZXJlbmNlcyYpIG92ZXJyaWRlOwogCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBj
KSBvdmVycmlkZTsKIAotICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0Nv
ZGU7IH0KKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYjNDb2RlOyB9CiAgICAgCiAgICAgSklUQ29kZSogZnRsKCkgb3ZlcnJpZGU7CiAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsKQEAgLTc0LDEwICs3NCwxMCBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xv
d1BhdGhzOwogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7Ci0g
ICAgQ29kZVJlZiBtX2IzQ29kZTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fYWRkcmVz
c0ZvckNhbGw7CisgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2IzQ29kZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IG1fYjNCeXByb2R1Y3RzOwotICAgIENv
ZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3Bw
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBib29sIEpJVEZp
bmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0g
c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwog
ICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBiM0NvZGVSZWYgPQotICAgICAgICBGSU5B
TElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVQdHJU
YWcsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9
CisgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1
ZmZlciwgSlNFbnRyeVB0clRhZywKICAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6
RlRMSklUKSkuZGF0YSgpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNr
Q29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyCi0gICAgICAgID8gRklOQUxJWkVfQ09ERV9J
RihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50TGlua0J1ZmZlciwgQ29kZVB0clRhZywKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYg
PSBlbnRyeXBvaW50TGlua0J1ZmZlcgorICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERp
c2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCiAgICAgICAg
ICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUg
YXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywg
SklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsK
KyAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKIAogICAgIGppdENvZGUtPmluaXRp
YWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVj
a0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw4ICszOCw4IEBAIExhenlTbG93UGF0aDo6fkxhenlTbG93UGF0aCgpCiB9CiAKIHZv
aWQgTGF6eVNsb3dQYXRoOjppbml0aWFsaXplKAotICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hh
YmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBl
eGNlcHRpb25UYXJnZXQsCisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBw
YXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBkb25lLAorICAg
IENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdl
dCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IKICAgICApCiB7CkBAIC02
MywxNCArNjMsMTMgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwog
CiAgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAKLSAgICBQdHJUYWcgc2xvd1Bh
dGhUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFn
Pih0aGlzKSk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkKTsKLSAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVK
dW1wcywgbV9kb25lLnJldGFnZ2VkKHNsb3dQYXRoVGFnLCBOZWFyQ29kZVB0clRhZykpOworICAg
IGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4
Y2VwdGlvblRhcmdldCkKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBt
X2V4Y2VwdGlvblRhcmdldC5yZXRhZ2dlZChzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKTsK
LSAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIHNs
b3dQYXRoVGFnLCAiTGF6eSBzbG93IHBhdGggY2FsbCBzdHViIik7CisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQpOworICAgIG1fc3R1YiA9
IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlciwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcsICJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0dWIiKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChtX3BhdGNoYWJsZUp1bXAucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJD
b2RlUHRyVGFnKSwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0
aFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KG1fcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KG1fc3R1Yi5jb2RlKCkpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSwyNyArNjksMjkgQEAgcHVibGljOgogICAgIH5MYXp5U2xvd1Bh
dGgoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgKLSAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBw
YXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBkb25lLAotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25UYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAorICAgICAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1
bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmUsCisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvblRhcmdldCwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIENhbGxTaXRlSW5kZXgsIFJl
ZlB0cjxHZW5lcmF0b3I+CiAgICAgICAgICk7CiAKLSAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNo
YWJsZUp1bXAoKSBjb25zdCB7IHJldHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBkb25lKCkgY29uc3QgeyByZXR1cm4gbV9kb25lOyB9CisgICAgQ29kZUxvY2F0
aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRjaGFibGVKdW1wOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
ZG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9uZTsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CiAgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4
OyB9CiAKICAgICB2b2lkIGdlbmVyYXRlKENvZGVCbG9jayopOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0dWIoKSBjb25zdCB7IHJldHVybiBt
X3N0dWI7IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVt
cDsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2RvbmU7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bV9leGNlcHRpb25UYXJnZXQ7CisgICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFn
PiBtX3BhdGNoYWJsZUp1bXA7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRhZ2dlZCB3
aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5zdGVhZCBvZiBKU0VudHJ5VGFnLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3MTIKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2RvbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4gbV9leGNlcHRpb25UYXJnZXQ7CiAgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOwogICAgIENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3N0dWI7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX3N0dWI7CiAgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlT
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICBWTSYgdm0s
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCisgICAgVk0mIHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAogICAgICAgICBbPSwg
JnZtXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCwxNSArMTQwLDEzIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUp
CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0udG9wQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZU
TE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoY2FsbFRhZyk7CisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOwogCiAgICAgICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwog
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgIFB0clRh
ZyBsb29rdXBUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbChsb29rdXBUYWcpOworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKHZtKTsKICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAK
QEAgLTE3MiwxNCArMTcwLDEzIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJp
dHlDaGVjaywgRnVuY3Rpb25QdHIoY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGNhbGxUYWcp
KTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOwotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhj
YWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsICZ2bSksIE5lYXJDb2Rl
UHRyVGFnKSkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBD
b2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0
aW9uKSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IG9w
ZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaykpOwor
ICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZy
b21DYWxsZXJGcmFtZSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5r
KGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1
Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIt
PmxpbmsobWFpblBhdGhKdW1wcywgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOwogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBQdHJUYWcgZW50cnlUYWcgPSBwdHJUYWcoRlRMQ29kZVB0clRh
ZywgY29kZUJsb2NrKTsKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NG
b3JDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXRhZ0NvZGVQdHI8dm9pZCo+KHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uLCBlbnRyeVRhZywgQ29kZVB0clRhZykpKTsKKworICAgICAgICBzdGF0
ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoc3RhdGUuZ2VuZXJhdGVkRnVuY3Rp
b24pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTk4LDkgKzE5NSw5IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFp
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+
bGluayhtYWluUGF0aEp1bXAsIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKTsKIAotICAgICAgICBz
dGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwobGlua0J1ZmZlci0+bG9jYXRp
b25PZihzdGFydCwgQ29kZVB0clRhZykpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQWRkcmVzc0ZvckNhbGwobGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihz
dGFydCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjMwNzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODYsMTkgKzI4NiwxNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAg
ICAgICAgICAgICAgICAgICBQdHJUYWcgdGhyb3dUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCB0aHJvd0NhbGwgPSBqaXQuY2FsbCh0aHJvd1RhZyk7CisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCB0aHJvd0NhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbG9va3VwVGFnID0gcHRyVGFnKEZUTE9wZXJh
dGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwgPSBqaXQuY2FsbChsb29rdXBU
YWcpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0
aW9uSGFuZGxlckNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayh0aHJvd0NhbGwsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCB0aHJvd1RhZykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHIobG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSwgbG9va3VwVGFnKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRpb25I
YW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0zNjUsNyArMzYzLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaml0Lmp1bXAoKTsK
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZXhjZXB0aW9uSGFuZGxl
ciwgRXhjZXB0aW9uSGFuZGxlclB0clRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPigqZXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwpAQCAtNzE3MCwxNSAr
NzE2OCwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFn
LCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlu
a0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRv
Q2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC03MzE4LDkg
KzczMTQsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgcGF0Y2hhYmxlSnVtcExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHBhdGNoYWJsZUp1bXApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNh
bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQ
YXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGgsIFNsb3dQYXRoUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBwYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4ocGF0Y2hhYmxlSnVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oY2FsbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gc2xv
d1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzbG93
UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wTG9jYXRpb24sCkBAIC03MzY3LDEzICs3MzYz
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c2xvd1BhdGgsIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oY2FsbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4o
c2xvd1BhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHNsb3dQYXRoTG9jYXRp
b24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJU
YWc+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aExvY2F0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTc0OTIsMTUgKzc0ODgsMTMgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5r
Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhz
bG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
ZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRy
VGFnPihzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
Pih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oZmFzdENhbGwpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC03NjM3LDkgKzc2MzEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBhdXRv
IGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICAg
ICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0
clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNhbGxlZSwgdGFnKSksIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgdGFnKTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGNhbGxlZSkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUjApOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1i
bHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1w
V2lkdGgpKTsKICAgICAgICAgICAgICAgICB9OwogCkBAIC03NzkzLDE1ICs3Nzg2LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRy
VGFnLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
bGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRh
Zyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1
bmN0aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0Nh
bGwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dD
YWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCkBAIC03OTc4LDkgKzc5NjksOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMo
KSk7CiAKICAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0g
KHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNh
bGxlZSwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50
R1BSMCwgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNhbGxlZSkpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApOworICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIE9wZXJhdGlv
blB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVj
aywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKICAgICAgICAgICAgICAgICB9Owog
CkBAIC04MDc4LDE1ICs4MDY4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBs
aW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxp
bmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hl
Y2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
RW50cnlQdHJUYWc+KHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihmYXN0Q2FsbCkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC04MTY4LDkgKzgx
NTYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXMgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCByZXF1aXJlZEJ5dGVzKTsK
ICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJl
cXVpcmVkQnl0ZXMpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwp
PihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhG
VExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlv
bkNhbGxFdmFsLCB0YWcpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsK
LSAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjAsIHRhZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGxF
dmFsKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAg
ICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2Vw
dGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5j
aFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
QEAgLTg4NTIsOCArODgzOSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBSZXBsYWNlbWVudCBqdW1wUmVwbGFjZW1l
bnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGxh
YmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihsYWJlbCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE9TUkV4aXRQdHJUYWc+KGhhbmRsZS0+bGFi
ZWwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmNvbW1vbi5qdW1wUmVwbGFj
ZW1lbnRzLmFwcGVuZChqdW1wUmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwpAQCAtOTY5NywxOCArOTY4NCwxOCBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4o
anVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHRyZGlmZl90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihkb25lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGlu
ZVNpemU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0
aENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzbG93UGF0aENhbGwpKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHNsb3dQYXRoQmVnaW4pKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CkBAIC0xMTkxOCw3ICsxMTkwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMgPSBkb21KSVQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBkb21KSVRQYXJhbXMpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaGFuZGxl
LT5sYWJlbCkpOworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGhhbmRsZS0+bGFiZWwpKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsKQEAgLTExOTU3LDYgKzExOTQ0LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAg
ICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaWduYXR1cmUt
PnVuc2FmZUZ1bmN0aW9uKSwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAgICAgICAgc3dpdGNoIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICBy
ZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0VQPihzaWduYXR1cmUtPnVuc2FmZUZ1bmN0aW9uKSksIG1fY2FsbEZyYW1l
LCBvcGVyYW5kc1swXSk7CkBAIC0xMTk4Myw3ICsxMTk3MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAvLyBTaW5jZSB0aGUgZ2V0dGVyIGRvZXMgbm90IGhhdmUgY29kZSBzZXR0aW5nIHRvcENh
bGxGcmFtZSwgQXMgaXMgdGhlIHNhbWUgdG8gSUMsIHdlIHNob3VsZCBzZXQgdG9wQ2FsbEZyYW1l
IGluIGNhbGxlciBzaWRlLgogICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUs
IG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogICAgICAgICAgICAgc2V0SlNW
YWx1ZSgKLSAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihtX25v
ZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyKSwKKyAgICAgICAg
ICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPmNhbGxET01HZXR0
ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyLnJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8
Q0Z1bmN0aW9uUHRyVGFnPigpKSwKICAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXJdKSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzk4OSwyNiArMTM5NzcsMjEg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJU
YWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvckp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhnZW5lcmF0b3JKdW1wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLT5nZXRDVElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRo
PiBsYXp5U2xvd1BhdGggPSBzdGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aD4oKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWco
RlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihsYXp5U2xvd1BhdGgu
Z2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVt
cCBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihwYXRjaGFibGVKdW1w
LCBzbG93UGF0aFRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxp
bmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihwYXRjaGFibGVKdW1wKSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGlua2Vk
RG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lLCBzbG93UGF0aFRhZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oZG9uZSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmNv
bW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNs
b3dQYXRoLT5pbml0aWFsaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtlZFBhdGNoYWJsZUp1bXAsIGxpbmtlZERvbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyLCBz
bG93UGF0aFRhZyksIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyKSwgdXNlZFJlZ2lz
dGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsU2l0ZUlu
ZGV4LCBnZW5lcmF0b3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmxhenlTbG93UGF0aHNbaW5k
ZXhdID0gV1RGTW92ZShsYXp5U2xvd1BhdGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOCw3ICsxMDgs
NyBAQCBPU1JFeGl0OjpPU1JFeGl0KAogewogfQogCi1Db2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6
OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0CitD
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BB
UkFNKGZ0bENvZGVCbG9jayk7CiAgICAgcmV0dXJuIG1fcGF0Y2hhYmxlSnVtcDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTExOSwxMiArMTE5LDEyIEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJh
c2UKICAgICBPU1JFeGl0KE9TUkV4aXREZXNjcmlwdG9yKiwgRXhpdEtpbmQsIENvZGVPcmlnaW4s
IENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29sIHdhc0hvaXN0ZWQpOwog
CiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1fZGVzY3JpcHRvcjsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbV9jb2RlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFn
PiBtX2NvZGU7CiAgICAgLy8gVGhpcyB0ZWxscyB1cyB3aGVyZSB0byBwbGFjZSBhIGp1bXAuCi0g
ICAgQ29kZUxvY2F0aW9uSnVtcCBtX3BhdGNoYWJsZUp1bXA7CisgICAgQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXA7CiAgICAgVmVjdG9yPEIzOjpWYWx1
ZVJlcD4gbV92YWx1ZVJlcHM7CiAKLSAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OworICAgIENvZGVMb2NhdGlv
bkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sq
IGZ0bENvZGVCbG9jaykgY29uc3Q7CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRF
eGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQogICAgIHsKICAgICAgICAgT1NS
RXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQ29kZUJs
b2NrLCBFeGl0RnJvbUZUTCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3Niw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlUmVjb3ZlcnkoCiB9CiAKIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAotICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29k
ZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUHRyVGFnIGV4
aXRTaXRlVGFnKQorICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhp
dCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICAvLyBUaGlzIGNv
ZGUgcmVxdWlyZXMgZnJhbWVQb2ludGVyUmVnaXN0ZXIgaXMgdGhlIHNhbWUgYXMgY2FsbEZyYW1l
UmVnaXN0ZXIKICAgICBzdGF0aWNfYXNzZXJ0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgIk1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciBhbmQgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIgbXVzdCBi
ZSB0aGUgc2FtZSIpOwpAQCAtMzM4LDkgKzMzOCw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IpPigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKSk7Ci0gICAgICAgICAgICBQ
dHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwot
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5j
dGlvblB0cihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSLCB0YWcpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCB0
YWcpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0
KG1hdGVyaWFsaXphdGlvbikpOwogCiAgICAgICAgICAgICAvLyBMZXQgZXZlcnlvbmUga25vdyB0
aGF0IHdlJ3JlIGRvbmUuCkBAIC0zNjcsOSArMzY2LDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0
dWIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0
aW9uKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6
YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpLAogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOwotICAgICAg
ICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0
aW9uUHRyKG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IsIHRhZykpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgfQogCiAgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVy
ZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUg
cGxhY2UgaW4KQEAgLTQ5Niw3ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICBleGl0Lm1fY29k
ZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8
IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRMT1NSRXhpdCgpLAot
ICAgICAgICBwYXRjaEJ1ZmZlciwgZXhpdFNpdGVUYWcsCisgICAgICAgIHBhdGNoQnVmZmVyLCBP
U1JFeGl0UHRyVGFnLAogICAgICAgICAiRlRMIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgZXhpdElELCB0b0NTdHJpbmcoZXhp
dC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhp
dC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLApAQCAtNTQ0LDEzICs1NDIs
MTIgQEAgZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjUwogCiAgICAgcHJl
cGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKIAotICAg
IFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExPU1JFeGl0UHRyVGFnLCAmZXhpdCk7Ci0gICAg
Y29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBleGl0LCAmdm0sIGNvZGVCbG9jaywgdGh1bmtU
YWcpOworICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgaml0Q29kZSwgZXhpdCwgJnZtLCBjb2RlQmxv
Y2spOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICBleGl0LmNv
ZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5t
X2NvZGUucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAg
ZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVs
PE9TUkV4aXRQdHJUYWc+KGV4aXQubV9jb2RlLmNvZGUoKSkpOwogICAgIAotICAgIHJldHVybiBl
eGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4
ZWMpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHJldHVybiBleGl0Lm1fY29kZS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCShy
ZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRI
YW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTMgQEAgdm9pZCBPU1JFeGl0
SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRlJgogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAg
ICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICBbc2VsZiwganVtcCwgbXlMYWJlbCwgY29tcGls
YXRpb24sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHNlbGYt
PmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoanVtcCkpOworICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAgPSBD
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihqdW1wKSk7CiAKLSAgICAgICAgICAgIFB0clRhZyB0aHVua1RhZyA9
IHB0clRhZyhGVExPU1JFeGl0UHRyVGFnLCAmdm0pOwogICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9qdW1wLAotICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgIGlmIChj
b21waWxhdGlvbikKLSAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+YWRkT1NSRXhpdFNpdGUo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobXlMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSB9KTsK
KyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+YWRkT1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obXlMYWJlbCkgfSk7CiAgICAgICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw4ICs1ODEsNyBAQCBleHRlcm4gIkMiIHZv
aWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUCiAgICAgTGF6eVNsb3dQYXRoJiBsYXp5U2xvd1Bh
dGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF07CiAgICAgbGF6eVNsb3dQYXRoLmdl
bmVyYXRlKGNvZGVCbG9jayk7CiAKLSAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJUYWcoRlRM
TGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPigmbGF6eVNsb3dQYXRoKSk7
Ci0gICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkucmV0YWdnZWRDb2RlKHNsb3dQYXRoVGFn
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBy
ZXR1cm4gbGF6eVNsb3dQYXRoLnN0dWIoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShy
ZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGUKICAgICAgICAgICAgICAgICAg
ICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9IGhhbmRsZXI7CiAgICAgICAgICAgICAgICAgICAg
IG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKICAgICAgICAgICAgICAg
ICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAg
ICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihoYW5kbGUtPmxhYmVsLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KGhhbmRsZS0+bGFiZWwpOwogICAgICAgICAgICAgICAgICAgICBj
b2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
MjUgKzExMywyMiBAQCBTbG93UGF0aENhbGxDb250ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4CiAg
ICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05l
ZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1TbG93UGF0
aENhbGxLZXkgU2xvd1BhdGhDYWxsQ29udGV4dDo6a2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFy
Z2V0KSBjb25zdAorU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhU
YXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdAogewog
ICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkobV90aHVua1NhdmVTZXQsIGNhbGxUYXJnZXQsIG1f
YXJndW1lbnRSZWdpc3RlcnMsIG1fb2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRo
Q2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHIgY2FsbFRhcmdldCkKK1Ns
b3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCkKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxl
QWRkcmVzcyA9IGNhbGxUYXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICBhc3NlcnRJc0NG
dW5jdGlvblB0cihleGVjdXRhYmxlQWRkcmVzcyk7Ci0gICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9
IGtleVdpdGhUYXJnZXQoZXhlY3V0YWJsZUFkZHJlc3MpOwotICAgIFB0clRhZyBjYWxsVGFnID0g
a2V5LmNhbGxQdHJUYWcoKTsKLSAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxs
KG1faml0LmNhbGwoY2FsbFRhZyksIGtleSk7CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtl
eVdpdGhUYXJnZXQoY2FsbFRhcmdldCk7CisgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQ
YXRoQ2FsbChtX2ppdC5jYWxsKE9wZXJhdGlvblB0clRhZyksIGtleSk7CiAKICAgICBtX2ppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgW3Jlc3VsdCwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRodW5rID0KKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPQogICAgICAg
ICAgICAgICAgIHZtLmZ0bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsocmVzdWx0LmtleSgp
KTsKIAotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlc3VsdC5jYWxsKCksIENvZGVMb2Nh
dGlvbkxhYmVsKHRodW5rLmNvZGUoKSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJl
c3VsdC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVsPE9wZXJhdGlvblB0clRhZz4odGh1bmsucmV0
YWdnZWRDb2RlPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICB9KTsKICAgICAKICAgICBy
ZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVi
bGljOgogCiAgICAgLy8gTk9URTogVGhlIGNhbGwgdGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFk
eSBnb2luZyB0byBiZSBsaW5rZWQgYnkgdGhlIEpJVCB1c2luZyBhZGRMaW5rVGFzaygpLAogICAg
IC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHlvdSB0byBsaW5rIGl0IHlvdXJzZWxmLgotICAg
IFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbChWTSYsIEZ1bmN0aW9uUHRyIGNhbGxUYXJnZXQpOworICAg
IFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbChWTSYsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
Y2FsbFRhcmdldCk7CiAKIHByaXZhdGU6Ci0gICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJn
ZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhU
YXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdDsKICAg
ICAKICAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwogICAgIFJlZ2lzdGVyU2V0
IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7CkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxP
cGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdl
dCwKLSAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRU
eXBlcy4uLiBhcmd1bWVudHMpCisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAg
ICAgU2xvd1BhdGhDYWxsIGNhbGw7CiAgICAgewpAQCAtOTQsNyArOTQsNyBAQCBTbG93UGF0aENh
bGwgY2FsbE9wZXJhdGlvbigKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBT
bG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBWTSYgdm0sIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4LAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAogICAgIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRz
KQogewogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CkBAIC0xMTAsNyArMTEwLDcgQEAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbgogdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhj
ZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0
aW9uVGFyZ2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcg
cmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9w
ZXJhdGlvbigKICAgICAgICAgc3RhdGUudm0oKSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0
ZUluZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwg
ZnVuY3Rpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGxLZXkuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHZvaWQgU2xvd1BhdGhDYWxsS2V5
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCI8dXNlZFJl
Z2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsICIs
IGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldCksICIsIGFyZ3VtZW50UmVn
aXN0ZXJzID0gIiwgbV9hcmd1bWVudFJlZ2lzdGVycywgIj4iKTsKKyAgICBvdXQucHJpbnQoIjx1
c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNl
dCwgIiwgY2FsbFRhcmdldCA9ICIsIFJhd1BvaW50ZXIobV9jYWxsVGFyZ2V0LmV4ZWN1dGFibGVB
ZGRyZXNzKCkpLCAiLCBhcmd1bWVudFJlZ2lzdGVycyA9ICIsIG1fYXJndW1lbnRSZWdpc3RlcnMs
ICI+Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkocmV2aXNpb24gMjMwNzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLSNp
bmNsdWRlICJQdHJUYWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CkBAIC00NSwyOSArNDUsMjcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogY2xh
c3MgU2xvd1BhdGhDYWxsS2V5IHsKIHB1YmxpYzoKICAgICBTbG93UGF0aENhbGxLZXkoKQotICAg
ICAgICA6IG1fY2FsbFRhcmdldCgwKQotICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgICAgIDog
bV9vZmZzZXQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleSgKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgdm9pZCogY2FsbFRhcmdldCwgY29uc3QgUmVn
aXN0ZXJTZXQmIGFyZ3VtZW50UmVnaXN0ZXJzLAorICAgICAgICBjb25zdCBSZWdpc3RlclNldCYg
c2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIGNvbnN0IFJlZ2lz
dGVyU2V0JiBhcmd1bWVudFJlZ2lzdGVycywKICAgICAgICAgcHRyZGlmZl90IG9mZnNldCkKICAg
ICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoc2V0KQotICAgICAgICAsIG1fY2FsbFRhcmdldChjYWxs
VGFyZ2V0KQorICAgICAgICAsIG1fY2FsbFRhcmdldChjYWxsVGFyZ2V0LnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKSkKICAgICAgICAgLCBtX2FyZ3VtZW50UmVnaXN0ZXJzKGFyZ3VtZW50UmVn
aXN0ZXJzKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICB7CiAgICAgfQogICAgIAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91
c2VkUmVnaXN0ZXJzOyB9Ci0gICAgdm9pZCogY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbFRhcmdldDsgfQorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbFRhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBhcmd1bWVudFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRSZWdpc3RlcnM7
IH0KICAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAg
ICAKLSAgICBTbG93UGF0aENhbGxLZXkgd2l0aENhbGxUYXJnZXQodm9pZCogY2FsbFRhcmdldCkK
KyAgICBTbG93UGF0aENhbGxLZXkgd2l0aENhbGxUYXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBjYWxsVGFyZ2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNh
bGxUYXJnZXQsIENGdW5jdGlvblB0clRhZyk7CiAgICAgICAgIHJldHVybiBTbG93UGF0aENhbGxL
ZXkodXNlZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0LCBhcmd1bWVudFJlZ2lzdGVycygpLCBvZmZz
ZXQoKSk7CiAgICAgfQogICAgIApAQCAtNzgsMTQgKzc2LDEyIEBAIHB1YmxpYzoKICAgICAKICAg
ICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRhZykKICAgICAgICAgOiBtX3VzZWRSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCi0gICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCiAg
ICAgICAgICwgbV9vZmZzZXQoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIFNsb3dQYXRoQ2Fs
bEtleShEZWxldGVkVmFsdWVUYWcpCiAgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0OjpEZWxldGVkVmFsdWUpCi0gICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCiAgICAgICAgICwg
bV9vZmZzZXQoMCkKICAgICB7CiAgICAgfQpAQCAtMTAxLDE5ICs5NywxMiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
dXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQp
ICsgbV9vZmZzZXQ7Ci0gICAgfQotCi0gICAgUHRyVGFnIGNhbGxQdHJUYWcoKSBjb25zdAotICAg
IHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaW5jbHVkZSBmYWN0b3JzIHdoaWNoIGFyZSBp
bnZhcmlhbnQgZm9yIHRoZSBzYW1lIHNsb3cgcGF0aCBzaXRlLgotICAgICAgICAvLyBtX2NhbGxU
YXJnZXQgY2FuIHZhcnkgYW5kIHNob3VsZCBiZSBleGNsdWRlZC4KLSAgICAgICAgcmV0dXJuIHB0
clRhZyhGVExTbG93UGF0aFB0clRhZywgbV91c2VkUmVnaXN0ZXJzLmhhc2goKSwgbV9vZmZzZXQp
OworICAgICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+
OjpoYXNoKG1fY2FsbFRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG1fb2Zmc2V0OwogICAg
IH0KIAogcHJpdmF0ZToKICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgdm9p
ZCogbV9jYWxsVGFyZ2V0OworICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9jYWxs
VGFyZ2V0OwogICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7CiAgICAgcHRyZGlm
Zl90IG1fb2Zmc2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
Y3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIERGRzsKIAogU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IGdyYXBoKGdy
YXBoKQotICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKIHsKICAgICBzd2l0Y2ggKGdyYXBoLm1f
cGxhbi5tb2RlKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDgg
QEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogICAgIE5vdE5lZWRl
ZCAKIH07CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1bmN0aW9uUHRyIGdlbmVyYXRpb25GdW5jdGlv
biwgUHRyVGFnIHJlc3VsdFRodW5rVGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRy
YVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVB
bmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAg
Vk0qIHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGdlbmVyYXRpb25GdW5jdGlvbiwg
UHRyVGFnIHJlc3VsdFRhZywgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9S
ZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50IGZyYW1lQW5kU3RhY2tB
ZGp1c3RtZW50UmVxdWlyZW1lbnQpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRy
KTsKIApAQCAtODYsOSArODYsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVy
aWNHZW5lCiAgICAgaml0LnBlZWsoCiAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKICAg
ICAgICAgKHN0YWNrTWlzYWxpZ25tZW50IC0gTWFjcm9Bc3NlbWJsZXI6OnB1c2hUb1NhdmVCeXRl
T2Zmc2V0KCkpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgUHRyVGFnIGdlbmVyYXRvckNhbGxUYWcg
PSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoZ2VuZXJhdG9yQ2FsbFRhZyk7
Ci0gICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKKwogICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2FudCB0byBtYWtl
IGEgdGFpbCBjYWxsIHRvIHdoYXQgd2FzIHJldHVybmVkIHRvIHVzIGluIHRoZQogICAgIC8vIHJl
dHVyblZhbHVlR1BSLiBCdXQgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBkbyB0aGlzLCB3ZSBtdXN0
IHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KICAgICAvLyBUaGUgd2F5IHdlIHdpbGwgYWNjb21wbGlz
aCB0aGlzIGlzIGJ5IGFycmFuZ2luZyB0byBoYXZlIHRoZSB0YWlsIGNhbGwgdGFyZ2V0IGluIHRo
ZQpAQCAtMTE3LDMwICsxMTYsMzAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5l
cmljR2VuZQogICAgIHJlc3RvcmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwogCiAjaWYgQ1BV
KEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCi0gICAgaml0LnVudGFnUHRyKEFzc2Vt
Ymx5SGVscGVyczo6bGlua1JlZ2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgaml0LnVudGFnUHRyKEFzc2VtYmx5SGVscGVyczo6bGlua1JlZ2lzdGVyLCByZXN1bHRUYWcp
OwogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHRUYWcpOwogI2VuZGlmCiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
ZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cihnZW5lcmF0aW9uRnVuY3Rpb24sIGdlbmVyYXRvckNh
bGxUYWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgcmVzdWx0VGh1
bmtUYWcsICIlcyIsIG5hbWUpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBn
ZW5lcmF0aW9uRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICIlcyIsIG5hbWUp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJh
UG9wc1RvUmVzdG9yZSA9IDA7Ci0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4
aXRQdHJUYWcsIHZtKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRv
cigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0KSwgdGh1bmtUYWcs
ICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJh
bWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKTsKKyAgICAgICAgdm0sIGNv
bXBpbGVGVExPU1JFeGl0LCBPU1JFeGl0UHRyVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24g
dGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWly
ZW1lbnQ6Ok5lZWRlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7Ci0gICAgUHRyVGFnIHRo
dW5rVGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgdm0pOwogICAgIHJldHVybiBn
ZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIo
Y29tcGlsZUZUTExhenlTbG93UGF0aCksIHRodW5rVGFnLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdl
bmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQ6Ok5vdE5lZWRlZCk7CisgICAgICAgIHZtLCBjb21waWxlRlRMTGF6eVNs
b3dQYXRoLCBKSVRTdHViUm91dGluZVB0clRhZywgIkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0
aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJl
cXVpcmVtZW50OjpOb3ROZWVkZWQpOwogfQogCiBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJD
aGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9udENsb2JiZXIpCkBAIC0x
NzEsNyArMTcwLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibAog
ICAgIH0KIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJh
dG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENh
bGxLZXkmIGtleSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0yMDQsOSArMjAzLDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rRwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25B
cmdHUFIwLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpKTsKICAgICAKICAgICByZWdpc3RlckNsb2JiZXJD
aGVjayhqaXQsIGtleS5hcmd1bWVudFJlZ2lzdGVycygpKTsKLSAgICAKLSAgICBQdHJUYWcgY2Fs
bFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICBB
c3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOworCisgICAgQXNz
ZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCiAg
ICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKQEAgLTIzMiw4ICsyMzAsOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgaml0LnJldCgpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpLCBjYWxs
VGFnKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIGtleS5jYWxsUHRy
VGFnKCksICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSku
ZGF0YSgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIGtleS5jYWxsVGFyZ2V0KCkpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkZU
TCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMzYgKzM4LDM2IEBAIGNsYXNzIFZN
OwogCiBuYW1lc3BhY2UgRlRMIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xv
d1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBs
YXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3Qg
U2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmd1bWVudD4K
IHN0cnVjdCBUaHVua01hcCB7CiAgICAgdHlwZWRlZiBLZXlUeXBlQXJndW1lbnQgS2V5VHlwZTsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBUb1Ro
dW5rTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIEtleVR5
cGU+IEZyb21UaHVua01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gVG9UaHVua01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiwgS2V5VHlwZT4gRnJv
bVRodW5rTWFwOwogICAgIAogICAgIFRvVGh1bmtNYXAgbV90b1RodW5rOwogICAgIEZyb21UaHVu
a01hcCBtX2Zyb21UaHVuazsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vz
c2FyeSgKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVJZk5l
Y2Vzc2FyeSgKICAgICBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5
cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlw
ZTo6VG9UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOwog
ICAgIGlmIChpdGVyICE9IG1hcC5tX3RvVGh1bmsuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVy
LT52YWx1ZTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJh
dG9yKGtleSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJl
c3VsdCA9IGdlbmVyYXRvcihrZXkpOwogICAgIG1hcC5tX3RvVGh1bmsuYWRkKGtleSwgcmVzdWx0
KTsKICAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJlc3VsdC5jb2RlKCksIGtleSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLXR5cGVuYW1lIE1h
cFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWFwVHlwZSYgbWFwLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcHRyKQordHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSBrZXlGb3JUaHVuayhNYXBUeXBl
JiBtYXAsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRyKQogewogICAg
IHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zy
b21UaHVuay5maW5kKHB0cik7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9t
VGh1bmsuZW5kKCkpOwpAQCAtNzksMTMgKzc5LDEzIEBAIGNsYXNzIFRodW5rcyB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoVGh1bmtzKTsKIHB1YmxpYzoKICAgICBUaHVua3MoKSA9IGRlZmF1
bHQ7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZ2V0U2xvd1BhdGhDYWxsVGh1bmsoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkp
CiAgICAgewogICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKICAgICAgICAgICAg
IG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsK
ICAgICB9Ci0gICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5r
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIpCisKKyAgICBTbG93UGF0aENhbGxLZXkga2V5Rm9y
U2xvd1BhdGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBw
dHIpCiAgICAgewogICAgICAgICByZXR1cm4ga2V5Rm9yVGh1bmsobV9zbG93UGF0aENhbGxUaHVu
a3MsIHB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSBPcGNvZGVJRCBJbnRlcnByZXRl
cjo6Z2V0T3Bjb2RlSUQKICAgICAvLyBUaGUgT3Bjb2RlSUQgaXMgZW1iZWRkZWQgaW4gdGhlIGlu
dDMyX3Qgd29yZCBwcmVjZWRpbmcgdGhlIGxvY2F0aW9uIG9mCiAgICAgLy8gdGhlIExMSW50IGNv
ZGUgZm9yIHRoZSBvcGNvZGUgKHNlZSB0aGUgRU1CRURfT1BDT0RFX0lEX0lGX05FRURFRCBtYWNy
bwogICAgIC8vIGluIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwKS4KLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cihyZW1vdmVDb2RlUHRyVGFnPHZvaWQqPihvcGNvZGUpKTsKKyAgICBh
dXRvIGNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mob3Bjb2RlKTsKICAgICBpbnQzMl90KiBvcGNvZGVJREFk
ZHJlc3MgPSBjb2RlUHRyLmRhdGFMb2NhdGlvbjxpbnQzMl90Kj4oKSAtIDE7CiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBzdGF0aWNfY2FzdDxPcGNvZGVJRD4oKm9wY29kZUlEQWRkcmVzcyk7CiAg
ICAgQVNTRVJUKG9wY29kZUlEIDwgTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
Y2FsbEV4Y2VwdGlvbkZ1enooCiAjZWxzZQogICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKLSAgICBQdHJUYWcgdGFnID0g
cHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiwgdGFnKSks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgY2FsbChHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIHRhZyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKSwg
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBjYWxsKEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CkBAIC03MTMsMTAgKzcxMiw5IEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgp
OwogICAgIGFkZExpbmtUYXNrKAogICAgICAgICBbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxD
YWxsUHRyVGFnLCAmdm0pOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmly
dHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOwogICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIo
Y3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwot
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZpcnR1
YWxUaHVuay5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTkz
Myw5ICs5MzEsOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgCiAj
ZWxzZQogI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRp
ZgotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihmdW5jdGlvbiwg
dGFnKSksIHNjcmF0Y2gpOwotICAgIGNhbGwoc2NyYXRjaCwgdGFnKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oZnVuY3Rpb24pKSwgc2Ny
YXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCBPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BS
SW5mbzo6cmVnVDApOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUklu
Zm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOCBAQCB2b2lkIENDYWxs
SGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEJl
bG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hpY2tlbigpLmxvZ0Vu
ZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHJvY2Vzc1NoYWRv
d0NoaWNrZW5Mb2cpPigpOwotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
blB0cihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdGFnKSksIHNjcmF0Y2gxTm9u
QXJnR1BSKTsKLSAgICBjYWxsKHNjcmF0Y2gxTm9uQXJnR1BSLCB0YWcpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Qcm9j
ZXNzU2hhZG93Q2hpY2tlbkxvZykpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CisgICAgY2FsbChzY3Jh
dGNoMU5vbkFyZ0dQUiwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dm0uc2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwgc2NyYXRjaDFOb25BcmdH
UFIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tl
dCk7CiAgICAgb2subGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgLy8gQXNzZW1ibGUgYSB0aHVuayB0aGF0IHdpbGwgc2VydmUgYXMgdGhlIG1lYW5z
IGZvciB3cml0aW5nIGludG8gdGhlIEpJVCByZWdpb24uCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB3cml0ZVRodW5rID0gaml0V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9j
YXN0PHZvaWQqPih3cml0YWJsZUFkZHIpLCBzdHViQmFzZSwgc3R1YlNpemUpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHdyaXRlVGh1bmsgPSBqaXRXcml0
ZVRodW5rR2VuZXJhdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0
dWJCYXNlLCBzdHViU2l6ZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9IDA7CiAKQEAgLTIzMSw3
ICsyMzEsNyBAQCBwcml2YXRlOgogICAgIH0KIAogI2lmIENQVShBUk02NCkgJiYgVVNFKEVYRUNV
VEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGpp
dFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRyLCB2b2lkKiBzdHViQmFzZSwg
c2l6ZV90IHN0dWJTaXplKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiB3cml0YWJsZUFkZHIsIHZvaWQqIHN0dWJC
YXNlLCBzaXplX3Qgc3R1YlNpemUpCiAgICAgewogICAgICAgICB1c2luZyBuYW1lc3BhY2UgQVJN
NjRSZWdpc3RlcnM7CiAgICAgICAgIHVzaW5nIFRydXN0ZWRJbW0zMiA9IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzI7CkBAIC0yOTksOCArMjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
dG8gYXBwZWFyIGluIHRoZSBjb25zb2xlIG9yIGFueXdoZXJlIGluIG1lbW9yeSwgdmlhIHRoZSBQ
cmludFN0cmVhbSBidWZmZXIuCiAgICAgICAgIC8vIFRoZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3Vh
cmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFibGUgd2hlbiB1c2luZyB0aGUKICAgICAgICAg
Ly8gYXN5bmNEaXNhc3NlbWJseSBvcHRpb24gYXMgb3VyIGNhbGxlciB3aWxsIHNldCBvdXIgcGFn
ZXMgZXhlY3V0ZSBvbmx5LgotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVFdyaXRlVGh1
bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbik7Ci0gICAgICAgIHJldHVy
biBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSh0YWcpOworICAgICAg
ICByZXR1cm4gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8SklUVGh1
bmtQdHJUYWc+KCk7CiAgICAgfQogI2Vsc2UgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9P
TkxZX0pJVF9XUklURV9GVU5DVElPTikKICAgICBzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJ
VFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkK
QEAgLTMwOCwxNSArMzA3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIG1lbWNweSgodm9pZCopKHN0
YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCArIG9mZnNldCksIGRhdGEsIGRhdGFTaXplKTsK
ICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaml0V3JpdGVUaHVua0dlbmVyYXRv
cih2b2lkKiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90KQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2
b2lkKiwgc2l6ZV90KQogICAgIHsKICAgICAgICAgc3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQ
b29sID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpOwotICAgICAgICB1aW50
cHRyX3QgZnVuY3Rpb24gPSAodWludHB0cl90KSgodm9pZCopJmdlbmVyaWNXcml0ZVRvSklUUmVn
aW9uKTsKKyAgICAgICAgdm9pZCogZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPigm
Z2VuZXJpY1dyaXRlVG9KSVRSZWdpb24pOwogI2lmIENQVShBUk1fVEhVTUIyKQogICAgICAgICAv
LyBIYW5kbGUgdGh1bWIgb2Zmc2V0Ci0gICAgICAgIGZ1bmN0aW9uIC09IDE7CisgICAgICAgIHVp
bnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0
aW9uKTsKKyAgICAgICAgZnVuY3Rpb25Bc0ludCAtPSAxOworICAgICAgICBmdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uQXNJbnQpOwogI2VuZGlmCi0gICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKHZvaWQqKWZ1bmN0aW9uKSk7CisgICAgICAgIGF1dG8gY29kZVB0
ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQ
dHIpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDggKzkxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkKiBwZXJmb3JtSklUTWVtY3B5KHZvaQog
ICAgICAgICAgICAgLy8gVXNlIGV4ZWN1dGUtb25seSB3cml0ZSB0aHVuayBmb3Igd3JpdGVzIGlu
c2lkZSB0aGUgSklUIHJlZ2lvbi4gVGhpcyBpcyBhIHZhcmlhbnQgb2YKICAgICAgICAgICAgIC8v
IG1lbWNweSB0aGF0IHRha2VzIGFuIG9mZnNldCBpbnRvIHRoZSBKSVQgcmVnaW9uIGFzIGl0cyBk
ZXN0aW5hdGlvbiAoZmlyc3QpIHBhcmFtZXRlci4KICAgICAgICAgICAgIG9mZl90IG9mZnNldCA9
IChvZmZfdCkoKHVpbnRwdHJfdClkc3QgLSBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bCk7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVFdyaXRlVGh1bmtQdHJUYWcs
ICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbik7Ci0gICAgICAgICAgICByZXRhZ0NvZGVQ
dHIoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24sIHRhZywgQ0Z1bmN0aW9uUHRyVGFnKShv
ZmZzZXQsIHNyYywgbik7CisgICAgICAgICAgICByZXRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWcs
IENGdW5jdGlvblB0clRhZz4oaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZnNldCwg
c3JjLCBuKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIEdDQXdhcmVKSVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0
dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZt
KQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4m
IGNvZGUsIFZNJiB2bSkKICAgICA6IEpJVFN0dWJSb3V0aW5lKGNvZGUpCiAgICAgLCBtX21heUJl
RXhlY3V0aW5nKGZhbHNlKQogICAgICwgbV9pc0pldHRpc29uZWQoZmFsc2UpCkBAIC04Miw3ICs4
Miw3IEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWQKIH0KIAogTWFy
a2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSgK
LSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgY29uc3QgSlND
ZWxsKiBvd25lciwKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+JiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgY29uc3Qg
VmVjdG9yPEpTQ2VsbCo+JiBjZWxscykKICAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2Rl
LCB2bSkKICAgICAsIG1fY2VsbHMoY2VsbHMuc2l6ZSgpKQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZv
aWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1IKIAogCiBHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4
Y2VwdGlvbkhhbmRsZXIoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBW
TSYgdm0sICBjb25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBWZWN0b3I8SlNDZWxsKj4mIGNlbGxz
LAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4m
IGNvZGUsIFZNJiB2bSwgIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwq
PiYgY2VsbHMsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGNlcHRpb25IYW5kbGVycywg
Q2FsbFNpdGVJbmRleCBleGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCkKICAgICA6IE1hcmtp
bmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIG93bmVyLCBjZWxscykKICAgICAsIG1f
Y29kZUJsb2NrV2l0aEV4Y2VwdGlvbkhhbmRsZXIoY29kZUJsb2NrRm9yRXhjZXB0aW9uSGFuZGxl
cnMpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhj
ZXB0aW9uSAogCiAKIFJlZjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0g
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAorICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsCiAgICAgVk0mIHZtLAog
ICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgYm9vbCBtYWtlc0NhbGxzLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShy
ZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRT
dHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xh
c3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAvLyBsaXN0IHdoaWNoIGRvZXMgbm90IGdldCByZWNsYWlt
ZWQgYWxsIGF0IG9uY2UpLgogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIDogcHVibGljIEpJ
VFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKLSAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mKTsKKyAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUo
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYsIFZNJik7
CiAgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7CiAgICAgCiAgICAgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzYsNyArNzYsNyBA
QCBwcml2YXRlOgogY2xhc3MgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSA6IHB1YmxpYyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUgewogcHVibGljOgogICAgIE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29u
c3QgSlNDZWxsKiBvd25lciwgY29uc3QgVmVjdG9yPEpTQ2VsbCo+Jik7CisgICAgICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mLCBWTSYsIGNvbnN0
IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYpOwogICAgIHZpcnR1YWwgfk1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsKICAgICAKIHByb3RlY3RlZDoKQEAgLTk0LDcg
Kzk0LDcgQEAgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbgogcHVibGlj
OgogICAgIHR5cGVkZWYgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIEJhc2U7CiAKLSAgICBHQ0F3YXJl
SklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcihjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0NlbGwqPiYs
IENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworICAgIEdDQXdhcmVKSVRTdHViUm91dGluZVdp
dGhFeGNlcHRpb25IYW5kbGVyKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4mLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IFZlY3RvcjxKU0Nl
bGwqPiYsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOwogCiAgICAgdm9pZCBhYm91dFRvRGll
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCkgb3ZlcnJpZGU7CkBA
IC0xMTEsNyArMTExLDcgQEAgcHJpdmF0ZToKIC8vIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIEMr
KyBvciBKUy4KIC8vIAogLy8gUmVmPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGlu
ZSgKLS8vICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKy8vICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUsCiAvLyAg
ICBWTSYgdm0sCiAvLyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAogLy8gICAgYm9vbCBtYWtlc0Nh
bGxzLApAQCAtMTI0LDcgKzEyNCw3IEBAIHByaXZhdGU6CiAvLyB3YXkuCiAKIFJlZjxKSVRTdHVi
Um91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMsCisgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYsIFZNJiwg
Y29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzLAogICAgIGNvbnN0IFZlY3RvcjxK
U0NlbGwqPiYgPSB7IH0sIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhjZXB0aW9uSGFu
ZGxlcnMgPSBudWxscHRyLCBDYWxsU2l0ZUluZGV4IGV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJ
bmRleCA9IENhbGxTaXRlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMDc0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsMTEgKzY3LDExIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCi12
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQordm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLAotICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbik7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLAorICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCiBKSVQ6OkpJVChWTSogdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKQEAgLTcz
OCw3ICs3MzgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKICAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShw
dHJUYWcoQXJpdHlGaXh1cFB0clRhZywgbV92bSksIE5lYXJDb2RlUHRyVGFnKSk7CisgICAgICAg
IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBt
X2J5dGVjb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyAv
LyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KQEAg
LTc4OCwyNyArNzg4LDI1IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAg
ICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNl
dHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRz
LnNpemUoKSk7CiAKICAgICAgICAgICAgIGF1dG8qIHNpbXBsZUp1bXBUYWJsZSA9IHJlY29yZC5q
dW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlOwotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhTd2l0Y2hUYWJsZVB0clRhZywgc2ltcGxlSnVtcFRhYmxlKTsKLSAgICAgICAgICAgIHNpbXBs
ZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0sIHRhZyk7CisgICAgICAgICAg
ICBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
U3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zm
c2V0XSk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVt
cFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVt
cFRhYmxlLT5icmFuY2hPZmZzZXRzW2pdOwogICAgICAgICAgICAgICAgIHNpbXBsZUp1bXBUYWJs
ZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCB0YWcpCisg
ICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKQogICAgICAgICAgICAgICAgICAg
ICA6IHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6
OlN0cmluZyk7CiAKICAgICAgICAgICAgIGF1dG8qIHN0cmluZ0p1bXBUYWJsZSA9IHJlY29yZC5q
dW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlOwotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhTd2l0Y2hUYWJsZVB0clRhZywgc3RyaW5nSnVtcFRhYmxlKTsKICAgICAgICAgICAgIHN0cmlu
Z0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9Ci0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwg
dGFnKTsKKyAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRy
VGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAK
ICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiBzdHJpbmdKdW1wVGFibGUtPm9mZnNl
dFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9j
YXRpb24uYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAgIGxvY2F0aW9uLmN0aU9mZnNldCA9
IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCB0YWcpCisgICAgICAgICAgICAgICAgICAg
ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXQgKyBvZmZzZXRdKQogICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ0p1bXBUYWJs
ZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODE2LDcgKzgxNCw4
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewog
ICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5k
bGVyKGkpOwotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0XSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7Cisg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICBoYW5k
bGVyLm5hdGl2ZUNvZGUgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0XSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRv
JiByZWNvcmQgOiBtX2NhbGxzKSB7CkBAIC04MzIsMTggKzgzMSwxOCBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX3B1dEJ5SWRzW2ldLmZpbmFsaXplKHBhdGNoQnVm
ZmVyKTsKIAogICAgIGlmIChtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSkgewotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZihtX2V4Y2VwdGlvbkhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25IYW5k
bGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihtX2V4
Y2VwdGlvbkhhbmRsZXIpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYnlWYWxDb21waWxh
dGlvbkluZm8gOiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvKSB7CiAgICAgICAgICAgICBQYXRjaGFi
bGVKdW1wIHBhdGNoYWJsZU5vdEluZGV4SnVtcCA9IGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5vdElu
ZGV4SnVtcDsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgbm90SW5kZXhKdW1wID0gQ29k
ZUxvY2F0aW9uSnVtcCgpOworICAgICAgICAgICAgYXV0byBub3RJbmRleEp1bXAgPSBDb2RlTG9j
YXRpb25KdW1wPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBpZiAoSnVtcChwYXRjaGFi
bGVOb3RJbmRleEp1bXApLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgbm90SW5kZXhKdW1wID0g
Q29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHBhdGNoYWJsZU5vdEluZGV4
SnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVM
b2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5i
YWRUeXBlSnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8uZG9uZVRhcmdldCk7
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBuZXh0SG90UGF0aFRhcmdldCA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8ubmV4dEhvdFBhdGhUYXJnZXQp
OwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZvLnNsb3dQYXRoVGFyZ2V0KTsKLSAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8ucmV0dXJuQWRkcmVzcyk7CisgICAgICAgICAg
ICAgICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0VudHJ5UHRyVGFnPihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHBhdGNoYWJsZU5vdEluZGV4SnVtcCkp
OworICAgICAgICAgICAgYXV0byBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXA8SlNFbnRy
eVB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihieVZhbENvbXBp
bGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
Tm9QdHJUYWc+IGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihi
eVZhbENvbXBpbGF0aW9uSW5mby5kb25lVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPE5vUHRyVGFnPiBuZXh0SG90UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8Tm9QdHJUYWc+KGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0KTsKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiBzbG93UGF0aFRhcmdldCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGJ5VmFsQ29tcGlsYXRpb25JbmZvLnNsb3dQ
YXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+IHJldHVy
bkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihieVZhbENvbXBpbGF0
aW9uSW5mby5yZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICAgICAgKmJ5VmFsQ29tcGlsYXRpb25J
bmZvLmJ5VmFsSW5mbyA9IEJ5VmFsSW5mbygKICAgICAgICAgICAgICAgICBieVZhbENvbXBpbGF0
aW9uSW5mby5ieXRlY29kZUluZGV4LApAQCAtODYxLDIyICs4NjAsMjAgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpsaW5rKCkKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2Fs
bENvbXBpbGF0aW9uSW5mbykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGls
YXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAot
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pKSwKLSAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoY29tcGlsYXRpb25JbmZvLmhv
dFBhdGhCZWdpbikpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0Vu
dHJ5UHRyVGFnPihjb21waWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCisgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoQmVnaW4pKSwKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0VudHJ5UHRyVGFnPihjb21w
aWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7CiAgICAgfQogCiAgICAgSklUQ29kZU1hcCBqaXRD
b2RlTWFwOwogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9m
ZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICBpZiAo
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpIHsKLSAgICAgICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoQ29kZVB0clRhZywgbV9jb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0LCBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSwgdGFnKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAg
aml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogICAgIGpp
dENvZGVNYXAuZmluaXNoKCk7CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoV1RGTW92
ZShqaXRDb2RlTWFwKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hl
Y2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgQ29kZVB0clRhZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5kdW1wKHBhdGNoQnVmZmVyKTsKQEAgLTg5MSw4ICs4ODgsOCBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OmxpbmsoKQogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRC
dWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcikpOwogICAgIAotICAgIENvZGVSZWYgcmVzdWx0
ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsIENvZGVQdHJUYWcsCisgICAg
Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAorICAgICAgICBw
YXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29k
ZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKApAQCAtOTMzLDggKzkzMCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICAgICAgcG9rZShH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgMSk7CiAjZW5kaWYKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25Q
dHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChjYWxsKHRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rp
b25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSwgdGFnKSkpOworICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7CiAgICAgICAg
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0KIApAQCAtOTUzLDggKzk0OSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICAgICAgcG9r
ZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRp
b25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsKHRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVu
Y3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwgdGFnKSkpOworICAgICAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsMTMgKzcwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBDYWxsUmVjb3Jk
IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnJvbTsKICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIGNhbGxlZTsKKyAgICAgICAgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsZWU7CiAKICAgICAgICAgQ2FsbFJlY29yZCgp
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgZnJvbSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyIGNhbGxl
ZSkKKyAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmcm9tLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsZWUpCiAg
ICAgICAgICAgICA6IGZyb20oZnJvbSkKICAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICAsIGNhbGxlZShjYWxsZWUpCkBAIC0xNzQsNyArMTc0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
OwogICAgIH07CiAKLSAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1Nf
QUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMjY3LDE4ICsyNjcsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQg
ZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgICAgIENhbGwg
YXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKKyAgICAg
ICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVu
Y3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0
YWcpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGws
IG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CisgICAgICAg
ICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zm
c2V0LCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAgIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmIENQ
VShYODZfNjQpCi0gICAgICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUo
Y29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCisgICAgICAgIENhbGwgYXBw
ZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgUHRyVGFnIHRhZykKICAgICAgICAgewogICAgICAgICAgICAgQ2Fs
bCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZSh0YWcpOwotICAgICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVP
ZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CisgICAgICAgICAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rp
b24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb25DYWxsOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTcxNiwzOSArNzE2LDIzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQogCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29u
c3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPik7CiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJu
VHlwZShjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24oY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyLCBQdHJUYWcsIGludCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgRnVuY3Rpb25QdHIsIFB0clRhZywgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CiAgICAgICAgIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+
KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgdGFnLCByZXN1bHQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlv
bihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCB0YWcsIHJlc3VsdCwgYXJncy4uLik7Ci0gICAgICAgIH0KLQotI2lmIE9TKFdJTkRP
V1MpICYmIENQVShYODZfNjQpCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBT
bG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3Mu
Li4gYXJncykKLSAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24sIHRhZyk7CisgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKKyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXM2NEJpdFR5cGUoKSB7IHJldHVybiBzaXplb2YoVHlwZSkgPD0gODsgfQog
CkBAIC03NTcsODcgKzc0MSw1MSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQYXRoUmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoaXM2NEJpdFR5cGU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46OlJlc3VsdFR5cGU+KCksICJXaW42NCBjYW5ub3QgdXNlIHN0YW5kYXJkIGNh
bGwgd2hlbiByZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24sIHRhZyk7CisgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgICAgICB9CiAjZWxzZSAvLyBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uLCB0YWcpOwotICAgICAgICB9
Ci0jZW5kaWYgLy8gT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLQotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHRhZywgYXJncy4uLik7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgot
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIGludCByZXN1bHQs
IEFyZ3MuLi4gYXJncykKLSAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShvcGVyYXRpb24sIHRhZywg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7CiAgICAgICAgIH0KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4u
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzLCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAg
IHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFnKTsK
LSAgICAgICAgICAgIHNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAg
IH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG9wZXJhdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBhcmdzLi4u
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFn
LCBBcmdzLi4uIGFyZ3MpCi0gICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9w
ZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKKyAgICAgICAgICAgIHNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFnLCBhcmdzLi4uKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQotICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uLCB0YWcp
OworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbiwgdGFnLCBhcmdzLi4uKTsKKyAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24pOwog
ICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4K
QEAgLTg0OSw4ICs3OTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHVwZGF0
ZVRvcENhbGxGcmFtZSgpOwogCi0gICAgICAgIENhbGwgZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1
bmN0aW9uID0gQ29kZVB0cigpKTsKLSAgICAgICAgQ2FsbCBlbWl0TmFrZWRUYWlsQ2FsbChDb2Rl
UHRyIGZ1bmN0aW9uID0gQ29kZVB0cigpKTsKKyAgICAgICAgQ2FsbCBlbWl0TmFrZWRDYWxsKENv
ZGVQdHI8Tm9QdHJUYWc+IGZ1bmN0aW9uID0gQ29kZVB0cjxOb1B0clRhZz4oKSk7CisgICAgICAg
IENhbGwgZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0cjxOb1B0clRhZz4gZnVuY3Rpb24gPSBDb2Rl
UHRyPE5vUHRyVGFnPigpKTsKIAogICAgICAgICAvLyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVl
IG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcgaW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1p
dExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1w
TGlzdCYgZmFpbHVyZXMpOwpAQCAtOTM2LDcgKzg4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOwog
ICAgICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwotICAg
ICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qKTsKKyAg
ICAgICAgc3RhdGljIENvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihWTSopOwogCiAgICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsMTIgKzcw
NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBi
b29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewot
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0
aW9uKTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC03NzksMTIg
Kzc3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgICAgICBl
bHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
TWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0g
ZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcyk7CiAKQEAgLTgxOSwxNSArODE3LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzwKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlm
CiAKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0
aW9uKTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gp
Ci0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4o
cHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihyZXBhdGNoRnVuY3Rpb24pLCB0YWcsIHJlc3Vs
dFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC04ODYsMTUg
Kzg4MywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCi0gICAgUHRyVGFnIGNhbGxU
YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0VKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgY2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgY2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxK
X0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDIzMDc0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKE9wY29kZUlECiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MCw5ICsyNTAsOCBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCBy
ZWdUMik7CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgbV92
bSk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0
dXJuTG9jYXRpb24gPQotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFn
KSk7CisgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewog
ICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEoK
IHsKIH0KIAotSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiBy
ZWYsIEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2Rl
UmVmKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgOiBK
SVRDb2RlKGppdFR5cGUpCiAgICAgLCBtX3JlZihyZWYpCiB7CkBAIC0xMjEsMTIgKzEyMSwxMiBA
QCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoCiB2b2lkKiBKSVRDb2Rl
V2l0aENvZGVSZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVm
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcp
OwogICAgIGlmICghb2Zmc2V0KQogICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAKLSAgICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0
cjxjaGFyKj4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwot
ICAgIHJldHVybiB0YWdDb2RlUHRyKGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0LCBDb2RlUHRy
VGFnKTsKKyAgICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKiwg
SlNFbnRyeVB0clRhZz4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJl
dHVybiB0YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0
KTsKIH0KIAogdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCBvZmZzZXQpCkBAIC0xNjEsNyArMTYxLDcgQEAgRGlyZWN0SklUQ29kZTo6RGlyZWN0SklU
Q29kZShKSVRUeXBlIGppdAogewogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJ
VENvZGU6OkNvZGVSZWYgcmVmLCBKSVRDb2RlOjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRU
eXBlIGppdFR5cGUpCitEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVENvZGU6OkNvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBKSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdp
dGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYo
cmVmLCBqaXRUeXBlKQogICAgICwgbV93aXRoQXJpdHlDaGVjayh3aXRoQXJpdHlDaGVjaykKIHsK
QEAgLTE3Myw3ICsxNzMsNyBAQCBEaXJlY3RKSVRDb2RlOjp+RGlyZWN0SklUQ29kZSgpCiB7CiB9
CiAKLXZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJl
ZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2spCit2b2lkIERpcmVjdEpJVENv
ZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVm
LCBKSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CiAgICAgbV9yZWYgPSByZWY7CkBAIC0xODIsNyArMTgy
LDcgQEAgdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSQogICAgIEFTU0VS
VChtX3dpdGhBcml0eUNoZWNrKTsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2Rl
OjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0pJVENvZGU6OkNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01v
ZGUgYXJpdHkpCiB7CiAgICAgc3dpdGNoIChhcml0eSkgewogICAgIGNhc2UgQXJpdHlDaGVja05v
dFJlcXVpcmVkOgpAQCAtMTkzLDcgKzE5Myw3IEBAIEpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklU
Q29kZTo6YWRkcmVzc0YKICAgICAgICAgcmV0dXJuIG1fd2l0aEFyaXR5Q2hlY2s7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVQdHIoKTsK
KyAgICByZXR1cm4gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogfQogCiBOYXRpdmVKSVRDb2Rl
OjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBOYXRp
dmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0CiB7CiB9CiAKLU5hdGl2ZUpJVENv
ZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKK05hdGl2ZUpJ
VENvZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIEpJVFR5cGUg
aml0VHlwZSkKICAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCiB7CiB9CkBA
IC0yMTAsMTMgKzIxMCwxMyBAQCBOYXRpdmVKSVRDb2RlOjp+TmF0aXZlSklUQ29kZSgpCiB7CiB9
CiAKLXZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpCit2
b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gcmVmKQogewogICAgIEFTU0VSVCghbV9yZWYpOwogICAgIG1fcmVmID0gcmVmOwogfQogCi1K
SVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tN
b2RlIGFyaXR5KQorSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBOYXRpdmVKSVRDb2Rl
OjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX3JlZik7CiAgICAgc3dpdGNoIChhcml0eSkgewpAQCAtMjI2LDcgKzIyNiw3IEBAIEpJ
VENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0YKICAgICAgICAgcmV0dXJuIG1f
cmVmLmNvZGUoKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gQ29kZVB0cigpOworICAgIHJldHVybiBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7
CiB9CiAKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDggKzUwLDggQEAgY2xhc3MgVk07CiAK
IGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewog
cHVibGljOgotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKyAgICB0ZW1wbGF0ZTxQdHJU
YWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz47CisgICAg
dGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+OwogCiAgICAgZW51bSBKSVRUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCkBA
IC0xNzIsNyArMTcyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlw
ZSgpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJp
dHlDaGVja01vZGUpID0gMDsKKyAgICB2aXJ0dWFsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gYWRk
cmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwogICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7
CkBAIC0yMDUsNyArMjA1LDcgQEAgcHJpdmF0ZToKIGNsYXNzIEpJVENvZGVXaXRoQ29kZVJlZiA6
IHB1YmxpYyBKSVRDb2RlIHsKIHByb3RlY3RlZDoKICAgICBKSVRDb2RlV2l0aENvZGVSZWYoSklU
VHlwZSk7Ci0gICAgSklUQ29kZVdpdGhDb2RlUmVmKENvZGVSZWYsIEpJVFR5cGUpOworICAgIEpJ
VENvZGVXaXRoQ29kZVJlZihDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBKSVRUeXBlKTsKIAogcHVi
bGljOgogICAgIHZpcnR1YWwgfkpJVENvZGVXaXRoQ29kZVJlZigpOwpAQCAtMjE3LDMyICsyMTcs
MzIgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnModm9pZCopIG92ZXJyaWRlOwogCiBwcm90
ZWN0ZWQ6Ci0gICAgQ29kZVJlZiBtX3JlZjsKKyAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1f
cmVmOwogfTsKIAogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVS
ZWYgewogcHVibGljOgogICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklU
Q29kZShDb2RlUmVmLCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKKyAgICBEaXJl
Y3RKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUpOwogICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsK
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYsIENvZGVQdHIgd2l0aEFy
aXR5Q2hlY2spOworICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CiAKLSAgICBDb2Rl
UHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKKyAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKLSAgICBDb2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogY2xhc3MgTmF0aXZlSklUQ29k
ZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJVENv
ZGUoSklUVHlwZSk7Ci0gICAgTmF0aXZlSklUQ29kZShDb2RlUmVmLCBKSVRUeXBlKTsKKyAgICBO
YXRpdmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIEpJVFR5cGUpOwogICAgIHZpcnR1
YWwgfk5hdGl2ZUpJVENvZGUoKTsKICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENv
ZGVSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZjxKU0VudHJ5UHRyVGFn
Pik7CiAKLSAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlk
ZTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tN
b2RlKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyOCAr
MzgsMjggQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgRW50cnkgewogICAgICAgICBFbnRyeSgpIHsg
fQogCi0gICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxh
YmVsIGNvZGVMb2NhdGlvbikKKyAgICAgICAgRW50cnkodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQogICAgICAgICAg
ICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgbV9jb2Rl
TG9jYXRpb24oY29kZUxvY2F0aW9uKQogICAgICAgICB7IH0KIAogICAgICAgICBpbmxpbmUgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQot
ICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uKCkgeyByZXR1cm4g
bV9jb2RlTG9jYXRpb247IH0KKyAgICAgICAgaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGNvZGVMb2NhdGlvbigpIHsgcmV0dXJuIG1fY29kZUxvY2F0aW9uOyB9CiAKICAg
ICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIG1fY29kZUxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBtX2NvZGVMb2NhdGlvbjsKICAgICB9OwogCiBwdWJsaWM6Ci0gICAg
dm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWwgY29k
ZUxvY2F0aW9uKQorICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbikKICAgICB7CiAgICAgICAg
IG1fZW50cmllcy5hcHBlbmQoeyBieXRlY29kZUluZGV4LCBjb2RlTG9jYXRpb24gfSk7CiAgICAg
fQogCiAgICAgdm9pZCBmaW5pc2goKSB7IG1fZW50cmllcy5zaHJpbmtUb0ZpdCgpOyB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBmaW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZmluZCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byogZW50cnkgPQogICAgICAgICAgICAg
YmluYXJ5U2VhcmNoPEVudHJ5LCB1bnNpZ25lZD4obV9lbnRyaWVzLApAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS0+Ynl0ZWNvZGVJbmRl
eCgpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICBpZiAoIWVudHJ5KQotICAgICAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgcmV0dXJuIGVudHJ5LT5jb2Rl
TG9jYXRpb24oKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MSw5
ICsxNjEsOSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6cmVwb3J0SW5zdHJ1Y3Rpb25zCiAKIHZv
aWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mIG91dCwgTGlu
a0J1ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZyb20sIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCB0bykKIHsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmcm9tTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZnJvbSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9M
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZih0byk7Ci0gICAgZGlzYXNzZW1ibGUoZnJv
bUxvY2F0aW9uLCB0b0xvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzPHVpbnRwdHJfdD4oKSAtIGZy
b21Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzczx1aW50cHRyX3Q+KCksICIgICAgICAgICIsIG91
dCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IGZyb21Mb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxEaXNhc3NlbWJseVB0clRhZz4oZnJvbSk7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQdHJUYWc+IHRvTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KHRvKTsKKyAgICBkaXNhc3NlbWJsZShm
cm9tTG9jYXRpb24sIHRvTG9jYXRpb24uZGF0YUxvY2F0aW9uPHVpbnRwdHJfdD4oKSAtIGZyb21M
b2NhdGlvbi5kYXRhTG9jYXRpb248dWludHB0cl90PigpLCAiICAgICAgICAiLCBvdXQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhCiAgICAgICAgIGNhdGNo
Um91dGluZSA9IGNhdGNoUENGb3JJbnRlcnByZXRlci0+dS5wb2ludGVyOwogI2VuZGlmCiAgICAg
fSBlbHNlCi0gICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKTsKKyAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6OmdldEV4ZWN1
dGFibGVBZGRyZXNzKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKTsKICAgICAKICAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMzA3
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxOCArNzMsMTggQEAgSklUQnlJZEdlbmVyYXRv
cjo6SklUQnlJZEdlbmVyYXRvcigKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlu
a0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQogewogICAgIEFTU0VSVCht
X3N0YXJ0LmlzU2V0KCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gZmFzdFBhdGgu
bG9jYXRpb25PZihtX3N0YXJ0KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc3RhcnQgPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihtX3N0YXJ0KTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAgICAg
aW50MzJfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgc3RhcnQsIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAg
ICAgIHN0YXJ0LCBmYXN0UGF0aC5sb2NhdGlvbk9mPE5vUHRyVGFnPihtX2RvbmUpKTsKICAgICBB
U1NFUlQoaW5saW5lU2l6ZSA+IDApOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUg
PSBpbmxpbmVTaXplOwogCiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aENhbGwp
KTsKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fc2xvd1Bh
dGhDYWxsKSk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAg
ICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAg
c3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fc2xvd1BhdGhCZWdpbikpOwog
fQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24g
MjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNiwyMSArMTE2LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRMb2FkQ2hhcmFjdGUKICAgICBjb250OEJpdC5saW5rKHRoaXMpOwogfQogCi1BTFdBWVNfSU5M
SU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKK0FMV0FZ
U19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0
YXJnZXQpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOwotICAgIGFzc2Vy
dElzTnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ29k
ZVB0clRhZyk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0
ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uKSkpOworICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKSk7CiAgICAg
cmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0
TmFrZWRUYWlsQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwg
SklUOjplbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCiAg
ICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENhbGwoKTsKLSAgICBhc3NlcnRJc051bGxPclRh
Z2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgTmVhckNvZGVQdHJUYWcpOwot
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0
LCBGdW5jdGlvblB0cihmdW5jdGlvbikpKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
Pih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtl
ZENhbGw7CiB9CiAKQEAgLTE1MSwzNSArMTQ5LDM1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnVwZGF0ZVRvcENhbGxGcmEKICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0t
PnRvcENhbGxGcmFtZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uLCBQdHJUYWcgdGFnKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgZXhj
ZXB0aW9uQ2hlY2soKTsKICAgICByZXR1cm4gY2FsbDsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYm
IENQVShYODZfNjQpCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnICB0YWcpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0
dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewog
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShmdW5jdGlvbiwgdGFnKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5
cGUoZnVuY3Rpb24pOwogICAgIGV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgUHRyVGFnIHRhZykKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsgLy8gVGhlIGNhbGxlZSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0b3BDYWxs
RnJhbWUgdG8gdGhlaXIgY2FsbGVyCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgIGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJv
bGxiYWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgaW50IGRzdCkKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQogewotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0YWcpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTg4LDkgKzE4Niw5IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIFB0clRhZyB0YWcsIGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBp
bnQgZHN0KQogewotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0YWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxMSBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVMb2NhdGlv
bigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldChtX2lubGluZVNpemUpOyB9
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4g
bV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3Rh
cnQpOyB9Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0
dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
Q2FsbExvY2F0aW9uKTsgfQorICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgdGFnZ2VkIHdp
dGggSlNJbnRlcm5hbFB0clRhZyBpbnN0ZWFkIG9mIEpTRW50cnlUYWcuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcxMgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3Rh
cnQubGFiZWxBdE9mZnNldChtX2lubGluZVNpemUpOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVT
dGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Cisg
ICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0VudHJ5UHRyVGFnPiBzbG93UGF0aENhbGxMb2NhdGlvbigp
IHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoQ2FsbExvY2F0aW9uKTsgfQogICAgIAogICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0Nh
bGxIZWxwZXJzJiBqaXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGJvb2wgc2hvdWxk
RW1pdFByb2ZpbGluZyA9IHRydWUpCiAgICAgewpAQCAtMTI5LDcgKzEzMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxp
bmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkKKyAg
ICB2b2lkIGdlbmVyYXRlT3V0T2ZMaW5lKENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGF1dG8g
bGlua0p1bXBUb091dE9mTGluZVNuaXBwZXQgPSBbJl0gKCkgewogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzIGppdChjb2RlQmxvY2spOwpAQCAtMTM5LDEzICsxNDEsMTYgQEAgcHVibGljOgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCkgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2lubGluZVNpemUpKTsKICAgICAgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG1faW5saW5lU3RhcnQuZGF0YUxvY2F0aW9uKCksIGpp
dC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsKG1fY29kZS5jb2RlKCkpKTsKLSAgICAgICAgICAgIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29u
c3RhbnQganVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CisgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fY29k
ZS5jb2RlKCkpKTsKKyAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJU
YWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBvdXQgb2YgbGluZSBzdHVi
Iik7CiAgICAgICAgIH07CiAKICAgICAgICAgYXV0byByZXBsYWNlQ2FsbCA9IFsmXSAoKSB7Ci0g
ICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIG1faW5zdHJ1
Y3Rpb24pOwotICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgY2FsbFJlcGxhY2VtZW50LCBjYWxsVGFnKTsKKyNpZiBD
T01QSUxFUihNU1ZDKQorICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc2xvd1BhdGhDYWxsTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigp
LCBjYWxsUmVwbGFjZW1lbnQpOworI2Vsc2UKKyAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCkudGVtcGxhdGUgcmV0YWdn
ZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgY2FsbFJlcGxhY2VtZW50KTsKKyNlbmRpZgogICAgICAg
ICB9OwogCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwpAQCAtMTY4LDcgKzE3Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRv
bmVMb2NhdGlvbigpKTsKIAogICAgICAgICAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9D
T0RFX0ZPUigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwg
TmVhckNvZGVQdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJ
QyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZm
ZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBs
aW5lIGZhc3QgSUMgc25pcHBldCIpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugd29uJ3QgbmVlZCB0byByZWdlbmVyYXRlLCBzbyB3ZSBjYW4gd2lyZSB0aGUgc2xv
dyBwYXRoIGNhbGwKQEAgLTIxMCw3ICsyMTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoc2xvd1BhdGhKdW1wTGlzdCwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwog
CiAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAg
ICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiSklUTWF0aElDOiBnZW5l
cmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQiKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxv
Y2ssIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0
aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQiKTsKICAgICAgICAgfQogCiAgICAgICAgIGxpbmtK
dW1wVG9PdXRPZkxpbmVTbmlwcGV0KCk7CkBAIC0yMTgsMTcgKzIyMywxNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGZpbmFsaXplSW5saW5lQ29kZShjb25zdCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUm
IHN0YXRlLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIHsKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuZmFzdFBhdGhTdGFy
dCwgTmVhckNvZGVQdHJUYWcpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPiBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5m
YXN0UGF0aFN0YXJ0KTsKICAgICAgICAgbV9pbmxpbmVTdGFydCA9IHN0YXJ0OwogCiAgICAgICAg
IG1faW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Ci0gICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRo
RW5kLCBOb1B0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxOb1B0clRhZz4oc3RhdGUuZmFzdFBhdGhFbmQpKTsKICAgICAgICAgQVNTRVJUKG1faW5saW5l
U2l6ZSA+IDApOwogCiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0
aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAg
ICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuc2xvd1BhdGhDYWxsKSk7Cisg
ICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihzdGF0ZS5z
bG93UGF0aENhbGwpKTsKICAgICAgICAgbV9kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICBz
dGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoU3RhcnQpKTsKKyAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHN0YXRlLnNsb3dQ
YXRoU3RhcnQpKTsKICAgICB9CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJpdGhQcm9maWxlOyB9CkBAIC0yNDcsOCArMjUyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIEFyaXRoUHJvZmlsZSogbV9hcml0aFByb2ZpbGU7CiAgICAgSW5zdHJ1Y3Rpb24q
IG1faW5zdHJ1Y3Rpb247Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlOworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91
bGQgYmUgdGFnZ2VkIHdpdGggSlNJbnRlcm5hbFB0clRhZyBpbnN0ZWFkIG9mIEpTRW50cnlUYWcu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDcxMgor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IG1faW5saW5lU3RhcnQ7CiAgICAg
aW50MzJfdCBtX2lubGluZVNpemU7CiAgICAgaW50MzJfdCBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93
UGF0aENhbGxMb2NhdGlvbjsKICAgICBpbnQzMl90IG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsMTcgKzEwMzcsMTcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAotICAgIHBhdGNoQnVmZmVy
LmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxB
dE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICAKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9m
ZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAKICAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3By
b3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlHZW5lcmljLCBOb1B0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw4ICs2NDIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0
KTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBQdHJUYWcgZXhjZXB0
aW9uSGFuZGxlclRhZyA9IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc7Ci0gICAganVtcChyZXR1cm5W
YWx1ZUdQUiwgZXhjZXB0aW9uSGFuZGxlclRhZyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAg
ICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewpAQCAtNjgx
LDcgKzY4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24KIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJs
ZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJU
YWcsIGp1bXBUYWJsZSkpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY5Nyw3ICs2OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihJbnN0cnVjdGlvCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIs
IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CisgICAganVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
c3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyArNzExLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgp
OwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVt
cFRhYmxlKSk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTE2MywxNyArMTE2MiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVyCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2Rl
TG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0Rv
bmUpKTsKICAgICAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRh
ZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFk
ZHJlc3MudmFsdWUoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBIYXNQcm9wZXJ0
eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMjMyLDcgKzEyMzEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVyCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwg
SGFzUHJvcGVydHlQdHJUYWcsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVs
dCwgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRo
OwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJl
dHVybkFkZHJlc3MgPSBjYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsNyArODAxLDcg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aQogICAgIGlmICh0cnlQ
dXRCeVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOwor
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJf
UkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpOwogICAgIH0KICAgICBw
dXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9
CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VgogICAgIGlmICh0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vi
c2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
LSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMpOwogICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9i
amVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKQEAgLTkzMiwxMiArOTMyLDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFu
ZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIFB0clRhZyByZXN1bHRUYWcpCitzdGF0aWMgU2xvd1BhdGhS
ZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBj
YWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBQdHJUYWcg
dGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAog
ICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKIApAQCAtOTUzLDE5ICs5NTIsMTkgQEAg
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICAgICAgdm0t
Pmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAg
ICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSwgcmVzdWx0VGFnKSwKKyAgICAg
ICAgICAgICAgICB0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NFUlQoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CiAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlv
blRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgdm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgfQogCkBAIC05ODIs
MTcgKzk4MSwxNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAg
ICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVj
dERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
LSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFn
KS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJldHVy
blZhbHVlLCByZXN1bHRUYWcpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpT
RW50cnlQdHJUYWc+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5
cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCBy
ZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAKQEAgLTEwMDIsNyArMTAwMSw2IEBAIFNsb3dQ
YXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAK
LSAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKExpbmtDYWxsUmVzdWx0UHRyVGFn
LCB2bSk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5z
cGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKQEAgLTEwMTIsMjYgKzEwMTAsMjYgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwg
PSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlv
bkNlbGwpIHsKICAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWND
YXN0PEludGVybmFsRnVuY3Rpb24qPigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsK
IAogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRl
cm5hbEZ1bmN0aW9uLCBjb2RlUHRyLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBsaW5r
Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24s
IGNvZGVQdHIpOwogCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQ
dHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRU
YWcpOworICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQog
ICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RD
YWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgbGlua2VkVGFyZ2V0
VGFnKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFz
VmFsdWUsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwpAQCAtMTAzOSw4ICsxMDM3LDcg
QEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNl
cHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0g
cHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7Ci0gICAgICAgICAgICB2b2lkKiB0aHJv
d1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCBsaW5rZWRUYXJnZXRUYWcp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9OwogCkBAIC0xMDY1LDkgKzEwNjIsOSBAQCBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgaWYgKCFjYWxsTGlu
a0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAg
IGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxv
Y2ssIGNhbGxlZSwgY29kZVB0ciwgQ29kZVB0clRhZyk7CisgICAgICAgIGxpbmtGb3IoZXhlY0Nh
bGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCi0gICAg
cmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIGxpbmtlZFRh
cmdldFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxN
b2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7
CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUp
CkBAIC0xMDk3LDEwICsxMDk0LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
RGlyZWN0Q2EKIAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgp
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAg
ICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tB
cml0eSkucmV0YWdnZWQoQ29kZVB0clRhZywgTmVhckNvZGVQdHJUYWcpOworICAgICAgICBjb2Rl
UHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTEx
MTIsMTYgKzExMDksMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RD
YQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xv
dHMgPSBjYWxsTGlua0luZm8tPm1heE51bUFyZ3VtZW50cygpOwogICAgICAgICBpZiAoYXJndW1l
bnRTdGFja1Nsb3RzIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkpCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29k
ZVB0clRhZyk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRy
eXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0
eUNoZWNrTm90UmVxdWlyZWQpLnJldGFnZ2VkKENvZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsK
KyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCiAgICAgbGlua0RpcmVj
dEZvcihleGVjLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCi0gICAgRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2Fs
bGVlQXNGdW5jdGlvbkNlbGwsIFB0clRhZyByZXN1bHRUYWcpCisgICAgRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5j
dGlvbkNlbGwpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJh
bWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTExMzQsMTIgKzExMzEsMTIgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJ
bnRlcm5hbEZ1bmN0aW9uKj4oKnZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIHJlc3VsdFRh
ZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJ
bmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBU
aGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5m
bywgcmVzdWx0VGFnKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7
CkBAIC0xMTQ3LDEyICsxMTQ0LDExIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVh
bEZvcldpdGgKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVj
dXRhYmxlKCk7CiAgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtp
bmQpKSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBQ
dHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZt
KTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsK
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFn
LCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAK
QEAgLTExNjEsMjMgKzExNTcsMjAgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFs
Rm9yV2l0aAogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkg
PT0gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb24qPihlcnJvcikpOwogICAgICAgICBpZiAoZXJy
b3IpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGUodGhyb3dFeGNlcHRpb25UYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0
eSkucmV0YWdnZWQoQ29kZVB0clRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiBTbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0g
ICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlv
bktpbmQoKSA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bDsKLSAgICBQdHJUYWcgcmVzdWx0VGFnID0gcHRyVGFnKExpbmtQb2x5bW9ycGhpY0NhbGxSZXN1
bHRQdHJUYWcsIHZtKTsKLSAgICBTbG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gdmlydHVhbEZv
cldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCByZXN1bHRUYWcpOworICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFs
Rm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlv
bkNlbGwpOwogCiAgICAgbGlua1BvbHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJ
bmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpOwogICAgIApAQCAtMTE4Niwx
MSArMTE3OSw4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAog
U2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwot
ICAgIFB0clRhZyByZXN1bHRUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFn
LCB2bSk7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQsIHJlc3VsdFRhZyk7CisgICAg
cmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCkBAIC0xNTkwLDggKzE1ODAsNyBAQCBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgIGNvZGVCbG9j
ay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KS0+c2V0RGlkT3B0aW1pemUoVHJ1ZVRyaVN0YXRlKTsKICAgICAgICAgdm9pZCogdGFyZ2V0UEMg
PSB2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhERkdPU1JF
bnRyeVB0clRhZywgJnZtKTsKLSAgICAgICAgdGFyZ2V0UEMgPSByZXRhZ0NvZGVQdHIodGFyZ2V0
UEMsIHRodW5rVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgIHRhcmdl
dFBDID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBKSVRUaHVua1B0clRhZywgYml0d2lzZV9jYXN0
PFB0clRhZz4oZXhlYykpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBk
YXRhQnVmZmVyKTsKICAgICB9CiAKQEAgLTE2NDIsMTAgKzE2MzEsOCBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNl
bWVudC0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgY2FzZSBK
SVRDb2RlOjpGVExKSVQ6IHsKLSAgICAgICAgdm9pZCogZW50cnkgPSBERkc6OnByZXBhcmVDYXRj
aE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAg
ICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGVudHJ5LCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIq
PihlbnRyeSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVk
UmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICByZXR1cm4gZW50cnkuZXhlY3V0
YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpAQCAtMTY2NCwxMCArMTY1MSw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5
T1NSRW50ZXIKICAgICBzd2l0Y2ggKG9wdGltaXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkpIHsK
ICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogewot
ICAgICAgICB2b2lkKiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0
aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoZW50cnkpCi0g
ICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWcpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGVudHJ5KTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZH
OjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIHJldHVybiBlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KTsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0xODUyLDcgKzE4Mzcs
NyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHVp
bnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmco
YmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdl
dEluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQ
cm9wZXJ0eVB0clRhZykpOworICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLCBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyk7CiAgICAgICAgICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhi
YXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKTsKICAgICAgICAgICAgIH0KQEAgLTE5OTIsNyAr
MTk3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBp
ZiAodHJ5R2V0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAg
ICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQ
cm9wZXJ0eVB0clRhZykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKICAgICB9CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGdldEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MpKTsKQEAgLTIwMzIsNyArMjAxNyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGEKICAgICAgICAgaWYgKCsrYnlWYWxJbmZv
LT5zbG93UGF0aENvdW50ID49IDEwCiAgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2
bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybygpKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBv
cHRpbWl6ZS4KLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIEhhc1Byb3BlcnR5UHRyVGFnKSk7CisgICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FE
RFJFU1MpLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjA5Myw3ICsyMDc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZQogICAgICAgICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgYXV0
byBnZXRCeVZhbEZ1bmN0aW9uID0gYnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FE
RFJFU1MpLCBGdW5jdGlvblB0cihnZXRCeVZhbEZ1bmN0aW9uLCBHZXRQcm9wZXJ0eVB0clRhZykp
OworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgZ2V0QnlWYWxGdW5jdGlvbik7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVj
KTsKQEAgLTIyNDIsNyArMjIyNyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dp
dGNoQ2hhclcKICAgICAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgoKnZh
bHVlKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBKU1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKQEAgLTIyNjEsNyArMjI0Niw3
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoSW1tV2kKICAgICAgICAgcmVz
dWx0ID0ganVtcFRhYmxlLmN0aUZvclZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0Rv
dWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgYXNzZXJ0SXNU
YWdnZWRXaXRoKHJlc3VsdCwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7
CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3VsdCwgSlNTd2l0Y2hQdHJUYWcpOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjgxLDcgKzIy
NjYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgfSBl
bHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFi
bGVQdHJUYWcsICZqdW1wVGFibGUpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBK
U1N3aXRjaFB0clRhZyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3Vs
dCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9
CiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0p
CitKSVQ6OkNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIEp1bXBM
aXN0IGZhaWx1cmVzOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlN0cmlu
ZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBq
dW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAg
SnVtcCBub3RTdHJpbmcgPSBicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7
CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5z
dHJ1YwogICAgIHBva2UocmVnVDEsIHBva2VPZmZzZXQrKyk7CiAgICAgcG9rZShyZWdUMCwgcG9r
ZU9mZnNldCsrKTsKICAgICBwb2tlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgcG9rZU9mZnNl
dCsrKTsKLSAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemUsIE5vUHRyVGFnKTsKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOwogI2Vsc2UKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2Vs
ZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJN
LgogICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQAogbmFtZXNw
YWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKK0pJVDo6Q29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50
ZXJmYWNlSklUIGppdCh2bSk7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC05MSw3ICs5MSw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0
KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFn
LCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
R2V0QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4u
c2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFn
LCBkc3QsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgZHN0LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xv
d0RvbmVDYXNlID0ganVtcCgpOwogCkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3Ry
dWN0dXJlKE5vdEVxdWFsLCAKICAgICAgICAgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgCiAgICAgICAgIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0g
ICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2Rl
TG9jYXRpb25MYWJlbDxOb1B0clRhZz4obV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0
dWJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVk
ID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfdmFsKSk7CkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUsIEdldFByb3BlcnR5UHRyVGFnLCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5B
ZGRyZXNzID0gY2FsbDsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAg
ICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFB1dFByb3BlcnR5UHRyVGFnLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5m
bygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChq
dW1wKCkpOwogCkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoSW5zdHJ1YwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsT3B0aW1pemUsIFB1dFByb3BlcnR5UHRyVGFnLCByZWdUMCwgcmVnVDEsIHJl
Z1QyLCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xv
d1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdAogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTYyNSw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChJCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRW
UmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAt
Njg4LDcgKzY4OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIEdl
dFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50
LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
aWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmlt
cGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3QKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBp
ZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CkBAIC0xMjc5LDE3ICsxMjc5LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5VmFsKEJ5VmFsSW4KIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IG1fY29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJh
ZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5l
YXJDb2RlUHRyVGFnLAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJS
b3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJU
YWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25HZXRCeVZhbEdlbmVyaWMpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTMwNCw3ICsx
MzA0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAogCiAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFzdERvbmVDYXNlLCBieVZh
bEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRv
RG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0RvbmVDYXNlLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvTmV4dEhvdFBh
dGgpKTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkBAIC0xMzE3LDEyICsx
MzE3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBn
ZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklU
U3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBnZXRfYnlfdmFsIHdpdGggY2Fj
aGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgcHJv
cGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8g
PSBnZW4uc3R1YkluZm8oKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZh
bEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1
bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgR2V0UHJvcGVydHlQdHJUYWcpKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRh
Zz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkdldEJ5VmFsR2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQpAQCAtMTM2MSw4ICsxMzYxLDggQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9Q
dHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtG
b3JXcml0ZUJhcnJpZXIpIHsKICAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxs
cy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWco
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKQEAgLTEzNzIsMTYgKzEzNzIsMTYgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIGJvb2wgaXNEaXJl
Y3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29k
ZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAg
ICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAg
ICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgp
KTsKICAgICAgICAgCiAgICAgfSBlbHNlIHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRf
YnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCpt
X2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIH0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCBQdXRQ
cm9wZXJ0eVB0clRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbElu
Zm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKQEAgLTEzOTUsNyArMTM5NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2gKIAogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5
KCkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5m
by0+ZXhjZXB0aW9uSGFuZGxlcik7CkBAIC0xNDA3LDEyICsxNDA3LDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZm
ZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCisg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAn
JXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8g
Il9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBi
eVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
cmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJv
cGVydHlQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihi
eVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KHB1dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmlj
IDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw3IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShKSVRTdHViUm91dGluZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBj
b2RlKQorICAgIEpJVFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4mIGNvZGUpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAg
ICwgbV9yZWZDb3VudCgxKQogICAgIHsKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgogICAgIC8v
IFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGlu
c2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQdHI8SklUU3R1YlJvdXRpbmU+LgogICAgIHN0
YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHJhd0NvZGVQb2ludGVyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSklUU3R1YlJvdXRpbmUoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpJVFN0dWJSb3V0aW5lKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihyYXdDb2RlUG9pbnRlcikpKTsKICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB+SklUU3R1YlJv
dXRpbmUoKTsKQEAgLTY5LDExICs2OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGlzIGNvcHlhYmxlLCBidXQgYXQgdGhlIGNvc3Qgb2YgcmVmZXJlbmNlCiAgICAg
Ly8gY291bnRpbmcgY2h1cm4uIFJldHVybmluZyBhIHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9m
IHJlZHVjaW5nCiAgICAgLy8gdGhlIGNodXJuLgotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQorICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2NvZGU7IH0KICAgICAKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFzQ29k
ZVB0cihSZWY8SklUU3R1YlJvdXRpbmU+JiYgc3R1YlJvdXRpbmUpCisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gYXNDb2RlUHRyKFJlZjxKSVRT
dHViUm91dGluZT4mJiBzdHViUm91dGluZSkKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKTsKICAgICAgICAgQVNTRVJUKCEhcmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gbV9jb2RlOwogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDQ2ICs0NSw0NiBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlO
YXRpdmVDYWxsKFZNKiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICBy
ZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2
ZUNvbnN0cnVjdChWTSogdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAg
cmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3Rp
TmF0aXZlVGFpbENhbGwoVk0qIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwog
ICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdp
dGhvdXRTYXZlZFRhZ3MoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSogdm0p
CiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0s
IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6
Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNl
SklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlJ
bnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZN
KiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1
Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQg
ZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
KCkpOworICAgIENUSVN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQo
Z2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwogICAg
IGlmIChlbnRyeS5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZCBj
YW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRyaWVzLgogICAgICAgICBBU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CkBAIC05MywxMiArOTMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIEpJVFRodW5rczo6Y3RpU3R1YgogICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIENUSVN0dWJNYXA6Oml0
ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9yKTsKICAgICBpZiAoZW50
cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+KCk7CiAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKIH0KIApAQCAtMTIzLDEyICsxMjMs
MTIgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogCiAgICAgUmVm
UHRyPEpJVENvZGU+IGZvckNhbGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZW50cnkgPSBnZW5lcmF0b3Iodm0pOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnkgPSBnZW5lcmF0b3Iodm0pLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShlbnRyeSwgZW50cnkuY29kZSgpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29k
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRp
dmVDYWxsKHZtKSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKTsKKyAgICAgICAgZm9yQ2FsbCA9
IGFkb3B0UmVmKG5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNhbGwodm0pLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCkpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCi0g
ICAgUmVmPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29k
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRp
dmVDb25zdHJ1Y3Qodm0pKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOworICAgIFJlZjxKSVRD
b2RlPiBmb3JDb25zdHJ1Y3QgPSBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3Rp
TmF0aXZlQ29uc3RydWN0KHZtKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKSwgSklUQ29kZTo6
SG9zdENhbGxUaHVuaykpOwogICAgIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1
dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25O
dWxsKCksIGZ1bmN0aW9uLCBXVEZNb3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBpbnRy
aW5zaWMsIHNpZ25hdHVyZSwgbmFtZSk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHVi
TWFwLCBzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxO
YXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0aGlzKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1
MSwxNSBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAgdmlydHVhbCB+SklUVGh1bmtz
KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbChWTSopOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwo
Vk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2
ZUNvbnN0cnVjdChWTSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpTmF0aXZlVGFpbENhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlv
bkNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0
aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU3R1YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihU
aHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHVi
KFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVj
dG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5j
dGlvblN0dWIoVk0qLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2ln
bmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0dWJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFRo
dW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElT
dHViTWFwOwogICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogCiAgICAgdHlwZWRlZiBzdGQ6
OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5n
PiBIb3N0RnVuY3Rpb25LZXk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9D
b2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MDQsMjAgKzIwNCwyMCBAQCBQQ1RvQ29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENU
CiAgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTx1aW50cHRyX3Q+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgfTsK
IAotICAgIG1fcGNSYW5nZVN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9j
b2RlUmFuZ2VzLmZpcnN0KCkuc3RhcnQpLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCk7Ci0gICAg
bV9wY1JhbmdlRW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJ1aWxkZXIubV9jb2RlUmFuZ2Vz
Lmxhc3QoKS5lbmQpLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1JhbmdlU3Rh
cnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGJ1aWxkZXIubV9jb2RlUmFuZ2Vz
LmZpcnN0KCkuc3RhcnQpLmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCk7CisgICAgbV9wY1Jhbmdl
RW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihidWlsZGVyLm1fY29kZVJhbmdl
cy5sYXN0KCkuZW5kKS5kYXRhTG9jYXRpb248dWludHB0cl90PigpOwogICAgIG1fcGNSYW5nZUVu
ZCAtPSAxOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1aWxkZXIubV9jb2RlUmFu
Z2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6Q29k
ZVJhbmdlJiBjb2RlUmFuZ2UgPSBidWlsZGVyLm1fY29kZVJhbmdlc1tpXTsKLSAgICAgICAgdm9p
ZCogc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9j
YXRpb24oKTsKLSAgICAgICAgdm9pZCogZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvZGVS
YW5nZS5lbmQpLmRhdGFMb2NhdGlvbigpOworICAgICAgICB2b2lkKiBzdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxOb1B0clRhZz4oY29kZVJhbmdlLnN0YXJ0KS5kYXRhTG9jYXRpb24oKTsK
KyAgICAgICAgdm9pZCogZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihjb2Rl
UmFuZ2UuZW5kKS5kYXRhTG9jYXRpb24oKTsKICAgICAgICAgQVNTRVJUKG1fcGNSYW5nZVN0YXJ0
IDw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSk7CiAgICAgICAgIEFTU0VSVChtX3Bj
UmFuZ2VFbmQgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kKSAtIDEpOwogICAgICAgICBp
ZiAoc3RhcnQgPT0gZW5kKQogICAgICAgICAgICAgQVNTRVJUKGkgPT0gYnVpbGRlci5tX2NvZGVS
YW5nZXMuc2l6ZSgpIC0gMSk7CiAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgIEFTU0VS
VChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCku
ZGF0YUxvY2F0aW9uKCkgPT0gc3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxOb1B0clRhZz4oYnVpbGRlci5tX2NvZGVSYW5nZXNbaSAtIDFdLmVuZCkuZGF0
YUxvY2F0aW9uKCkgPT0gc3RhcnQpOwogCiAgICAgICAgIGJ1aWxkUENUYWJsZShzdGFydCk7CiAg
ICAgICAgIGJ1aWxkQ29kZU9yaWdpblRhYmxlKGNvZGVSYW5nZS5jb2RlT3JpZ2luKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03NCw2ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZEJ1aWxkTWFwcGluZzsKIH07CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzY2
NTg+CiBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UENUb0NvZGVPcmlnaW5NYXApOwogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBv
bHltb3JwaGljQ2FsbENhc2U6OmR1bXAoUHJpbnRTdHJlCiB9CiAKIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgRXhl
Y1N0YXRlKiBjYWxsZXJGcmFtZSwKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIs
IEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsCiAgICAgQ2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBW
ZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mIGNhc2VzLAogICAgIFVuaXF1ZUFycmF5PHVpbnQz
Ml90PiYmIGZhc3RDb3VudHMpCiAgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZVJlZiwg
dm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODMsNyArODMsNyBAQCBwcml2YXRlOgogY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUg
OiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwg
Vk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAog
ICAgICAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8mLCBjb25zdCBWZWN0
b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mLAogICAgICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4m
JiBmYXN0Q291bnRzKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNDAgKzY2LDM3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdGF0aWMgRnVuY3Rpb25QdHIgcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQogewotICAgIEZ1bmN0aW9u
UHRyIHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKKyAgICBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldDxPcGVyYXRpb25QdHJUYWc+KGNhbGwpOwogI2lmIEVOQUJMRShGVExfSklUKQog
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7Ci0gICAgICAgIGF1dG8qIGNhbGxUYXJnZXQgPSBjb2RlQmxvY2stPnZtKCktPmZ0bFRo
dW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoc2xvd1BhdGhUaHVuaykuY2FsbFRhcmdldCgp
OwotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFn
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5r
UHRyVGFnPigpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtl
eUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0
aW9uUHRyVGFnPigpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7
CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHVudGFn
Q0Z1bmN0aW9uUHRyKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpLCBQdXRQcm9wZXJ0eVB0clRh
ZyksIENGdW5jdGlvblB0clRhZyk7CisgICAgcmV0dXJuIHRhcmdldC5yZXRhZ2dlZDxDRnVuY3Rp
b25QdHJUYWc+KCk7CiB9CiAKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxl
ZUZ1bmN0aW9uLCBQdHJUYWcgY2FsbFRhZykKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+
IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkZUTEpJVCkgewogICAgICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwogICAg
ICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rp
b25QdHIgdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQgPSBN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsKKyAg
ICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPEpJVFRodW5rUHRyVGFnPigpKTsKICAgICAgICAgRlRMOjpTbG93UGF0aENh
bGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmsp
OwotICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uID0gRnVuY3Rpb25Q
dHIodGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5rKGtleSkuY29kZSgpKTsKLSAgICAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIGtl
eS5jYWxsUHRyVGFnKCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2Fs
bCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQo
bmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Y2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxs
VGh1bmsoa2V5KS5yZXRhZ2dlZENvZGU8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0o
Y29kZUJsb2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHIobmV3Q2FsbGVlRnVuY3Rpb24sIGNhbGxU
YWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVu
Y3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAogZW51bSBJbmxpbmVDYWNo
ZUFjdGlvbiB7CkBAIC0xNTAsNyArMTQ3LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBm
aXJlV2F0Y2hwb2ludAogICAgIH0KIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihHZXRCeUlES2luZCBraW5kKQoraW5saW5lIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0
aW9uKEdldEJ5SURLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBH
ZXRCeUlES2luZDo6Tm9ybWFsOgpAQCAtMTY2LDcgKzE2Myw3IEBAIGlubGluZSBGdW5jdGlvblB0
ciBhcHByb3ByaWF0ZU9wdGltaXppbmcKICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKIH0K
IAotaW5saW5lIEZ1bmN0aW9uUHRyIGFwcHJvcHJpYXRlR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURL
aW5kIGtpbmQpCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0
ZUdldEJ5SWRGdW5jdGlvbihHZXRCeUlES2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkg
ewogICAgIGNhc2UgR2V0QnlJREtpbmQ6Ok5vcm1hbDoKQEAgLTIxMCw3ICsyMDcsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0
aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2lu
ZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTI2Nyw3ICsyNjQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlECiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAg
ICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJ
ZEZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICB9
CkBAIC0zNzYsNyArMzczLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnlJRAogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1w
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRp
b25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXAoc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5MSw3ICszODgs
NyBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgCiAgICAg
aWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9w
cmlhdGVHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgIH0KIH0K
IApAQCAtNDYzLDcgKzQ2MCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIFB1dFByb3BlcnR5UHRyVGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0UHV0QnlJZFJlcGxhY2UoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTgyLDcgKzU3OSw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUo
KSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC01OTcsNyArNTk0LDcgQEAgdm9pZCByZXBhdGNoUHV0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIAogICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBQdXRQcm9wZXJ0eVB0clRhZyk7
CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNs
b3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7CiAgICAgfQogfQogCkBAIC02NzEsNyArNjY4LDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW4oCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcCgKICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9y
SW4oKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjg2LDI0ICs2ODMsMjMg
QEAgdm9pZCByZXBhdGNoSW4oCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogICAgIGlmICh0cnlDYWNoZUluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNG
b3VuZCwgc2xvdCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgb3BlcmF0aW9uSW4sIENGdW5jdGlvblB0clRhZyk7CisgICAgICAgIGZ0bFRo
dW5rQXdhcmVSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgb3BlcmF0aW9uSW4pOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0Zv
cihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiwgUHRyVGFnIGxpbmtUYWcpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFy
Q2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVs
KGNvZGVSZWYucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oY29kZVJlZi5j
b2RlKCkpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlua1Rh
ZykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwg
Y2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJl
dGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Ns
b3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBQdHJUYWcg
bGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsIHZtKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlu
a0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuaywg
bGlua1RhZyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlu
a0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCAqdm0s
IG51bGxwdHIsIHRydWUpKTsKIH0KIApAQCAtNzIxLDcgKzcxNyw3IEBAIHN0YXRpYyBKU0NlbGwq
IHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAKIAogdm9pZCBsaW5rRm9yKAogICAgIEV4ZWNTdGF0
ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyLCBQdHJUYWcgY29kZVRhZykKKyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKCkpOwogCkBAIC03NDMsMTQgKzczOSwxMyBAQCB2b2lkIGxpbmtGb3IoCiAgICAg
aWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBk
YXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVD
b2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCks
IENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgTmVhckNvZGVQdHJU
YWcpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIp
KTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+
bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAo
Y2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxM
aW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWco
TGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsKLSAgICAgICAgbGlua1Nsb3dGb3IoJnZt
LCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1Rh
Zyk7CisgICAgICAgIGxpbmtTbG93Rm9yKCZ2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBo
aWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAt
NzU5LDcgKzc1NCw3IEBAIHZvaWQgbGlua0ZvcigKIAogdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAgICAgCkBAIC03NzQsOCArNzY5LDggQEAgdm9p
ZCBsaW5rRGlyZWN0Rm9yKAogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENh
bGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcFRvTm9wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2Rl
TG9jYXRpb25MYWJlbChjb2RlUHRyKSk7Ci0gICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKwogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCAmY2FsbExpbmtJ
bmZvKTsKIH0KQEAgLTc4OSw3ICs3ODQsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtT
bG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZN
KiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmLCBQdHJUYWcgY29kZVRhZykKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3Qo
KSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKQEAgLTgwMSw3ICs3
OTYsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRj
aCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVH
UFIoKSksIDApOwotICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVm
LCBjb2RlVGFnKTsKKyAgICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJl
Zik7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOwogICAgIH0KICAgICBjYWxs
TGlua0luZm8uY2xlYXJTZWVuKCk7CkBAIC04MTYsOCArODExLDcgQEAgdm9pZCB1bmxpbmtGb3Io
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSkKICAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZv
LmhvdFBhdGhPdGhlcigpLCAiXG4iKTsKICAgICAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rQ2FsbFB0clRhZywgJnZtKTsKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZv
LCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLCBsaW5rVGFnKTsKKyAgICBy
ZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogdm9pZCBs
aW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQpAQCAtODI5LDE2ICs4MjMsMTUgQEAgdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4
ZWMsIENhbAogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2Nr
KSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVP
cmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7
CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsICZ2
bSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVu
a0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5m
bywgdmlydHVhbFRodW5rLCBsaW5rVGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNh
bGxMaW5rSW5mbyk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRo
dW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUo
dmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQogCiBuYW1lc3BhY2Ugewogc3Ry
dWN0IENhbGxUb0NvZGVQdHIgewogICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogfTsKIH0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKIApA
QCAtMTAzNCw3ICsxMDI3LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAK
ICAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlh
bnQoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAg
ICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwogICAgICAgICAgICAgY29k
ZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5h
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOwpAQCAtMTA4MCw3ICsxMDczLDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogI2VuZGlmCiAgICAgfQogICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BS
SW5mbzo6cmVnVDQpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwpAQCAtMTA5OCwyMSArMTA5MSwyMCBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVk
IGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVj
b3JhdGVkIGJvdHRvbSBiaXQuCiAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQ
dHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKICAgICAgICAgdm9p
ZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRp
b24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOwor
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8
SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnRQdHJUYWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOwogI2Vsc2UKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIu
Y29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQ
dHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChp
c1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFi
ZWxBdE9mZnNldCgwKSk7Ci0gICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3Jw
aGljQ2FsbFB0clRhZywgJnZtKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJ
U3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAog
ICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNv
ZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAorICAgICAgICAgICAgY2FsbGVy
Q29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAg
ICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRz
ICVzIiwKICAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRv
Q1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAg
ICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCkBAIC0xMTIx
LDcgKzExMTMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4o
KSksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGgg
aXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9u
IDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmln
Z2VyIHRoZSBzbG93IHBhdGgKQEAgLTExMzksNyArMTEzMSw3IEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbCgKIAogdm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlJREtpbmQga2luZCkKIHsKLSAgICBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlv
bigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3Bl
cnR5UHRyVGFnKTsKKyAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlk
RnVuY3Rpb24oa2luZCkpOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHVi
SW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCkBAIC0xMTU4LDcg
KzExNTAsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOwogICAgIH0KIAotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uLCBQdXRQ
cm9wZXJ0eVB0clRhZyk7CisgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgdm9pZCBidWlsZEdldEJ5SURQ
cm90b0xpc3QoRXhlY1N0YXRlKiwgSgogdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlz
dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQg
cmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdh
c0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBs
aW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgUHRyVGFnKTsKLXZvaWQgbGlua0RpcmVjdEZv
cihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7Cit2b2lkIGxpbmtEaXJlY3RGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJs
b2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Ns
b3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0ZvcihWTSYsIENh
bGxMaW5rSW5mbyYpOwogdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8mKTsKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0
ZSosIENhbAogdm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBHZXRCeUlES2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwogdm9pZCByZXNldEluKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
Ci12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25D
YWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcpOwordm9p
ZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYy
LDggQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+bW92ZShKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVy
LCBKSVQ6OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZElt
bVB0cihtX3BjKSwgSklUOjphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoU2xvd1BhdGhQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgSklU
OjpDYWxsIGNhbGwgPSBtX2ppdC0+Y2FsbCh0YWcpOwotICAgICAgICBtX2ppdC0+bV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25Q
dHIobV9zbG93UGF0aEZ1bmN0aW9uLCB0YWcpKSk7CisgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0g
bV9qaXQtPmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4obV9zbG93UGF0aEZ1bmN0aW9uKSkpOwogCiAjaWYgQ1BVKFg4Nikg
JiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgbV9qaXQtPmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDE2KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDI1ICsxNjQsMjMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBmYWxsYmFjaywgY29uc3QgY2hhciogdGh1bmtLaW5kKQorICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAg
ICAgewogICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RI
VU5LX0lEKTsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxv
Y2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9m
YWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykK
ICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2Fs
bHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBDb2RlUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsK
KyAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVn
aXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVl
LiBMaWtlIGFueSBzZW5zaWJsZSBhcmNoaXRlY3R1cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2Fs
bERvdWJsZVRvRG91YmxlKEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgICAgICB2b2lkIGNhbGxE
b3VibGVUb0RvdWJsZShGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihmdW5jdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3BlY2lhbGl6
ZWRUaHVua1B0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICAgICAgbV9jYWxscy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoY2FsbCh0YWcpLCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkp
OworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChKSVRUaHVu
a1B0clRhZyksIGZ1bmN0aW9uLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1Jl
dHVybihGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3Vi
bGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwpAQCAtMjA5LDcgKzIwNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxs
LCBGdW5jdGlvblB0cj4+IG1fY2FsbHM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwg
RnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+Pj4gbV9jYWxsczsKICAgICB9OwogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMTEgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVk
ZSAiUHRyVGFnLmgiCisKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgVk07Ci1jbGFzcyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY7Cit0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjsKIAotdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvciko
Vk0qKTsKK3VzaW5nIFRodW5rR2VuZXJhdG9yID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiAoKikoVk0qKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDIz
MDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZh
bGlkYXRpb24oQ0NhbGxICiAKIC8vIFdlIHdpbGwganVtcCBoZXJlIGlmIHRoZSBKSVQgY29kZSB0
cmllcyB0byBtYWtlIGEgY2FsbCwgYnV0IHRoZQogLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2Rl
KSBkZWNpZGVzIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICAKQEAgLTcwLDIzICs3MCwxOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRp
b25Gcm9tCiAKICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogCi0gICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWco
SklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIsIGNhbGxUYWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0gICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsK
KyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKLSAgICBQdHJUYWcgdGhyb3dFeGNl
cHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgdGhyb3dFeGNlcHRpb25UYWcsICJUaHJvdyBleGNlcHRpb24g
ZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xv
dyBwYXRoIHRodW5rIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxs
SGVscGVycyYgaml0LCBWTSogdm0sIFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5j
dGlvbiwgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKQorc3RhdGljIHZvaWQgc2xvd1Bh
dGhGb3IoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBz
bG93UGF0aEZ1bmN0aW9uKQogewotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5r
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0KICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgq
dm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOwpAQCAtOTksOSArOTQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNs
b3dQYXRoRnVuY3Rpb24sIGNhbGxUYWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7Ci0g
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwog
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgOCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKQEAgLTEwOSw5ICsxMDQsOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKHNsb3dQYXRoRnVuY3Rpb24pPihHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihz
bG93UGF0aEZ1bmN0aW9uLCBjYWxsVGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwot
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRh
Zyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMTIy
LDcgKzExNyw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIDMpIFRoZSBmdW5j
dGlvbiB0byBjYWxsLgogICAgIC8vIFRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIEdQUiB3aWxsIGhv
bGQgYSBub24temVybyB2YWx1ZSBmb3IgdGFpbCBjYWxscy4KIAotICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdl
dFRhZyk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEpTRW50cnlQdHJUYWcpOwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwog
ICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKIApAQCAtMTMzLDEwICsxMjgsMTAgQEAgc3Rh
dGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAg
IGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRh
Zyk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUg
c3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZl
IHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysr
IGZ1bmN0aW9uIGNhbGwKQEAgLTE0NSwzMyArMTQwLDI5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAvLyBiZWVuIGFkanVzdGVkLCBhbmQgYWxsIG90aGVy
IHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4KICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCi0gICAgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKExpbmtDYWxs
UmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0NhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5r
Q2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBsaW5rVGFn
LCAiTGluayBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsi
KTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNh
bGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3Ry
dWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAg
IFB0clRhZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWND
YWxsUmVzdWx0UHRyVGFnLCB2bSk7Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9u
TGlua1BvbHltb3JwaGljQ2FsbCwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworICAgIHNsb3dQ
YXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwogCi0gICAgUHRy
VGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOwogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBsaW5rVGFnLCAiTGluayBwb2x5bW9ycGhpYyBj
YWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1
bmsiKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVn
YW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cKIC8vIHBhdGggdmlydHVhbCBjYWxsIHNv
IHRoYXQgd2UgY2FuIGVuYWJsZSBmYXN0IHRhaWwgY2FsbHMgZm9yIG1lZ2Ftb3JwaGljCiAvLyB2
aXJ0dWFsIGNhbGxzIGJ5IHVzaW5nIHRoZSBzaHVmZmxlci4KIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4MzEKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBp
biByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCiAgICAgLy8g
VGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0
ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTIzMiwxMiArMjIzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMg
d2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwg
Y2FsbENvZGUoaml0LmxhYmVsKCkpOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1Q0LCBDb2RlUHRyVGFnKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpyZWdUNCwgSlNFbnRyeVB0clRhZyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5p
c1RhaWxDYWxsKCkpIHsKICAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQ
UkluZm86OnJlZ1Q0KTsKICAgICB9Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIENvZGVQ
dHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBKU0VudHJ5UHRyVGFnKTsKIAog
ICAgIG5vdEpTRnVuY3Rpb24ubGluaygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaElmTm90VHlwZShHUFJJbmZvOjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKQEAg
LTI0OCwxMyArMjM5LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3Io
Vk0KICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qg
a25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBQdHJU
YWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0
UHRyVGFnLCB2bSk7Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENh
bGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBv
cGVyYXRpb25WaXJ0dWFsQ2FsbCk7CiAKLSAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5r
VmlydHVhbENhbGxQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0
Y2hCdWZmZXIsIGxpbmtUYWcsCisgICAgICAgIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0
clRhZywKICAgICAgICAgIlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2Fs
bExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxs
TGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNv
bnN0cnVjdCIpOwogfQpAQCAtMjYyLDcgKzI1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsVGh1bmtGb3IoVk0KIGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVu
dGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsK
IGVudW0gY2xhc3MgVGh1bmtGdW5jdGlvblR5cGUgeyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0
aW9uIH07CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9y
KFZNKiB2bSwgVGh1bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxs
KQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9y
R2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5jdGlvblR5cGUsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50
ZXJWaWFDYWxsKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGxvZyBT
aGFkb3dDaGlja2VuIHByb2xvZ3VlIHBhY2tldHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4OQpAQCAtMzA3LDkgKzI5Niw5IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5
cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQ
dHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAg
ICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBv
aXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVP
ZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRv
RnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZVB0clRhZyk7Cisg
ICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSks
IEpTRW50cnlQdHJUYWcpOwogCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0z
MjgsNyArMzE3LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQog
ICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6
OmVzaSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSks
IFg4NlJlZ2lzdGVyczo6cjkpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVk
SW1tNjQoTmF0aXZlQ29kZVBvaXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAg
aml0LnhvcjY0KFg4NlJlZ2lzdGVyczo6ZXNpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICBqaXQu
Y2FsbChYODZSZWdpc3RlcnM6OnI5LCBDb2RlUHRyVGFnKTsKKyAgICBqaXQuY2FsbChYODZSZWdp
c3RlcnM6OnI5LCBKU0VudHJ5UHRyVGFnKTsKIAogI2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZl
bnRpb246ICAgICAgZihlY3gsIGVkeCwgcjgsIHI5LCAuLi4pOwpAQCAtMzQzLDkgKzMzMiw5IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtG
dW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAg
aml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAg
ICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBv
aXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRl
cmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVu
Y3Rpb24pLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0
aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJ
bnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246
Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBKU0VudHJ5UHRyVGFnKTsKIAogICAg
IGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0
X3QpKSwgSlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAt
MzY3LDcgKzM1Niw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UK
ICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3Rl
cnM6OngxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQp
KSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTY0KE5hdGl2ZUNvZGVQb2lzb246OmtleSgpKSwgQVJNNjRSZWdpc3RlcnM6OngxKTsK
ICAgICBqaXQueG9yNjQoQVJNNjRSZWdpc3RlcnM6OngxLCBBUk02NFJlZ2lzdGVyczo6eDIpOwot
ICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJzOjp4MiwgQ29kZVB0clRhZyk7CisgICAgaml0LmNh
bGwoQVJNNjRSZWdpc3RlcnM6OngyLCBKU0VudHJ5UHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkg
fHwgQ1BVKE1JUFMpCiAjaWYgQ1BVKE1JUFMpCkBAIC0zODMsOSArMzcyLDkgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlw
ZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0
cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7
CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5j
dGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQu
Y2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpT
SW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9m
ZnNldFRvRnVuY3Rpb24pLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0
LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BS
MSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENv
ZGVQdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0lu
dGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2
ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgSlNFbnRyeVB0clRhZyk7CiAKICNpZiBDUFUoTUlQUykKICAg
ICAvLyBSZXN0b3JlIHN0YWNrIHNwYWNlCkBAIC00MjksOSArNDE4LDggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRl
cmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIw
KTsKICNlbmRpZgotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRXhjZXB0aW9uSGFuZGxlclB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdGFnKSks
IEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QzLCB0YWcpOworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9u
KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOwogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0lu
dGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgT1MoV0lORE9XUykKQEAg
LTQ0MSw0MCArNDI5LDQwIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9y
R2UKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIENvZGVQdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVu
a0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUi
IDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAi
VGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0
U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtp
bmQpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1
bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5
VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdz
ICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdp
dGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZt
KQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBl
OjpKU0Z1bmN0aW9uLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwg
Q29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9y
R2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNhbGws
IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5j
dGlvbiwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50
ZXJuYWxGdW5jdGlvbiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVu
Y3Rpb25UeXBlOjpJbnRlcm5hbEZ1bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogCkBAIC00OTQsNyArNDgyLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5sb2FkUHRyKEpT
SW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWU6OnJldHVyblBDT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmFkZFB0cihK
U0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBleHRyYVRlbXApOwogICAgIGppdC51bnRhZ1B0cihH
UFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKLSAgICBQdHJUYWcgdGVtcFJldHVyblBDVGFnID0g
cHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBQdHJUYWcgdGVt
cFJldHVyblBDVGFnID0gc3RhdGljX2Nhc3Q8UHRyVGFnPihyYW5kb20oKSk7CiAgICAgaml0Lm1v
dmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodGVtcFJldHVyblBDVGFnKSwgZXh0cmFU
ZW1wKTsKICAgICBqaXQudGFnUHRyKEdQUkluZm86OnJlZ1QzLCBleHRyYVRlbXApOwogICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwpAQCAt
NjE5LDE5ICs2MDcsMTcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0
bwogI2VuZGlmIC8vIEVuZCBvZiBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uLgogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgUHRyVGFnIGFy
aXR5Rml4dXBUYWcgPSBwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgdm0pOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBhcml0eUZpeHVwVGFnLCAiZml4dXAgYXJpdHkiKTsK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJm
aXh1cCBhcml0eSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJl
YWNoYWJsZUdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsK
IAogICAgIGppdC5icmVha3BvaW50KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1
bmtQdHJUYWcsIHZtKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1
bmtUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9CiAKIHN0
YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZt
KQpAQCAtNjcyLDcgKzY1OCw3IEBAIHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXpl
ZFRodW4KICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgZHN0KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4
MCw3ICs2NjYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuCiAg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZt
KSwgImNoYXJDb2RlQXQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKQEAgLTY4OSw3ICs2NzUs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0CiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJB
dCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hh
ckNvZGVUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQodm0sIDEpOwogICAgIC8vIGxvYWQgY2hhciBjb2RlCkBAIC02OTksNyArNjg1LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmlu
YWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUi
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnSnVtcDsKQEAgLTcyMCwxMSArNzA2LDExIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjbHozMlRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICgh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOwogCiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
aml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMCk7CkBAIC04ODAsMTIgKzg2NiwxMiBAQCBkZWZpbmVVbmFyeURvdWJs
ZU9wV3JhcHBlcih0cnVuYyk7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0g
MC41OwogICAgIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91Ymxl
T3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3Vt
ZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQu
cmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAu
bGluaygmaml0KTsKQEAgLTkyMywxMSArOTA5LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
bG9vclRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxvb3IiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGNlaWxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6
ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2Vp
bCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7
CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwpAQCAtOTQ2LDExICs5MzIsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxU
aHVua0dlbmVyYXRvcgogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJjZWlsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0
cnVuY1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMp
IHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwog
ICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
bm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKQEAgLTk2OSwxMSArOTU1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cnVuY1Ro
dW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAidHJ1bmMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJv
dW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5k
KSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsK
ICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCk7CkBAIC0xMDAzLDM3ICs5ODksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5k
VGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJs
ZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVU
b0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhw
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
Zih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
Zih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihV
bmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJsb2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CkBAIC0xMDg2LDcgKzEwNzIsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9uSW50QXJnMEp1bXA7CkBAIC0xMTE3LDExICsxMTAzLDExIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiaW11bCIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoKnZtLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0xMTI5LDExICsxMTE1LDExIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVyYXQKIAogICAgIHJldHVybiBqaXQuZmluYWxp
emUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKICNlbHNl
Ci0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1
bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICAKQEAgLTEyMTcsMTYgKzEyMDMsMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhp
c05vQXJnc0Z1bgogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENv
ZGVQb2lzb246OmtleSgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgIGppdC54b3I2NChHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwogI2VuZGlmCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIENvZGVQdHJUYWcpOwotICAgIGppdC5jYWxsKEdQUklu
Zm86OnJlZ1QwLCBDb2RlUHRyVGFnKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVn
VDAsIEpTRW50cnlQdHJUYWcpOwogCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAg
ICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7
CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQ
dHJUYWc+KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZt
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBsaW5rQnVmZmVyLCBDb2Rl
UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGgg
bm8gYXJndW1lbnRzIik7CisgICAgICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3Bl
Y2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRz
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDQ2ICsyNiw0NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAKICNpZiBFTkFCTEUoSklUKQog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjsKK3RlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwogY2xhc3MgVk07CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2FsbExpbmtJbmZvJiwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxU
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rRm9yKFZNKiwgQ2FsbExpbmtJbmZvJik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29u
c3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENh
bGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbFdp
dGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlu
dGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5y
ZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2Rl
QXRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5r
R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9y
KFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVu
a0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVuayhWTSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihW
TSosIENhbGxMaW5rSW5mbyYpOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91
dFNhdmVkVGFnc0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4
dXBHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSop
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
YnNUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZXhwVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZmxvb3JUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFu
ZG9tVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSopOwogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDI2ICs1OCwyNiBAQCB2b2lkIGluaXRpYWxpemUoKQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAg
ICBsbGludF9lbnRyeSgmRGF0YTo6c19vcGNvZGVNYXApOwogCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSURTOyArK2kpIHsKLSAgICAgICAgUHRyVGFnIHRhZyA9
IChpID09IG9wX2NhdGNoKSA/IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcgOiBCeXRlY29kZVB0clRh
ZzsKLSAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bj
b2RlTWFwW2ldLCB0YWcpOwotICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9P
Rl9CWVRFQ09ERV9JRFM7ICsraSkKKyAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdD
b2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCBCeXRlY29kZVB0clRhZyk7CiAKICAgICBzdGF0
aWMgY29uc3QgUHRyVGFnIHRhZ3NGb3JPcGNvZGVbXSA9IHsKLSAgICAgICAgQ29kZVB0clRhZywg
Ly8gbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9l
dmFsX3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X21vZHVsZV9wcm9ncmFt
X3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxs
X3Byb2xvZ3VlCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfcHJvbG9ndWUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2sKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjawotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9n
ZW5lcmljX3JldHVybl9wb2ludAorICAgICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHRh
Z2dlZCB3aXRoIEpTSW50ZXJuYWxQdHJUYWcgaW5zdGVhZCBvZiBKU0VudHJ5VGFnLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzEyCisgICAg
ICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgSlNF
bnRyeVB0clRhZywgLy8gbGxpbnRfZXZhbF9wcm9sb2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFn
LCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZQorICAgICAgICBKU0VudHJ5UHRyVGFn
LCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZQorICAgICAgICBKU0VudHJ5UHRy
VGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlCisgICAgICAgIEpT
RW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrCisgICAg
ICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlf
Y2hlY2sKKyAgICAgICAgSlNFbnRyeVB0clRhZywgLy8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9p
bnQKICAgICAgICAgQnl0ZWNvZGVQdHJUYWcsIC8vIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRo
X3RyYW1wb2xpbmUKICAgICAgICAgRXhjZXB0aW9uSGFuZGxlclB0clRhZywgLy8gbGxpbnRfdGhy
b3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9u
YXRpdmVfY2FsbF90cmFtcG9saW5lCi0gICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X25hdGl2
ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQotICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZVB0clRhZywgLy8gbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUKKyAgICAgICAgSlNFbnRy
eVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZQorICAgICAgICBKU0VudHJ5
UHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKKyAgICAgICAgSlNF
bnRyeVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCisg
ICAgICAgIEpTRW50cnlQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVj
dF90cmFtcG9saW5lCiAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIC8vIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uCiAgICAgfTsKIApAQCAtODksNyArODksNyBAQCB2b2lkIGluaXRpYWxp
emUoKQogICAgICAgICBEYXRhOjpzX29wY29kZU1hcFtvcGNvZGVJRF0gPSB0YWdDb2RlUHRyKERh
dGE6OnNfb3Bjb2RlTWFwW29wY29kZUlEXSwgdGFnc0Zvck9wY29kZVtpXSk7CiAgICAgfQogCi0g
ICAgdm9pZCogaGFuZGxlciA9IExMSW50OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2Zyb21fc2xv
d19wYXRoX3RyYW1wb2xpbmUpOworICAgIHZvaWQqIGhhbmRsZXIgPSBMTEludDo6Z2V0RXhlY3V0
YWJsZUFkZHJlc3MobGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtYXhPcGNvZGVMZW5ndGggKyAxOyArK2kpCiAgICAgICAgIERh
dGE6OnNfZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zW2ldLnUucG9pbnRlciA9IGhhbmRsZXI7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHJldmlzaW9uIDIzMDc0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCi0jaW5jbHVkZSAiUHRyVGFnLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NSw3
ICs1NSw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIEluc3RydWN0aW9uKiBleGNlcHRpb25JbnN0
cnVjdGlvbnMoKTsKICAgICBmcmllbmQgT3Bjb2RlKiBvcGNvZGVNYXAoKTsKICAgICBmcmllbmQg
T3Bjb2RlIGdldE9wY29kZShPcGNvZGVJRCk7Ci0gICAgZnJpZW5kIHZvaWQqIGdldENvZGVQdHIo
T3Bjb2RlSUQpOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihPcGNvZGVJ
RCk7CiB9OwogCiB2b2lkIGluaXRpYWxpemUoKTsKQEAgLTc5LDE2ICs4MCw0MCBAQCBpbmxpbmUg
T3Bjb2RlIGdldE9wY29kZShPcGNvZGVJRCBpZCkKICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgaWQpCitBTFdBWVNfSU5MSU5FIHZvaWQqIGdldEV4
ZWN1dGFibGVBZGRyZXNzKE9wY29kZUlEIG9wY29kZUlEKQogewotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihnZXRPcGNvZGUoaWQpKTsKKyAgICBBU1NFUlQob3Bjb2RlSUQgPj0g
TlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGdldE9wY29kZShvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlE
IG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGdldE9wY29kZShvcGNvZGVJRCkpOworfQorCit0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFn
PiBnZXRDb2RlUmVmKE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldENvZGVQdHI8dGFn
PihvcGNvZGVJRCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKK3RlbXBsYXRlPFB0clRhZyB0YWc+
CitBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bj
b2RlSUQpCit7CisgICAgQVNTRVJUKG9wY29kZUlEID49IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMp
OworI2lmIENPTVBJTEVSKE1TVkMpCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRD
b2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2Vs
c2UKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8dGFn
PihvcGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5kaWYKK30KIAot
QUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKE9wY29kZUlEIGNvZGVJ
ZCkKKyNlbHNlCitBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgaWQpCiB7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyKGNvZGVJ
ZCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRPcGNvZGUoaWQpKTsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRy
eXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0
NiwxMiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgaWYg
KFZNOjpjYW5Vc2VKSVQoKSkgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewog
ICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgICAgIGFkb3B0
UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5
VGh1bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tU
aHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAg
ICAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
aykpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAot
ICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5j
dGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RK
SVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
Q29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtNTksMTkgKzU5LDE5IEBAIHN0YXRpYyB2
b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0KICAgICBVTlVTRURfUEFSQU0odm0pOwog
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9w
cm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
aykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShnZXRDb2RlUmVm
PEpTRW50cnlQdHJUYWc+KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgZ2V0Q29k
ZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayks
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxs
aW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoZ2V0Q29k
ZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
KSwgZ2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGlj
IHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5r
R2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKS5yZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAg
ICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5jb2Rl
KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5
LDcgKzc5LDcgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDbwogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTElu
dENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50
X2V2YWxfcHJvbG9ndWUpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKICAgICAgICAgYWRv
cHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSkpOwogfQpAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
Vk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVm
ID0gdm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1
Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsK
ICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICAgICAgYWRvcHRSZWYoKm5l
dyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB2
b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJl
ZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dy
YW1fcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBj
b2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9wcm9ncmFtX3Byb2xvZ3Vl
KTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpKTsKIH0KQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9n
cmFtRW50cnlwb2ludChWCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJ
VCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJ
U3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1Yihtb2R1
bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsK
ICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAogICAgICAgICAgICAgYWRvcHRSZWYoKm5l
dyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGlj
IHZvaWQgc2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQoVgogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CiAKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfbW9k
dWxlX3Byb2dyYW1fcHJvbG9ndWUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBjb2RlUmVmID0gZ2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9tb2R1bGVf
cHJvZ3JhbV9wcm9sb2d1ZSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCiAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2Rl
UmVmLCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3Bw
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
eGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkKiBjYWxs
VG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgSlNWYWx1ZShz
Y29wZS5leGNlcHRpb24oKSksICIgKGNhbGxUb1Rocm93KS5cbiIpOwogI2VuZGlmCi0gICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUp
OworICAgIHJldHVybiBMTEludDo6Z2V0RXhlY3V0YWJsZUFkZHJlc3MobGxpbnRfdGhyb3dfZHVy
aW5nX2NhbGxfdHJhbXBvbGluZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsMTEgKzQ0NCwxMCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogCiAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1h
cCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVM
b2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5m
aW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9u
KTsKIAotICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxv
Y2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
Y29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBDb2RlUHRyVGFnKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CiAgICAgCiAgICAgTExJTlRfUkVU
VVJOX1RXTyhqdW1wVGFyZ2V0LCBleGVjLT50b3BPZkZyYW1lKCkpOwpAQCAtMTQzOCw3ICsxNDM3
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwog
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYgKGF1dG8qIGludGVy
bmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVl
QXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0g
dm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENU
SUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJU
KCEhY29kZVB0cik7CiAKICAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9X
ICYmIGNhbGxMaW5rSW5mbykgewpAQCAtMTQ1MCwxMiArMTQ0OSwxMiBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0
KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24pOwogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGlu
dGVybmFsRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNv
ZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcsIExMSW50Q2FsbElDUHRyVGFn
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29k
ZVB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7CisgICAgICAgICAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFn
KTsKICAgICAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4o
ZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFn
KTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChl
eGVjQ2FsbGVlLCBwYywgY2FsbGVlQXNWYWx1ZSwga2luZCk7CkBAIC0xNDY0LDcgKzE0NjMsNyBA
QCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwpAQCAtMTUwMCwxNCArMTQ5OSwxNCBAQCBp
bmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQodm0s
IGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2Vl
bkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKLSAgICAgICAgY2FsbExp
bmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHIucmV0YWdnZWQoQ29kZVB0clRhZywg
TExJbnRDYWxsSUNQdHJUYWcpOworICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFy
Z2V0ID0gY29kZVB0cjsKICAgICAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvZGVC
bG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8pOwogICAgIH0KIAotICAg
IGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJU
YWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOwogICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25l
ZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIExMSU5UX0NBTExfUkVUVVJOKGV4
ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7
CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBnZW5lcmljQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTYzNyw3ICsxNjM2LDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbAogICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgZXhlY0NhbGxlZS0+c2V0
Q2FsbGVyRnJhbWUoZXhlYyk7CiAgICAgZXhlY0NhbGxlZS0+dW5jaGVja2VkUihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBleGVjQ2FsbGVlLT5zZXRSZXR1cm5Q
QyhMTEludDo6Z2V0Q29kZVB0cihsbGludF9nZW5lcmljX3JldHVybl9wb2ludCkpOworICAgIGV4
ZWNDYWxsZWUtPnNldFJldHVyblBDKExMSW50OjpnZXRFeGVjdXRhYmxlQWRkcmVzcyhsbGludF9n
ZW5lcmljX3JldHVybl9wb2ludCkpOwogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsK
ICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogRW5jb2RlZEpTVmFsdWUgSlNfRVhQ
T1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZy
YW1lKiBmcmFtZSkKIHsKKyAgICBjb2RlID0gcmV0YWdDb2RlUHRyPFdhc21FbnRyeVB0clRhZywg
SlNFbnRyeVB0clRhZz4oY29kZSk7CiAgICAgcmV0dXJuIHZtRW50cnlUb0phdmFTY3JpcHQoY29k
ZSwgdm0sIGZyYW1lKTsKIH0KICAgICAKQEAgLTUxLDUwICs1Miw1MiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5CiAKIG5hbWVzcGFjZSBMTEludCB7CiAKLXN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oVk0qIHZtLCBP
cGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgY2hhciAqdGh1bmtLaW5kKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oVk0q
IHZtLCBPcGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgY2hhciAqdGh1bmtLaW5kKQogewogICAgIEpT
SW50ZXJmYWNlSklUIGppdCh2bSk7CiAKICAgICAvLyBGSVhNRTogdGhlcmUncyBwcm9iYWJseSBh
IGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQgSSdtIG5vdCBzdXJlIEkgY2FyZS4KLSAg
ICBMTEludENvZGUgdGFyZ2V0ID0gTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihvcGNvZGVJRCk7
Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPih0YXJnZXQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuanVtcChK
U0ludGVyZmFjZUpJVDo6cmVnVDAsIENvZGVQdHJUYWcpOworICAgIExMSW50Q29kZSB0YXJnZXQg
PSBMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KG9wY29kZUlEKTsKKyAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgodGFyZ2V0LCBKU0VudHJ5UHRyVGFnKTsKKworICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhcmdldCksIEpTSW50ZXJmYWNlSklU
OjpyZWdUMCk7CisgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0VudHJ5UHRy
VGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQp
OwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBDb2RlUHRyVGFnLCAiTExJ
bnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkxMSW50ICVzIHByb2xvZ3VlIHRodW5r
IiwgdGh1bmtLaW5kKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNhbGwiKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ29uc3Ry
dWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlVGh1
bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlLCAi
ZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVu
Y3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8o
dm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrLCAiZnVuY3Rpb24gZm9yIGNh
bGwgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rp
b25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hl
Y2tUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRo
SnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrLCAiZnVu
Y3Rpb24gZm9yIGNvbnN0cnVjdCB3aXRoIGFyaXR5IGNoZWNrIik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2V2YWxfcHJv
bG9ndWUsICJldmFsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwcm9ncmFtRW50cnlU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2Vu
ZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUsICJwcm9ncmFt
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG1v
ZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gZ2Vu
ZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlLCAi
bW9kdWxlX3Byb2dyYW0iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMiArNDIsMTIgQEAg
RW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeQogCiBuYW1lc3BhY2UgTExJ
bnQgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dl
bmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0
RW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ2FsbEVudHJ5
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tU
aHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBldmFsRW50cnlUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9ncmFtRW50
cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyMzA3NDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjAxMSw4ICsyMDExLDggQEAgbWFjcm8gZG9DYWxsKHNs
b3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXls
b2FkT2Zmc2V0W3QzXQogICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNd
CiAgICAgbW92ZSB0Mywgc3AKLSAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFj
aGluZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBMTEludENhbGxJQ1B0clRhZykKLSAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3Qx
XSwgTExJbnRDYWxsSUNQdHJUYWcpCisgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86
Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKKyAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3Qx
XSwgSlNFbnRyeVB0clRhZykKIAogLm9wQ2FsbFNsb3c6CiAgICAgc2xvd1BhdGhGb3JDYWxsKHNs
b3dQYXRoLCBwcmVwYXJlQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMzA3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2Fs
bChlbnRyeSwgdGVtcCkKICAgICBpZiBDX0xPT1AKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlv
biBlbnRyeQogICAgIGVsc2UKLSAgICAgICAgY2FsbCBlbnRyeSwgQ29kZVB0clRhZworICAgICAg
ICBjYWxsIGVudHJ5LCBKU0VudHJ5UHRyVGFnCiAgICAgZW5kCiAgICAgc3VicCAxNiwgc3AKIGVu
ZApAQCAtMjcwLDEwICsyNzAsMTAgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnks
IHRlbXApCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAjIFdlIG5lZWQgdG8gYWxsb2Nh
dGUgMzIgYnl0ZXMgb24gdGhlIHN0YWNrIGZvciB0aGUgc2hhZG93IHNwYWNlLgogICAgICAgICBz
dWJwIDMyLCBzcAotICAgICAgICBjYWxsIHRlbXAsIENvZGVQdHJUYWcKKyAgICAgICAgY2FsbCB0
ZW1wLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGFkZHAgMzIsIHNwCiAgICAgZWxzZQotICAgICAg
ICBjYWxsIHRlbXAsIENvZGVQdHJUYWcKKyAgICAgICAgY2FsbCB0ZW1wLCBKU0VudHJ5UHRyVGFn
CiAgICAgZW5kCiBlbmQKIApAQCAtMzcwLDcgKzM3MCw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAg
ICAgICBidHB6IHIwLCAucmVjb3ZlcgogICAgICAgICAgICAgbW92ZSByMSwgc3AKLSAgICAgICAg
ICAgIGptcCByMCwgQ29kZVB0clRhZworICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFn
CiAgICAgICAgIC5yZWNvdmVyOgogICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRh
Z09mZnNldFtjZnJdLCBQQwogICAgICAgICBlbmQpCkBAIC0yMDU2LDExICsyMDU2LDExIEBAIG1h
Y3JvIGRvQ2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgaWYgUE9JU09OCiAgICAgICAg
IGxvYWRwIF9nX0pJVENvZGVQb2lzb24sIHQyCiAgICAgICAgIHhvcnAgTExJbnRDYWxsTGlua0lu
Zm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIKLSAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQx
LCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24o
dDIsIExMSW50Q2FsbElDUHRyVGFnKQorICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDEsIHQzLCB0
NCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHQyLCBKU0VudHJ5
UHRyVGFnKQogICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86
Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJbnRDYWxsSUNQdHJUYWcpCi0g
ICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVU
YXJnZXRbdDFdLCBMTEludENhbGxJQ1B0clRhZykKKyAgICAgICAgcHJlcGFyZUNhbGwoTExJbnRD
YWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0
clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNo
aW5lQ29kZVRhcmdldFt0MV0sIEpTRW50cnlQdHJUYWcpCiAgICAgZW5kCiAKIC5vcENhbGxTbG93
OgpAQCAtMjE5MSwxMiArMjE5MSwxMiBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVj
dXRhYmxlT2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRfV0lOCiAgICAgICAgICAgICBz
dWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0
MV0sIENvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rp
b25bdDFdLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRwIDMyLCBzcAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9pc29uLCB0MgogICAgICAgICAg
ICAgeG9ycCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0sIHQyCi0gICAgICAgICAgICBj
YWxsIHQyLCBDb2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQyLCBKU0VudHJ5UHRyVGFnCiAg
ICAgICAgIGVuZAogICAgIGVuZAogCkBAIC0yMjM0LDEyICsyMjM0LDEyIEBAIG1hY3JvIGludGVy
bmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICBlbHNlCiAgICAgICAgIGlmIFg4Nl82
NF9XSU4KICAgICAgICAgICAgIHN1YnAgMzIsIHNwCi0gICAgICAgICAgICBjYWxsIG9mZnNldE9m
RnVuY3Rpb25bdDFdLCBDb2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIG9mZnNldE9mRnVuY3Rp
b25bdDFdLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRwIDMyLCBzcAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9pc29uLCB0MgogICAgICAgICAg
ICAgeG9ycCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgdDIKLSAgICAgICAgICAgIGNhbGwgdDIsIENv
ZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDIsIEpTRW50cnlQdHJUYWcKICAgICAgICAgZW5k
CiAgICAgZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMjYyLDkgKzI2Miw4IEBAIGNvbnN0IEFyaXRoUHJvZmlsZUludE51bWJlciA9IDB4NTAwMDAw
CiAKICMgUG9pbnRlciBUYWdzCiBjb25zdCBCeXRlY29kZVB0clRhZyA9IGNvbnN0ZXhwciBCeXRl
Y29kZVB0clRhZwotY29uc3QgQ29kZVB0clRhZyA9IGNvbnN0ZXhwciBDb2RlUHRyVGFnCitjb25z
dCBKU0VudHJ5UHRyVGFnID0gY29uc3RleHByIEpTRW50cnlQdHJUYWcKIGNvbnN0IEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcgPSBjb25zdGV4cHIgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotY29uc3Qg
TExJbnRDYWxsSUNQdHJUYWcgPSBjb25zdGV4cHIgTExJbnRDYWxsSUNQdHJUYWcKIGNvbnN0IE5v
UHRyVGFnID0gY29uc3RleHByIE5vUHRyVGFnCiBjb25zdCBTbG93UGF0aFB0clRhZyA9IGNvbnN0
ZXhwciBTbG93UGF0aFB0clRhZwogCkBAIC0xMDM3LDcgKzEwMzYsNyBAQCBtYWNybyBwcm9sb2d1
ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBv
cCBjZnIKICAgICAgICAgZW5kCi0gICAgICAgIGptcCByMCwgQ29kZVB0clRhZworICAgICAgICBq
bXAgcjAsIEpTRW50cnlQdHJUYWcKICAgICAucmVjb3ZlcjoKICAgICAgICAgY29kZUJsb2NrR2V0
dGVyKHQxLCB0MikKICAgICAuY29udGludWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIEV4ZWN1dGlv
bkNvdW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb24KICAgICByZXR1cm4gY291bnRlci5nZXQo
KTsKIH0KIAotdm9pZCBDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPGNv
bnN0IHZvaWQqPiYgY29kZUFkZHJlc3NlcykKK3ZvaWQgQ29tcGlsYXRpb246OmFkZE9TUkV4aXRT
aXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+
JiBjb2RlQWRkcmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVzLmFwcGVuZChPU1JFeGl0U2l0
ZShjb2RlQWRkcmVzc2VzKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDIzMDc0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZERlc2NyaXB0aW9uKGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsKICAgICB2b2lkIGFkZERlc2Ny
aXB0aW9uKGNvbnN0IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmluZyYgZGVzY3JpcHRpb24pOwog
ICAgIEV4ZWN1dGlvbkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJGb3IoY29uc3QgT3JpZ2luU3Rh
Y2smKTsKLSAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rvcjxjb25zdCB2b2lkKj4m
IGNvZGVBZGRyZXNzZXMpOworICAgIHZvaWQgYWRkT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4mIGNvZGVBZGRyZXNzZXMpOwog
ICAgIE9TUkV4aXQqIGFkZE9TUkV4aXQodW5zaWduZWQgaWQsIGNvbnN0IE9yaWdpblN0YWNrJiwg
RXhpdEtpbmQsIGJvb2wgaXNXYXRjaHBvaW50KTsKICAgICAKICAgICB2b2lkIHNldEpldHRpc29u
UmVhc29uKEpldHRpc29uUmVhc29uLCBjb25zdCBGaXJlRGV0YWlsKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUu
Y3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBA
QCBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVB
ZGRyZXNzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJlc3Nl
c1tpXSkpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJp
bmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0uZGF0YUxvY2F0
aW9uKCkpKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCShyZXZpc2lvbiAyMzA3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDIzICsyNiwyNCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsK
IAogY2xhc3MgT1NSRXhpdFNpdGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE9TUkV4aXRTaXRl
KGNvbnN0IFZlY3Rvcjxjb25zdCB2b2lkKj4mIGNvZGVBZGRyZXNzZXMpCisgICAgZXhwbGljaXQg
T1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFs
UHRyVGFnPj4mIGNvZGVBZGRyZXNzZXMpCiAgICAgICAgIDogbV9jb2RlQWRkcmVzc2VzKGNvZGVB
ZGRyZXNzZXMpCiAgICAgewogICAgIH0KICAgICAKLSAgICBjb25zdCBWZWN0b3I8Y29uc3Qgdm9p
ZCo+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUFkZHJlc3NlczsgfQorICAg
IGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBj
b2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUFkZHJlc3NlczsgfQogICAgIAogICAg
IEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
Y29uc3Qgdm9pZCo+IG1fY29kZUFkZHJlc3NlczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBtX2NvZGVBZGRyZXNzZXM7CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDggKzU0LDggQEAgdm9pZCBFeGVjdXRhYmxlQmFz
ZTo6Y2xlYXJDb2RlKCkKICNpZiBFTkFCTEUoSklUKQogICAgIG1faml0Q29kZUZvckNhbGwgPSBu
dWxscHRyOwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG51bGxwdHI7Ci0gICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogI2Vu
ZGlmCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01Q
SUxFRDsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBOVU1fUEFSQU1FVEVSU19O
T1RfQ09NUElMRUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgaW5saW5lIGJvb2wgaXNDYWxsKENvZGVTcGVjaWFsaXphdGlvbktpbgogCiBjbGFzcyBFeGVj
dXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAg
ZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0qKTsKKyAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKIAogcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBpbnQgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCA9IDA7
CkBAIC0xNDMsOCArMTQzLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1
Y3QoKTsKICAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSkKKwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBlbnRyeXBvaW50Rm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01vZGUgYXJpdHkpCiAgICAgewog
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY2FjaGVkIHJlc3VsdC4gV2Ugb25seSBoYXZl
IGl0IGZvciBhcml0eSBjaGVjayBiZWNhdXNlIHdlIHVzZSB0aGUKICAgICAgICAgLy8gbm8tYXJp
dHkgZW50cnlwb2ludCBpbiBub24tdmlydHVhbCBjYWxscywgd2hpY2ggd2lsbCAiY2FjaGUiIHRo
aXMgdmFsdWUgZGlyZWN0bHkgaW4KQEAgLTE1MiwxNyArMTUyLDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKICAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAgICAgICAgICAgaWYg
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2spCisgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiByZXN1bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgaWYgKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjaykKKyAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBy
ZXN1bHQgPQotICAgICAgICAgICAgZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0Zv
ckNhbGwoYXJpdHkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJp
dHkpOwogICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAg
IC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3Mgdmly
dHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCiAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAg
LTIzMiw4ICsyMzEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50cmluc2ljIG1faW50cmluc2ljOwog
ICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDYWxsOwogICAgIFJlZlB0cjxKSVRDb2Rl
PiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9qaXRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIHZvaWQgTmF0aXZl
RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoTXVz
dENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVk
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVx
dWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwotICAgIGFzc2VydElzVGFn
Z2VkV2l0aChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgQ29kZVB0clRhZyk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAg
IGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0
eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwor
ICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JD
YWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0
clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGU6Ok5hdGl2ZUV4
ZWN1dGFibGUoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IERPTUpJ
VDo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDEwICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24oaW50cHRyX3QgYml0cykgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHMpKSB7IH0K
IAogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCi0gICAgICAg
IDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLm1fcHRyLCBDb2RlUHRyVGFnKSkK
KyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpTRW50cnlQdHJUYWc+KGZ1
bmMubV9wdHIpKQogICAgIHsgfQogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKFJhd05hdGl2ZUZ1
bmN0aW9uIGZ1bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5j
LCBDb2RlUHRyVGFnKSkKKyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCosIEpT
RW50cnlQdHJUYWc+KGZ1bmMpKQogICAgIHsgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxOYXRpdmVGdW5j
dGlvbj4obV9wdHIsIENvZGVQdHJUYWcpOworICAgICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25Q
dHI8TmF0aXZlRnVuY3Rpb24sIEpTRW50cnlQdHJUYWc+KG1fcHRyKTsKICAgICB9CiAKICAgICB2
b2lkKiByYXdQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNTIg
KzMxLDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEZPUl9FQUNIX1BUUlRBR19FTlVN
KHYpIFwKICAgICB2KE5vUHRyVGFnKSBcCi0gICAgdihOZWFyQ29kZVB0clRhZykgXAogICAgIHYo
Q0Z1bmN0aW9uUHRyVGFnKSBcCiAgICAgXAotICAgIHYoQXJpdHlGaXh1cFB0clRhZykgXAogICAg
IHYoQjNDQ2FsbFB0clRhZykgXAorICAgIHYoQjNDb21waWxhdGlvblB0clRhZykgXAogICAgIHYo
Qnl0ZWNvZGVQdHJUYWcpIFwKLSAgICB2KEJ5dGVjb2RlSGVscGVyUHRyVGFnKSBcCi0gICAgdihD
b2RlUHRyVGFnKSBcCi0gICAgdihERkdPU1JFbnRyeVB0clRhZykgXAotICAgIHYoREZHT1NSRXhp
dFB0clRhZykgXAotICAgIHYoREZHT3BlcmF0aW9uUHRyVGFnKSBcCisgICAgdihEaXNhc3NlbWJs
eVB0clRhZykgXAogICAgIHYoRXhjZXB0aW9uSGFuZGxlclB0clRhZykgXAotICAgIHYoRlRMQ29k
ZVB0clRhZykgXAotICAgIHYoRlRMTGF6eVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihGVExPU1JF
eGl0UHRyVGFnKSBcCi0gICAgdihGVExPcGVyYXRpb25QdHJUYWcpIFwKLSAgICB2KEZUTFNsb3dQ
YXRoUHRyVGFnKSBcCi0gICAgdihHZXRQcm9wZXJ0eVB0clRhZykgXAotICAgIHYoR2V0dGVyU2V0
dGVyUHRyVGFnKSBcCi0gICAgdihIYXNQcm9wZXJ0eVB0clRhZykgXAotICAgIHYoSklUQ29kZVB0
clRhZykgXAotICAgIHYoSklUT3BlcmF0aW9uUHRyVGFnKSBcCiAgICAgdihKSVRUaHVua1B0clRh
ZykgXAotICAgIHYoSklUV3JpdGVUaHVua1B0clRhZykgXAotICAgIHYoTExJbnRDYWxsSUNQdHJU
YWcpIFwKLSAgICB2KExpbmtDYWxsUHRyVGFnKSBcCi0gICAgdihMaW5rQ2FsbFJlc3VsdFB0clRh
ZykgXAotICAgIHYoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZykgXAotICAgIHYoTGlua1BvbHlt
b3JwaGljQ2FsbFJlc3VsdFB0clRhZykgXAotICAgIHYoTGlua1ZpcnR1YWxDYWxsUHRyVGFnKSBc
Ci0gICAgdihMaW5rVmlydHVhbENhbGxSZXN1bHRQdHJUYWcpIFwKLSAgICB2KE1hdGhJQ1B0clRh
ZykgXAotICAgIHYoTmF0aXZlQ29kZVB0clRhZykgXAotICAgIHYoUHV0UHJvcGVydHlQdHJUYWcp
IFwKKyAgICB2KEpJVFN0dWJSb3V0aW5lUHRyVGFnKSBcCisgICAgdihKU0VudHJ5UHRyVGFnKSBc
CisgICAgdihKU0ludGVybmFsUHRyVGFnKSBcCisgICAgdihKU1N3aXRjaFB0clRhZykgXAorICAg
IHYoTGlua0J1ZmZlclB0clRhZykgXAorICAgIHYoT3BlcmF0aW9uUHRyVGFnKSBcCisgICAgdihP
U1JFeGl0UHRyVGFnKSBcCiAgICAgdihTbG93UGF0aFB0clRhZykgXAotICAgIHYoU3BlY2lhbGl6
ZWRUaHVua1B0clRhZykgXAotICAgIHYoU3dpdGNoVGFibGVQdHJUYWcpIFwKLSAgICB2KFRocm93
RXhjZXB0aW9uUHRyVGFnKSBcCisgICAgdihXYXNtRW50cnlQdHJUYWcpIFwKICAgICB2KFlhcnI4
Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyMTZCaXRQdHJUYWcpIFwKICAgICB2KFlhcnJNYXRjaE9u
bHk4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcpIFwKICAgICB2
KFlhcnJCYWNrdHJhY2tQdHJUYWcpIFwKLSAgICB2KFdhc21DYWxsUHRyVGFnKSBcCi0gICAgdihX
YXNtSGVscGVyUHRyVGFnKSBcCi0KIAogZW51bSBQdHJUYWcgOiB1aW50cHRyX3QgewogI2RlZmlu
ZSBERUNMQVJFX1BUUlRBR19FTlVNKHRhZykgIHRhZywKQEAgLTg1LDggKzYxLDcgQEAgZW51bSBQ
dHJUYWcgOiB1aW50cHRyX3QgewogfTsKIAogc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KE5vUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApLCAiIik7Ci1zdGF0
aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTmVhckNvZGVQdHJUYWcpID09IHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSksICIiKTsKLXN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihDRnVuY3Rpb25QdHJUYWcpID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMiksICIi
KTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRnVuY3Rpb25QdHJUYWcp
ID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSksICIiKTsKIAogaW5saW5lIGNvbnN0IGNoYXIq
IHB0clRhZ05hbWUoUHRyVGFnIHRhZykKIHsKQEAgLTk4LDEwICs3Myw3IEBAIGlubGluZSBjb25z
dCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcKICN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUK
IH0KIAotdWludHB0cl90IG5leHRQdHJUYWdJRCgpOwotCiAjaWYgIVVTRShQT0lOVEVSX1BST0ZJ
TElORykKLWlubGluZSB1aW50cHRyX3QgbmV4dFB0clRhZ0lEKCkgeyByZXR1cm4gMDsgfQogCiBp
bmxpbmUgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQqKSB7IHJldHVybiAiPG5vIHRh
Zz4iOyB9CiAKQEAgLTExMSwyMSArODMsMzkgQEAgaW5saW5lIGNvbnN0ZXhwciBQdHJUYWcgcHRy
VGFnKEFyZ3VtZW50cwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBU
IHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+
KHB0cik7IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZT4+CitpbmxpbmUgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxp
bmUgY29uc3RleHByIFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJl
dHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+Citp
bmxpbmUgUHRyVHlwZSB0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KKwog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBUIHVudGFnQ29kZVB0cihQ
dHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGlu
ZSBUIHVudGFnQ29kZVB0cihQdHJUeXBlIHB0cikgIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihw
dHIpOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4
cHIgUHRyVHlwZSB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gcHRy
OyB9CiAKK3RlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFB0
clR5cGUgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KKwogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQ
dHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBUIHJldGFnQ29kZVB0cihQdHJUeXBl
IHB0ciwgUHRyVGFnLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0
eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1
ZT4+CitpbmxpbmUgVCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxUPihwdHIpOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGlu
ZSBjb25zdGV4cHIgUHRyVHlwZSByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZywgUHRy
VGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCBQdHJUYWcsIHR5cGVuYW1l
IFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRy
VHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHJldGFnQ29kZVB0cihQdHJUeXBlIHB0cikg
eyByZXR1cm4gcHRyOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZh
bHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4
cHIgVCByZW1vdmVDb2RlUHRyVGFnKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4ocHRyKTsgfQogCkBAIC0xMzUsMTUgKzEyNSwyNyBAQCBpbmxpbmUgY29uc3RleHByIFB0clR5
cGUgcmVtb3ZlQ29kZVB0clRhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgVCB0YWdD
RnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+
KHB0cik7IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZT4+CitpbmxpbmUgVCB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxUPihwdHIpOyB9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4K
IGlubGluZSBQdHJUeXBlIHRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJl
dHVybiBwdHI7IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+Citp
bmxpbmUgUHRyVHlwZSB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsg
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjpp
c19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgVCB1bnRhZ0NGdW5jdGlvblB0cihQ
dHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGlu
ZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4ocHRyKTsgfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgUHRy
VHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBwdHI7
IH0KIAordGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRy
VHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoUHRyVHlw
ZSkgeyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzTnVsbE9yQ0Z1
bmN0aW9uUHRyKFB0clR5cGUpIHsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogICAgICAgICAsIG1faXNJbml0aWFsaXphdGlvbihp
c0luaXRpYWxpemF0aW9uKQogICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICAgICAs
IG1fY2FjaGVhYmlsaXR5KENhY2hpbmdBbGxvd2VkKQotICAgICAgICAsIG1fcHV0RnVuY3Rpb24o
bnVsbHB0cikKICAgICB7CiAgICAgfQogCkBAIC02NywxNyArNjYsMTUgQEAgcHVibGljOgogICAg
ICAgICBtX29mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lkIHNldEN1c3RvbVZhbHVl
KEpTT2JqZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24pCisgICAgdm9pZCBzZXRDdXN0
b21WYWx1ZShKU09iamVjdCogYmFzZSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5j
dGlvbikKICAgICB7Ci0gICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKGZ1bmN0aW9u
KTsKICAgICAgICAgbV90eXBlID0gQ3VzdG9tVmFsdWU7CiAgICAgICAgIG1fYmFzZSA9IGJhc2U7
CiAgICAgICAgIG1fcHV0RnVuY3Rpb24gPSBmdW5jdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIHNl
dEN1c3RvbUFjY2Vzc29yKEpTT2JqZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24pCisg
ICAgdm9pZCBzZXRDdXN0b21BY2Nlc3NvcihKU09iamVjdCogYmFzZSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1
bmN0aW9uUHRyKGZ1bmN0aW9uKTsKICAgICAgICAgbV90eXBlID0gQ3VzdG9tQWNjZXNzb3I7CiAg
ICAgICAgIG1fYmFzZSA9IGJhc2U7CiAgICAgICAgIG1fcHV0RnVuY3Rpb24gPSBmdW5jdGlvbjsK
QEAgLTEwMCw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9pc1N0cmljdE1vZGUgPSB2YWx1
ZTsKICAgICB9CiAKLSAgICBQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKCkgY29uc3QKKyAgICBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRlcigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGVDdXN0b20oKSk7CiAgICAgICAgIHJldHVybiBtX3B1
dEZ1bmN0aW9uOwpAQCAtMTQwLDcgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5p
dGlhbGl6YXRpb247CiAgICAgdWludDhfdCBtX2NvbnRleHQ7CiAgICAgQ2FjaGVhYmlsaXR5VHlw
ZSBtX2NhY2hlYWJpbGl0eTsKLSAgICBQdXRWYWx1ZUZ1bmMgbV9wdXRGdW5jdGlvbjsKKyAgICBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fcHV0RnVuY3Rpb247CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4
ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJs
ZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIENvZGVG
b3JDYWxsOgogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdl
bmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51bGxwdHI7Ci0gICAgICAgIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICBt
X2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBudWxscHRyOwogICAgICAgICBtX251bVBh
cmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA6IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgogICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpIDog
bnVsbHB0cjsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0
aEFyaXR5Q2hlY2sgPSBudWxscHRyOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1
Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
IDogTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMzA3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4MSwyMyArNjgxLDIzIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVuY3Rpb24o
TmEKICAgICBVTlVTRURfUEFSQU0oaW50cmluc2ljKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
ICAgIHJldHVybiBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsCi0gICAgICAgIGFkb3B0
UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50
Q29kZVJlZihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKSwgSklUQ29kZTo6SG9zdENhbGxU
aHVuaykpLCBmdW5jdGlvbiwKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X25hdGl2ZV9jb25z
dHJ1Y3RfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKSwgY29uc3RydWN0b3Is
CisgICAgICAgIGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShMTEludDo6Z2V0Q29kZVJlZjxK
U0VudHJ5UHRyVGFnPihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKSwgSklUQ29kZTo6SG9z
dENhbGxUaHVuaykpLCBmdW5jdGlvbiwKKyAgICAgICAgYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRD
b2RlKExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X25hdGl2ZV9jb25zdHJ1
Y3RfdHJhbXBvbGluZSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKSwgY29uc3RydWN0b3IsCiAg
ICAgICAgIE5vSW50cmluc2ljLCBzaWduYXR1cmUsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGNhblVzZUpJVCgpKSB7
CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGpp
dFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIGpp
dFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KHRoaXMpOworICAgICAgICAgICAg
cmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCh0aGlzKS5yZXRhZ2dlZDxK
U0VudHJ5UHRyVGFnPigpOworICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVu
Y3Rpb25Db25zdHJ1Y3QodGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICB9CiAj
ZW5kaWYKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NhbGxfdHJhbXBvbGluZSk7Ci0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFt
cG9saW5lKTsKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSk7CisgICAgcmV0dXJuIExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nv
bnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAogVk06OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTQy
LDcgKzU0Miw3IEBAIHB1YmxpYzoKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZXRDVElTdHVi
KFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICB7CiAgICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOwogICAgIH0KQEAgLTU1NCw3ICs1NTQsNyBAQCBw
dWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJp
bnNpYywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJl
KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRD
VElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxG
dW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IGV4Y2VwdGlvbk9mZnNldCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjMw
NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bAogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgZnApKTsKICAgICAg
ICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJl
bG93LCBzY3JhdGNoMSwgc2NyYXRjaDIpKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6
c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5v
IG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwg
bmVlZHMgdG8gYmUgY29ycmVjdC4KQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OmVtaXRFeGNlcHRpb25DaGVjayhDCiAgICAgYXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0g
aml0Lmp1bXAoKTsKIAogICAgIGppdC5hZGRMaW5rVGFzayhbanVtcFRvRXhjZXB0aW9uU3R1Yl0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBU
b0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIH0pOwogfQogCkBAIC05MzcsNyAr
OTM3LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludAogICAgICAg
ICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
Y2FsbCksIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2Vy
T01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtz
OjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CiAKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKQEAgLTExMTIsNyArMTExMiw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxs
KSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTEyOCw3ICsx
MTI4LDYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCiAgICAgICAgICAgICBqdW1wRGVzdGluYXRp
b24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRYb3IsIG9y
aWdpbigpLCBqdW1wRGVzdGluYXRpb24sIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7CiAKLSAgICAgICAg
UHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkp
OwogICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKQEAgLTExMzgsOSArMTEzNyw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2Fs
bHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRz
IGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0
byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgx
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGUsIGNhbGxUYWddIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5U
eXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIGNhbGxUYWcpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6
IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxv
biA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVu
ZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7
CkBAIC0xMTY4LDcgKzExNjcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuCiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGws
IGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9KTsKQEAgLTEzMTAsNyArMTMwOSw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnMKICAgICAgICAgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4oKSwgY2FsbGVlQ29kZSwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklU
Q29kZVBvaXNvbikpOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5
cGUoKTsKLSAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0
dXJlLmhhc2goKSk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBD
YWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1
cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEz
MjUsNyArMTMyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMK
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5
cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgY2FsbFRhZyk7CisgICAgICAgICAgICAgICAgaml0
LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5
UHRyVGFnKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzQsMTAgKzE3NCw4IEBAIHZvaWQgQkJRUGxhbjo6cHJlcGFyZSgpCiAgICAgICAgIGlm
IChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtVG9X
YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
aW1wb3J0RnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIGRh
dGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9y
dCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgbWFrZVN0cmlu
ZyhpbXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5maWVsZCkpOwotICAg
ICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9XYXNtKHNpZ25hdHVyZSwgaW1wb3J0RnVuY3Rpb25J
bmRleCk7CisgICAgICAgIGF1dG8gYmluZGluZyA9IHdhc21Ub1dhc20oaW1wb3J0RnVuY3Rpb25J
bmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAgICAgICAgIHN3
aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIEJpbmRpbmdGYWlsdXJl
OjpPdXRPZk1lbW9yeToKQEAgLTMwMyw3ICszMDEsNiBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRl
KGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRl
eHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21D
YWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51
bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKQEAgLTMxMiw3ICszMDksNyBA
QCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21w
aWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
Y2FsbFRhZywgIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1i
bHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTMyNCwyMyArMzIx
LDIwIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2MKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQ29k
ZVB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFn
LCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRl
eCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGV4ZWN1
dGFibGVBZGRyZXNzOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGV4ZWN1dGFibGVBZGRyZXNzOwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJh
dGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBh
IFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2NDYyCiAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtVG9X
YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5jb2RlKCk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkpLT5lbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2Fs
bFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
ZXhlY3V0YWJsZUFkZHJlc3MucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmlt
cG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRh
Z2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5o
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBXVEZNb3ZlKG1fY2FsbExpbmtJbmZvcyk7CiAgICAgfQogCi0gICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZj4mJiB0YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpCisgICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYmIHRha2VXYXNtVG9X
YXNtRXhpdFN0dWJzKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAm
JiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtVG9XYXNtRXhpdFN0
dWJzKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIHN0YXRl
U3RyaW5nKFN0YXRlKTsKICAgICAKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5m
b3M7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0
dWJzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4g
bV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMy
X3QsIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7
CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3Bw
CShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOwogCi1FeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK0V4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIg
dW5pcXVpZnkgdGhlIHN0dWJzIGJhc2VkIG9uIHNpZ25hdHVyZSArIGluZGV4IHRvIHNlZSBpZiB0
aGlzIHNhdmVzIG1lbW9yeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg0MTU3CkBAIC04MCwxNCArODAsMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwog
ICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKICAgICAgICAgaml0LnhvclB0cihKSVQ6
OlRydXN0ZWRJbW1QdHIoZ19KSVRDb2RlUG9pc29uKSwgc2NyYXRjaCk7Ci0gICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgaml0Lmp1
bXAoc2NyYXRjaCwgdGFnKTsKKyAgICBqaXQuanVtcChzY3JhdGNoLCBXYXNtRW50cnlQdHJUYWcp
OwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFp
bHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIHRhZywgIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBvcnRbJWldIiwgaW1wb3J0SW5k
ZXgpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJU
YWcsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBlbnVtIGNsYXNzIEJpbmRpbmdGYWlsdXJlIHsKICAgICBPdXRPZk1lbW9yeSwKIH07CiAK
LUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20oY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkocmV2aXNp
b24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpjYWxsZWUpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRy
eXBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCk7
IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdn
ZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lz
dGVyczsgfQogICAgIEluZGV4T3JOYW1lIGluZGV4T3JOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleE9yTmFtZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxp
bmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1
LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBoZWFk
ZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KLSAgICB2b2lkIHNldHVwRnJh
bWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogY2FsbGVlTW92ZUxvY2F0aW9u
LCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAorICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlBy
b2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBm
b3Igbm93LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUg
Zm9yIG5vdy4iKTsKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92
ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1vdmVMb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwpAQCAtMTIzLDEwICsxMjMsMTAgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fY2FsbGVlczsKICAgICBWZWN0b3I8
UmVmUHRyPENhbGxlZT4+IG1fb3B0aW1pemVkQ2FsbGVlczsKICAgICBIYXNoTWFwPHVpbnQzMl90
LCBSZWZQdHI8Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNh
bGxlZXM7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gbV93YXNtSW5kaXJlY3RD
YWxsRW50cnlQb2ludHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50czsKICAgICBWZWN0b3I8VGll
clVwQ291bnQ+IG1fdGllclVwQ291bnRzOwogICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKLSAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CisgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAg
ICAgUmVmUHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBp
bGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyAr
ODAsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25hbCwgCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUZhdWx0U2lnbmFsSGFuZGxlckludGVybmFsOjp2ZXJi
b3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDogIiwgUmF3
UG9pbnRlcihlbmQpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPD0gZmF1bHRpbmdJbnN0
cnVjdGlvbiAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgZW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwg
ImZvdW5kIG1hdGNoIik7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBleGNlcHRpb25TdHViID0gVGh1bmtzOjpzaW5nbGV0b24oKS5leGlzdGluZ1N0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGNlcHRpb25TdHViID0gVGh1bmtz
OjpzaW5nbGV0b24oKS5leGlzdGluZ1N0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3
ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBh
IHJlZ3VsYXIgY3Jhc2guCiAgICAgICAgICAgICAgICAgICAgIGlmICghZXhjZXB0aW9uU3R1YikK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU2LDcgKzI1Niw3
IEBAIGlubGluZSBib29sIGlzVmFsaWROYW1lVHlwZShJbnQgdmFsKQogfQogCiBzdHJ1Y3QgVW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbCB7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0
aW9uOworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4gY2FsbExvY2F0
aW9uOwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2U7CiB9OwogCkBAIC0yNjYsNyArMjY2
LDcgQEAgc3RydWN0IEVudHJ5cG9pbnQgewogfTsKIAogc3RydWN0IEludGVybmFsRnVuY3Rpb24g
ewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gY2FsbGVlTW92ZUxvY2F0
aW9uOwogICAgIEVudHJ5cG9pbnQgZW50cnlwb2ludDsKIH07CiAKQEAgLTI3NCw3ICsyNzQsNyBA
QCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAvLyB3aXRoIGFsbCBpbXBvcnRzLCBhbmQgdGhl
biBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLiBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGFu
ZCBGdW5jdGlvbkluZGV4U3BhY2UgYXJlIG9ubHkKIC8vIG1lYW50IGFzIGZhc3QgbG9va3VwIHRh
YmxlcyBmb3IgdGhlc2Ugb3Bjb2RlcyBhbmQgZG8gbm90IG93biBjb2RlLgogc3RydWN0IFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gewotICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cio7CisgICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qOwogI2lmICFDT01QSUxFUl9TVVBQT1JUUyhOU0RN
SV9GT1JfQUdHUkVHQVRFUykKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKCkgPSBk
ZWZhdWx0OwogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24oU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgJKHJldmlzaW9uIDIz
MDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBUYXJnZXQg
aW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3YXNtLT53YXNtIGNhbGxz
LCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXItc3BlY2lmaWMgbG9naWMg
b2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgogICAgICAgICBJbnN0YW5jZSogdGFyZ2V0
SW5zdGFuY2UgeyBudWxscHRyIH07CiAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdhc21Ub0VtYmVkZGVyU3R1YjsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJT
dHViOwogICAgICAgICB2b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBK
UyBlbWJlZGRpbmcsIHRoaXMgaXMgYSBQb2lzb25lZEJhcnJpZXI8SlNPYmplY3Q+LgogICAgIH07
CiAgICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9udW1J
bXBvcnRGdW5jdGlvbnM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTQgKzk3LDEzIEBAIHZv
aWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1
cmUuaGFzaCgpKTsKICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3Vu
aXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IGNhbGxUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIiwgbV9mdW5jdGlvbklu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9N
RyBmdW5jdGlvblslaV0gJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwogCiAgICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
V1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50Owor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgewogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVC
bG9ja0Zvcihtb2RlKCkpKTsKICAgICAgICAgUmVmPENhbGxlZT4gY2FsbGVlID0gQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOwpAQCAt
MTIwLDE2ICsxMTksMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQog
ICAgICAgICBtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0g
PSBXVEZNb3ZlKGNhbGxlZSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWRD
YWxscykgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnQ7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBv
aW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogICAgICAgICAgICAg
ICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwu
ZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKTsK
KyAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50
cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKIAotICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwot
ICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFB0clRhZyBvbGRUYWcgPSBw
dHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoZW50cnlwb2ludC5yZXRhZ2dlZChvbGRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAg
ICAgICAgIH0KICAgICAgICAgdW5saW5rZWRDYWxscyA9IHN0ZDo6ZXhjaGFuZ2UobV9jb2RlQmxv
Y2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1ttX2Z1bmN0aW9uSW5kZXhdLCB1bmxpbmtlZENhbGxz
KTsKICAgICB9CkBAIC0xNDksMTAgKzE0NSw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVy
bmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2lu
dGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwg
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcg
Y2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSks
ICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwot
ICAgICAgICAgICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFn
LCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZW50
cnlwb2ludC5yZXRhZ2dlZChvbGRUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaHVua3MuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC01MiwxOSArNTIsMTggQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogCi0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAg
ICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgog
CiAgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2lu
Z2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dX
YXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21F
eGNlcHRpb24sIHRhZykpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5l
YXJDb2RlUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpOworICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRocm93V2FzbUV4Y2Vw
dGlvbikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0
cmFjdExvY2tlciYgbG9ja2VyKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtNzQsMTEgKzcz
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNrT3ZlcmZsb3cKICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oRXhj
ZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAg
IGF1dG8ganVtcFRvRXhjZXB0aW9uSGFuZGxlciA9IGppdC5qdW1wKCk7CiAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBsaW5rQnVmZmVyLmxpbmso
anVtcFRvRXhjZXB0aW9uSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0
b24oKS5zdHViKGxvY2tlciwgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0
clRhZywgIlRocm93IHN0YWNrIG92ZXJmbG93IGZyb20gV2FzbSIpOworICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0
clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKGxvY2tlciwgdGhyb3dFeGNlcHRpb25Gcm9t
V2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IHN0YWNrIG92ZXJmbG93IGZyb20gV2Fz
bSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2Vu
ZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0
TG9ja2VyJikKIHsKICAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSBw
dXQgdGhlIGZ1bmN0aW9uIGluZGV4IGludG8gR1BSSW5mbzo6YXJndW1lbnRHUFIxCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKQEAgLTkzLDE2ICs5MiwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dHJpZ2dlck9NR1RpZXJVcFRoCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgdHlwZWRlZiB2b2lkICgqUnVuKShJbnN0YW5jZSosIHVp
bnQzMl90KTsKICAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7Ci0gICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHJ1biwg
dGFnKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCB0YWcpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHJ1bikpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgIGppdC5jYWxsKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgT3BlcmF0aW9u
UHRyVGFnKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBu
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGlu
Z0J5dGVzKTsKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQo
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLCAiVHJpZ2dl
ciBPTUcgdGllciB1cCIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiVHJpZ2dlciBPTUcgdGllciB1cCIpOwogfQogCiBzdGF0aWMgVGh1bmtz
KiB0aHVua3M7CkBAIC0xMzAsMjggKzEyOCwyOCBAQCBUaHJvd1dhc21FeGNlcHRpb24gVGh1bmtz
Ojp0aHJvd1dhc21FeGNlCiAgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0aW9uOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gVGh1bmtzOjpzdHViKFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CiAgICAgcmV0dXJuIHN0dWIobG9ja2VyLCBnZW5lcmF0b3IpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gVGh1bmtzOjpzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBBU1NFUlQoISFnZW5lcmF0b3IpOwogICAgIHsK
LSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0dWJzLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZigpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0dWJzLmFkZChn
ZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKSk7CiAgICAg
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZSA9IGdlbmVyYXRvcihsb2NrZXIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZSA9IGdlbmVyYXRvcihsb2NrZXIpOwogICAgIC8vIFdlIHNwZWNpZmlj
YWxseSBkb24ndCB1c2UgdGhlIGl0ZXJhdG9yIGhlcmUgdG8gYWxsb3cgZ2VuZXJhdG9yIHRvIHJl
Y3Vyc2l2ZWx5IGNoYW5nZSBtX3N0dWJzLgogICAgIG1fc3R1YnMuc2V0KGdlbmVyYXRvciwgY29k
ZSk7CiAgICAgcmV0dXJuIGNvZGU7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6
OmV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IFRodW5rczo6ZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAKQEAg
LTE1OSw3ICsxNTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpleGlzdGluZ1N0
CiAgICAgaWYgKGl0ZXIgIT0gbV9zdHVicy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0ZXItPnZh
bHVlOwogCi0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5oCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNv
bnN0IEFic3RyYWN0TG9ja2VyJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1Rp
ZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVy
YXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0
IEFic3RyYWN0TG9ja2VyJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYpOwog
Ci10eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShjb25zdCBB
YnN0cmFjdExvY2tlciYpOwordHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+ICgqVGh1bmtHZW5lcmF0b3IpKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAKIGNsYXNz
IFRodW5rcyB7CiBwdWJsaWM6CkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHVi
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1YihUaHVua0dlbmVyYXRvcik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHViKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKIAogcHJpdmF0ZToKICAgICBU
aHVua3MoKSA9IGRlZmF1bHQ7CiAKLSAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gbV9zdHViczsKICAgICBUaHJvd1dh
c21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9jayBt
X2xvY2s7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw5IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBj
YWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
ICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxs
ZWVNb3ZlTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0
clRhZz4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CiAg
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9j
YXRpb24pOworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbik7CiAgICAgfSk7CiAKICAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGUKICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbklu
ZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICBqaXQuYWRkTGlu
a1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2Vd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rp
b25JbmRleFNwYWNlIH0pOworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleFNwYWNlIH0pOwogICAgIH0pOwogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJl
dmlzaW9uIDIzMDc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6
CiAKICAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LmdldCgpOyB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdhc21Ub0VtYmVkZGVy
U3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1
YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rp
b25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNv
ZGUoKTsgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC05OCw3ICs5OCw3
IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIFBvaXNvbmVkUmVmPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tQb2lzb24sIFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7Ci0gICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9KU0V4aXRTdHViczsKKyAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7
CiAgICAgUG9pc29uZWRVbmlxdWVQdHI8SlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwgVW5j
b25kaXRpb25hbEZpbmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxD
YWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCShyZXZp
c2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIHZvaWQgbWF0ZXJpYWxp
emVJbXBvcnRKU0NlbGwoSklUJgogICAgIGppdC54b3I2NChwb2lzb24sIHJlc3VsdCk7CiB9CiAK
LXN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiBo
YW5kbGVCYWRJNjRVc2UoVk0qIHZtLCBKSVQmIGppdCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorc3RhdGljIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gaGFuZGxlQmFkSTY0VXNl
KFZNKiB2bSwgSklUJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1bnNpZ25lZCBp
bXBvcnRJbmRleCkKIHsKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7CiAKQEAgLTkzLDggKzkzLDcgQEAgc3RhdGljIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQgogICAgICAgICAvLyBMZXQncyBiZSBwYXJhbm9pZCBvbiB0aGUgZXhjZXB0
aW9uIHBhdGggYW5kIHplcm8gb3V0IHRoZSBwb2lzb24gaW5zdGVhZCBvZiBsZWF2aW5nIGl0IGlu
IGFuIGFyZ3VtZW50IEdQUi4KICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAKLSAgICAgICAgUHRyVGFnIGNhbGxU
YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwotICAgICAgICBh
dXRvIGNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKTsKIAogICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CkBAIC0xMTYsMTUgKzExNSwxNCBAQCBzdGF0aWMgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCCiAgICAgICAgIGlmIChVTkxJS0VMWShsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKLSAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRocm93QmFkSTY0LCBjYWxsVGFnKSk7Ci0gICAgICAg
IFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwot
ICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCB0YWcsICJXZWJBc3NlbWJs
eS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4
KTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4odGhyb3dCYWRJNjQpKTsKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxpZCBp
NjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CiAgICAgfQogICAgIAotICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4oKTsKIH0KIAotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZv
PiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVk
IGltcG9ydEluZGV4KQorRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+
JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQg
aW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9w
ZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCiAgICAgLy8gSXQnZCBi
ZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5NDAxCkBAIC0zMDIsMTIgKzMwMCw5IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgLy8gTGV0J3MgYmUgcGFyYW5vaWQgYmVmb3JlIHRo
ZSBjYWxsIGFuZCB6ZXJvIG91dCB0aGUgcG9pc29uIGluc3RlYWQgb2YgbGVhdmluZyBpdCBpbiBh
biBhcmd1bWVudCBHUFIuCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogCi0gICAgICAgIFB0clRhZyBjYWxsVGFn
ID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgUHRy
VGFnIGRvVW53aW5kaW5nVGFnID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJ
RCgpKTsKLQogICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRS
ZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY2FsbEZ1bmMpPihHUFJJbmZvOjph
cmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRvIGNhbGwg
PSBqaXQuY2FsbChjYWxsVGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9u
Q2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwogCiAg
ICAgICAgIC8vIEV4Y2VwdGlvbiBoZXJlLgpAQCAtMzE5LDcgKzMxNCw3IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwogICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
ICAgICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoZG9Vbndp
bmRpbmdUYWcpOworICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAg
ICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CkBAIC0zNDQsMTEgKzMzOSwxMCBAQCBFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgIGlmIChVTkxJS0VM
WShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKLSAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxGdW5jLCBjYWxsVGFnKSk7Ci0gICAg
ICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBGdW5jdGlvblB0cihkb1Vud2luZGlu
ZywgZG9VbndpbmRpbmdUYWcpKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY2FsbEZ1bmMpKTsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGV4Y2VwdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oZG9VbndpbmRp
bmcpKTsKIAotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWdu
YXR1cmUuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
dGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4
LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFzc2VtYmx5LT5K
YXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQg
dG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKQEAg
LTU1MCwxNCArNTQ0LDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0YKICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOwogICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvSTMyKT4oR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAgICBhdXRv
IGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBleGNlcHRpb25DaGVj
a3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0VG9JMzIsIHRhZykpOworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4oY29udmVydFRvSTMyKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGRvbmUubGluaygmaml0
KTsKQEAgLTU4NiwxNCArNTc5LDEzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwg
QmluZGluZ0YKICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVy
blZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOwogCi0gICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9GMzIpPihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKHRhZyk7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvbnZlcnRUb0YzMiwg
dGFnKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihjb252ZXJ0VG9GMzIpKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwpAQCAtNjIxLDE0ICs2MTMsMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgZG9uZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVs
cGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0
KTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGNvbnZlcnRUb0Y2NCk+KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwodGFn
KTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAg
ICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsK
IAogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29udmVydFRv
RjY0LCB0YWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGNvbnZlcnRUb0Y2NCkpOwogICAgICAgICB9KTsKIAogICAgICAg
ICBkb25lLmxpbmsoJmppdCk7CkBAIC02NDAsMTEgKzYzMSwxMCBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgaml0LnJldCgpOwogCiAgICAgaWYgKCFleGNl
cHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21I
ZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxp
bmsoJmppdCk7CiAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBhdXRv
IGNhbGwgPSBqaXQuY2FsbCh0YWcpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwog
CiAgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRl
KiBleGVjKSAtPiB2b2lkIHsKQEAgLTY1NSw3ICs2NDUsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgIH07CiAKICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGRvVW53aW5kaW5nLCB0YWcpKTsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGRvVW53
aW5kaW5nKSk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNjYzLDE1ICs2NTMsMTMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgIGlmIChVTkxJS0VMWShw
YXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKLSAgICBQdHJUYWcgbGlua1Rh
ZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KHNsb3dDYWxsKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
IGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+KHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNFbnRyeVB0clRhZz4oc2xvd0NhbGwpKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBob3RQYXRoQmVnaW4ocGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPih0YXJnZXRUb0NoZWNrKSk7CisgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNFbnRyeVB0clRhZz4gaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpTRW50cnlQdHJUYWc+KGZhc3RDYWxsKTsKICAgICBjYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4s
IGhvdFBhdGhPdGhlcik7CiAKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFn
LCBzaWduYXR1cmUuaGFzaCgpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgdGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydElu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFzc2VtYmx5LT5K
YXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwogfQogCiB2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5j
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAkocmV2aXNp
b24gMjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdhc20gewogCiBjbGFz
cyBJbnN0YW5jZTsKIAotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFp
bHVyZT4gd2FzbVRvSlMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2ln
bmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0q
LCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2ln
bmVkIGltcG9ydEluZGV4KTsKIAogdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiwg
V2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24g
MjMwNzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRMb2Fk
TG9jYXRpb247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGpzRW50cnlwb2ludChB
cml0eUNoZWNrTW9kZSBhcml0eSkKICAgICB7CiAgICAgICAgIGlmIChhcml0eSA9PSBBcml0eUNo
ZWNrTm90UmVxdWlyZWQpCiAgICAgICAgICAgICByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7CkBAIC04
MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUg
cmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJlY2F1c2Ugd2Ug
aGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRv
IHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKICAgICAvLyBlbnN1cmVzIHRoYXQg
dGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qc0VudHJ5cG9pbnQ7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9qc0VudHJ5cG9pbnQ7CiAgICAgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbiBtX2ltcG9ydGFibGVGdW5jdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0
LDcgKzYwNCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KIAog
ICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAodW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAg
ICB7Ci0gICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih2b2lkKikpLCBwdHJUYWcoWWFyckJhY2t0cmFja1B0clRhZywgJm1fY29k
ZUJsb2NrKSk7CisgICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJh
bWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3RyYWNrUHRyVGFnKTsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVzKHVuc2lnbmVkIGNhbGxG
cmFtZVNpemUpCkBAIC05MjcsMTEgKzkyNywxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIH0KIAogICAgICAgICAvLyBDYWxsZWQgYXQgdGhlIGVu
ZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0dXJuIGFkZHJlc3Nlcy4KLSAgICAg
ICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBZYXJyQ29kZUJs
b2NrJiBjb2RlQmxvY2spCisgICAgICAgIHZvaWQgbGlua0RhdGFMYWJlbHMoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9iYWNrdHJhY2tSZWNvcmRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIucGF0Y2gobV9iYWNrdHJhY2tS
ZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9iYWNrdHJhY2tS
ZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24sIHB0clRhZyhZYXJyQmFja3RyYWNrUHRyVGFn
LCAmY29kZUJsb2NrKSkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIucGF0Y2gobV9iYWNr
dHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8WWFyckJh
Y2t0cmFja1B0clRhZz4obV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24p
KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTM1MDgsMjQgKzM1MDgsMjQgQEAgcHVi
bGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVy
Q2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0cnlSZWFk
VW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RyeVJlYWRV
bmljb2RlQ2hhcmFjdGVyRW50cnksIE5lYXJDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVu
dHJ5KTsKIAogICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hh
cmFjdGVyQ2FsbHMpCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJl
YWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlciwgY29kZUJsb2NrKTsKKyAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKIAogICAg
ICAgICBpZiAoY29tcGlsZU1vZGUgPT0gTWF0Y2hPbmx5KSB7CiAgICAgICAgICAgICBpZiAobV9j
aGFyU2l6ZSA9PSBDaGFyOCkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGVN
YXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBwdHJUYWcoWWFyck1hdGNoT25seThC
aXRQdHJUYWcsICZjb2RlQmxvY2spLCAiTWF0Y2gtb25seSA4LWJpdCByZWd1bGFyIGV4cHJlc3Np
b24iKSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlTWF0Y2hPbmx5KEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgWWFyck1hdGNoT25seThCaXRQdHJUYWcsICJNYXRjaC1v
bmx5IDgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgcHRyVGFnKFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywgJmNvZGVCbG9jayks
ICJNYXRjaC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1hdGNoT25seShGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywgIk1hdGNoLW9ubHkgMTYtYml0IHJlZ3VsYXIg
ZXhwcmVzc2lvbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJT
aXplID09IENoYXI4KQotICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZShGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIHB0clRhZyhZYXJyOEJpdFB0clRhZywgJmNvZGVCbG9jayks
ICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LnNldDhCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4
LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIHB0
clRhZyhZYXJyMTZCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiMTYtYml0IHJlZ3VsYXIgZXhwcmVz
c2lvbiIpKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlKEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgWWFycjE2Qml0UHRyVGFnLCAiMTYtYml0IHJlZ3VsYXIgZXhwcmVz
c2lvbiIpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9mYWlsdXJlUmVhc29uKQogICAgICAg
ICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oKm1fZmFpbHVyZVJl
YXNvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lvbiAy
MzA3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDEzICs4NiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhczhCaXRDb2Rl
KCkgeyByZXR1cm4gbV9yZWY4LnNpemUoKTsgfQogICAgIGJvb2wgaGFzMTZCaXRDb2RlKCkgeyBy
ZXR1cm4gbV9yZWYxNi5zaXplKCk7IH0KLSAgICB2b2lkIHNldDhCaXRDb2RlKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiByZWYpIHsgbV9yZWY4ID0gcmVmOyB9Ci0gICAgdm9pZCBzZXQxNkJpdENvZGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJlZikgeyBtX3JlZjE2ID0gcmVmOyB9CisgICAgdm9pZCBz
ZXQ4Qml0Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjhCaXRQdHJUYWc+IHJlZikgeyBt
X3JlZjggPSByZWY7IH0KKyAgICB2b2lkIHNldDE2Qml0Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFycjE2Qml0UHRyVGFnPiByZWYpIHsgbV9yZWYxNiA9IHJlZjsgfQogCiAgICAgYm9vbCBo
YXM4Qml0Q29kZU1hdGNoT25seSgpIHsgcmV0dXJuIG1fbWF0Y2hPbmx5OC5zaXplKCk7IH0KICAg
ICBib29sIGhhczE2Qml0Q29kZU1hdGNoT25seSgpIHsgcmV0dXJuIG1fbWF0Y2hPbmx5MTYuc2l6
ZSgpOyB9Ci0gICAgdm9pZCBzZXQ4Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbWF0Y2hPbmx5KSB7IG1fbWF0Y2hPbmx5OCA9IG1hdGNoT25seTsgfQotICAgIHZvaWQgc2V0
MTZCaXRDb2RlTWF0Y2hPbmx5KE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtYXRjaE9ubHkpIHsgbV9t
YXRjaE9ubHkxNiA9IG1hdGNoT25seTsgfQorICAgIHZvaWQgc2V0OEJpdENvZGVNYXRjaE9ubHko
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPiBtYXRjaE9ubHkp
IHsgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OyB9CisgICAgdm9pZCBzZXQxNkJpdENvZGVNYXRj
aE9ubHkoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4gbWF0
Y2hPbmx5KSB7IG1fbWF0Y2hPbmx5MTYgPSBtYXRjaE9ubHk7IH0KIAogI2lmIEVOQUJMRShZQVJS
X0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgIGJvb2wgdXNlc1BhdHRlcm5Db250ZXh0
QnVmZmVyKCkgeyByZXR1cm4gbV91c2VzUGF0dGVybkNvbnRleHRCdWZmZXI7IH0KQEAgLTEwMSwy
NSArMTAxLDI1IEBAIHB1YmxpYzoKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IExDaGFy
KiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZv
aWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3Vs
dCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTg+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgcHRyVGFnKFlhcnI4Qml0UHRyVGFnLCB0aGlzKSkoaW5wdXQsIHN0YXJ0LCBs
ZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4LCBZ
YXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwg
c3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXpl
KSk7CiAgICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBmcmVl
UGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGhhczE2Qml0Q29kZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFn
Q0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTY+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIHB0clRhZyhZYXJyMTZCaXRQdHJUYWcsIHRoaXMpKShpbnB1dCwgc3RhcnQsIGxlbmd0
aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTE2LCBZYXJy
MTZCaXRQdHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBz
dGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUp
KTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwg
dW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0
Q29kZU1hdGNoT25seSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0
aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OD4obV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCBwdHJUYWcoWWFyck1hdGNoT25seThCaXRQdHJUYWcsIHRoaXMpKShpbnB1
dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkp
OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENv
ZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4LmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVu
Q29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOwogICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4
ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3Ro
LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZU1hdGNoT25seSgpKTsKLSAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTY+
KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHB0clRhZyhZYXJyTWF0
Y2hPbmx5MTZCaXRQdHJUYWcsIHRoaXMpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBh
cmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHkxNiwgWWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnPihtX21hdGNoT25seTE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShp
bnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6
ZSkpOwogICAgIH0KICNlbHNlCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQpAQCAt
MTg4LDE4ICsxODgsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAg
ICAgICBtX3JlZjggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKLSAgICAgICAgbV9yZWYxNiA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwotICAgICAgICBtX21hdGNoT25seTggPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKTsKLSAgICAgICAgbV9tYXRjaE9ubHkxNiA9IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZigpOworICAgICAgICBtX3JlZjggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjhC
aXRQdHJUYWc+KCk7CisgICAgICAgIG1fcmVmMTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFy
cjE2Qml0UHRyVGFnPigpOworICAgICAgICBtX21hdGNoT25seTggPSBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8WWFyck1hdGNoT25seThCaXRQdHJUYWc+KCk7CisgICAgICAgIG1fbWF0Y2hPbmx5MTYg
PSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPigpOwogICAg
ICAgICBtX2ZhaWx1cmVSZWFzb24gPSBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3JlZjg7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG1fcmVmMTY7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fbWF0Y2hPbmx5ODsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9tYXRjaE9ubHkxNjsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8WWFycjhCaXRQdHJUYWc+IG1fcmVmODsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFycjE2Qml0UHRyVGFnPiBtX3JlZjE2OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZ
YXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4gbV9tYXRjaE9ubHk4OworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+IG1fbWF0Y2hPbmx5MTY7CiAjaWYgRU5B
QkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgYm9vbCBtX3VzZXNQYXR0
ZXJuQ29udGV4dEJ1ZmZlcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNzQ1
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDAgQEAKKzIwMTgtMDQtMTcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIFRlbXBsYXRpemUgQ29kZVB0ci9SZWZzL0Z1bmN0aW9uUHRycyB3aXRoIFB0clRhZ3MuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3MDIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1MzkxNjgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IEZp
bGlwIFBpemxvIGFuZCBTYWFtIEJhcmF0aS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
aXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVz
KToKKyAgICAgICAgKiBjc3NqaXQvQ1NTUHRyVGFnLmg6IEFkZGVkLgorICAgICAgICAqIGNzc2pp
dC9Db21waWxlZFNlbGVjdG9yLmg6CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgor
ICAgICAgICAoV2ViQ29yZTo6RnVuY3Rpb25DYWxsOjpGdW5jdGlvbkNhbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnVuY3Rpb25DYWxsOjpzZXRGdW5jdGlvbkFkZHJlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6RnVuY3Rpb25DYWxsOjpwcmVwYXJlQW5kQ2FsbCk6CisgICAgICAgICogY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
Y29tcGlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNl
bGVjdG9yRnJhZ21lbnQ6OmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpjb21waWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFs
dWVNYXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JD
b21waWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6cnVsZUNvbGxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpydWxlQ29sbGVjdG9yU2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlv
bldpdGhDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmds
ZU11bHRpU2VsZWN0b3JEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0
YUxpc3Q6OmV4ZWN1dGUgY29uc3QpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisK
IDIwMTgtMDQtMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV0YWluIE1lc3NhZ2VQb3J0Q2hhbm5lbCBmb3IgdHJhbnNmZXIgd2hlbiBkaXNlbnRhbmds
aW5nIHBvcnRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzA3NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5NDksNiAr
NDk0OSw3IEBACiAJCUZERjZCQUY5MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkRGNkJBRjcxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50LmggKi87IH07CiAJCUZERjdFOUM0MTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVm
ZmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCAq
LzsgfTsKIAkJRkUwRDg0RTkxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBEODRFODEwNDg0MzQ4MDAx
QTE3OUUgLyogV2ViRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlGRTI3MUY2NzIwODJEQkU1MDBBOTUyRDQgLyogQ1NTUHRyVGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI3MUY2NDIwODJE
QkJFMDBBOTUyRDQgLyogQ1NTUHRyVGFnLmggKi87IH07CiAJCUZFMzZGRDE1MTZDNzgyNjUwMEY4
ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8qIENoYW5nZVZlcnNp
b25EYXRhLmggKi87IH07CiAJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2Fj
dGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVN
YWNoaW5lLmggKi87IH07CiAJCUZFMzZGRDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2Fj
dGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTM2RkQxNDE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oICovOyB9
OwpAQCAtMTQ3OTYsNiArMTQ3OTcsNyBAQAogCQlGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyog
SlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTBEODRFODEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDg0RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMjcxRjY0MjA4MkRCQkUwMEE5NTJENCAvKiBDU1NQdHJUYWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUHRyVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFuZ2VWZXJzaW9uRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM2RkQxMjE2Qzc4MjY0MDBGODg3QzEg
LyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNh
Y3Rpb25TdGF0ZU1hY2hpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MTc3LDYgKzE2MTc5LDcgQEAKIAkJMjZCOTk5OEQxODAzQURGQTAwRDAxMTIxIC8qIGNzc2pp
dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkUyNzFG
NjQyMDgyREJCRTAwQTk1MkQ0IC8qIENTU1B0clRhZy5oICovLAogCQkJCUU0NDUxMDc3MjAyQzdF
MDEwMDY1N0QzMyAvKiBDb21waWxlZFNlbGVjdG9yLmggKi8sCiAJCQkJMjZCOTk5OTIxODAzQjlE
OTAwRDAxMTIxIC8qIEZ1bmN0aW9uQ2FsbC5oICovLAogCQkJCTI2Qjk5OThFMTgwM0FFNzIwMEQw
MTEyMSAvKiBSZWdpc3RlckFsbG9jYXRvci5oICovLApAQCAtMjc2NDQsNiArMjc2NDcsNyBAQAog
CQkJCTZFMEU1NjlDMTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1OENEMzVDQjE4RUI0QzM5MDBCOUYzQUMgLyogRmxvYXRTaXplSGFz
aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUyNzFGNjcyMDgyREJFNTAwQTk1MkQ0IC8qIENTU1B0
clRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZv
Y3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMz
NERGIC8qIEZvY3VzRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDIzNTE0RUFC
RDI2MDA5MEQ3NUUgLyogRm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDIzMDc0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5Miw3ICszOTIsNyBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rv
cjo6cnVsZU1hCiAgICAgfQogCiAgICAgaWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyICYmIGNv
bXBpbGVkU2VsZWN0b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVj
dG9yQ29tcGlsZXI6OnJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihj
b21waWxlZFNlbGVjdG9yLmNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBjb21waWxl
ZFNlbGVjdG9yLnN0YXR1cyk7CisgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0
b3JDb21waWxlcjo6cnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyLCBjb21waWxlZFNlbGVjdG9yLnN0YXR1cyk7CiAjaWYgIUFT
U0VSVF9NU0dfRElTQUJMRUQKICAgICAgICAgdW5zaWduZWQgaWdub3JlU3BlY2lmaWNpdHk7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50LCAm
aWdub3JlU3BlY2lmaWNpdHkpIHx8IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkID09IE5P
UFNFVURPLCAiV2hlbiBtYXRjaGluZyBwc2V1ZG8gZWxlbWVudHMsIHdlIHNob3VsZCBuZXZlciBj
b21waWxlIGEgc2VsZWN0b3IgY2hlY2tlciB3aXRob3V0IGNvbnRleHQgdW5sZXNzIGl0IGNhbm5v
dCBtYXRjaCBhbnl0aGluZy4iKTsKQEAgLTQyMCw3ICs0MjAsNyBAQCBpbmxpbmUgYm9vbCBFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hCiAgICAgaWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
KSB7CiAgICAgICAgIEFTU0VSVChjb21waWxlZFNlbGVjdG9yLnN0YXR1cyA9PSBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKIAot
ICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnJ1bGVDb2xs
ZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29tcGlsZWRT
ZWxlY3Rvci5jb2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgY29tcGlsZWRTZWxlY3Rv
ci5zdGF0dXMpOworICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGls
ZXI6OnJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRl
eHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzKTsKIAog
I2lmIENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HCiAgICAgICAgIGNvbXBpbGVkU2VsZWN0b3Iu
dXNlQ291bnQrKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9DU1NQdHJUYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ1NTUHRyVGFnLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0NTU1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvUHRyVGFnLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGNvbnN0ZXhwciBKU0M6OlB0clRhZyBDU1NTZWxlY3RvclB0clRhZyA9IHN0YXRpY19j
YXN0PEpTQzo6UHRyVGFnPigweGM1NTEpOworc3RhdGljIGNvbnN0ZXhwciBKU0M6OlB0clRhZyBD
U1NPcGVyYXRpb25QdHJUYWcgPSBzdGF0aWNfY2FzdDxKU0M6OlB0clRhZz4oMHhjNTUyKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9K
SVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKENTU19TRUxF
Q1RPUl9KSVQpCiAKKyNpbmNsdWRlICJDU1NQdHJUYWcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTcsNyArNTgsNyBAQCBwcml2YXRlOgogc3RydWN0IENvbXBpbGVkU2VsZWN0b3IgewogICAgIFdU
Rl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKICAgICBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIHN0YXR1czsKLSAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmOworICAg
IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiBjb2RlUmVmOwog
I2lmIGRlZmluZWQoQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcpICYmIENTU19TRUxFQ1RPUl9K
SVRfUFJPRklMSU5HCiAgICAgdW5zaWduZWQgdXNlQ291bnQgeyAwIH07CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHJldmlzaW9uIDIzMDc0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAorI2luY2x1ZGUg
IkNTU1B0clRhZy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
U3RhY2tBbGxvY2F0b3IuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HUFJJbmZvLmg+CkBA
IC0zNiw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnVuY3Rpb25DYWxs
IHsKIHB1YmxpYzoKLSAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1i
bGVyLCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9y
JiBzdGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpD
YWxsLCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+JiBjYWxsUmVnaXN0cnkpCisgICAgRnVuY3Rpb25D
YWxsKEpTQzo6TWFjcm9Bc3NlbWJsZXImIGFzc2VtYmxlciwgUmVnaXN0ZXJBbGxvY2F0b3ImIHJl
Z2lzdGVyQWxsb2NhdG9yLCBTdGFja0FsbG9jYXRvciYgc3RhY2tBbGxvY2F0b3IsIFZlY3Rvcjxz
dGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cjxDU1NP
cGVyYXRpb25QdHJUYWc+PiwgMzI+JiBjYWxsUmVnaXN0cnkpCiAgICAgICAgIDogbV9hc3NlbWJs
ZXIoYXNzZW1ibGVyKQogICAgICAgICAsIG1fcmVnaXN0ZXJBbGxvY2F0b3IocmVnaXN0ZXJBbGxv
Y2F0b3IpCiAgICAgICAgICwgbV9zdGFja0FsbG9jYXRvcihzdGFja0FsbG9jYXRvcikKQEAgLTQ3
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHNldEZ1bmN0aW9u
QWRkcmVzcyhKU0M6OkZ1bmN0aW9uUHRyIGZ1bmN0aW9uQWRkcmVzcykKKyAgICB2b2lkIHNldEZ1
bmN0aW9uQWRkcmVzcyhKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gZnVuY3Rp
b25BZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9mdW5jdGlvbkFkZHJlc3MgPSBmdW5jdGlvbkFk
ZHJlc3M7CiAgICAgfQpAQCAtMTQ3LDcgKzE0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92ZShtX2ZpcnN0QXJndW1lbnQsIEpTQzo6R1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCA9IG1fYXNzZW1ibGVyLmNhbGwoSlNDOjpDRnVuY3Rpb25QdHJUYWcpOworICAgICAgICBK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBtX2Fzc2VtYmxlci5jYWxsKENTU09wZXJh
dGlvblB0clRhZyk7CiAgICAgICAgIG1fY2FsbFJlZ2lzdHJ5LmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjYWxsLCBtX2Z1bmN0aW9uQWRkcmVzcykpOwogICAgIH0KIApAQCAtMTc4LDEyICsxNzksMTIg
QEAgcHJpdmF0ZToKICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyJiBtX2Fzc2VtYmxlcjsKICAgICBS
ZWdpc3RlckFsbG9jYXRvciYgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0FsbG9jYXRv
ciYgbV9zdGFja0FsbG9jYXRvcjsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5OworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlv
blB0cjxDU1NPcGVyYXRpb25QdHJUYWc+PiwgMzI+JiBtX2NhbGxSZWdpc3RyeTsKIAogICAgIFJl
Z2lzdGVyVmVjdG9yIG1fc2F2ZWRSZWdpc3RlcnM7CiAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNr
UmVmZXJlbmNlVmVjdG9yIG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlczsKICAgICAKLSAg
ICBKU0M6OkZ1bmN0aW9uUHRyIG1fZnVuY3Rpb25BZGRyZXNzOworICAgIEpTQzo6RnVuY3Rpb25Q
dHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBtX2Z1bmN0aW9uQWRkcmVzczsKICAgICB1bnNpZ25lZCBt
X2FyZ3VtZW50Q291bnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX2Zp
cnN0QXJndW1lbnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX3NlY29u
ZEFyZ3VtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsOCArMjAxLDggQEAgc3RydWN0IFNl
bGVjdG9yRnJhZ21lbnQgewogICAgIFZlY3Rvcjxjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPio+
IGxhbmd1YWdlQXJndW1lbnRzTGlzdDsKICAgICBWZWN0b3I8Y29uc3QgQXRvbWljU3RyaW5nSW1w
bCosIDg+IGNsYXNzTmFtZXM7CiAgICAgSGFzaFNldDx1bnNpZ25lZD4gcHNldWRvQ2xhc3NlczsK
LSAgICBWZWN0b3I8SlNDOjpGdW5jdGlvblB0ciwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
OwotICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyLCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXNXaXRoQ29udGV4dDsKKyAgICBWZWN0b3I8SlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25Q
dHJUYWc+LCA0PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXM7CisgICAgVmVjdG9yPEpTQzo6RnVu
Y3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
V2l0aENvbnRleHQ7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZU1hdGNoaW5nSW5mbywgND4gYXR0cmli
dXRlczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPGludCwgaW50PiwgMj4gbnRoQ2hpbGRGaWx0ZXJz
OwogICAgIFZlY3RvcjxOdGhDaGlsZE9mU2VsZWN0b3JJbmZvPiBudGhDaGlsZE9mRmlsdGVyczsK
QEAgLTI1OCw3ICsyNTgsNyBAQCBzdHJ1Y3QgQmFja3RyYWNraW5nTGV2ZWwgewogY2xhc3MgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTZWxlY3RvckNvZGVHZW5lcmF0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqLCBTZWxlY3RvckNvbnRleHQpOwotICAgIFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXMgY29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYpOworICAgIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxDU1NTZWxlY3RvclB0clRhZz4mKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyOwpAQCAtMjkyLDggKzI5Miw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBM
aXN0JiBtYXRjaGluZ1RhZ05hbWVGYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1h
dGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsK
ICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudExpbmtNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEZ1bmN0
aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0
aW9uUHRyKTsKLSAgICB2b2lkIGdlbmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyKTsKKyAgICB2b2lk
IGdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFp
bHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4pOworICAgIHZv
aWQgZ2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPik7CiAgICAg
dm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVu
dElzRW1wdHkoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudElzRmlyc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMpOwpAQCAtMzA5LDcgKzMwOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1l
bnRBdHRyaWJ1dGVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGRlY0luZGV4UmVnaXN0ZXIsIGNvbnN0IEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyYg
YXR0cmlidXRlSW5mbyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZU1h
dGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdHRyaWJ1dGVNYXRjaGluZ0lu
Zm8mIGF0dHJpYnV0ZUluZm8pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFs
dWVFeGFjdE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5z
aXRpdml0eSk7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxW
YWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRp
dml0eSwgSlNDOjpGdW5jdGlvblB0ciBjYXNlU2Vuc2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0
ciBjYXNlSW5zZW5zaXRpdmVUZXN0KTsKKyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0
ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZh
bHVlQ2FzZVNlbnNpdGl2aXR5LCBKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4g
Y2FzZVNlbnNpdGl2ZVRlc3QsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiBj
YXNlSW5zZW5zaXRpdmVUZXN0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc1RhZ05hbWUo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBDU1NTZWxlY3RvciYgdGFn
TWF0Y2hpbmdTZWxlY3Rvcik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNJZChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnRE
YXRhQWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBpZFRvTWF0Y2gpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SGFzQ2xhc3NlcyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IGNvbnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRhQWRkcmVzcywgY29uc3QgVmVjdG9yPGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwqLCA4PiYgY2xhc3NOYW1lcyk7CkBAIC0zNTUsNyArMzU1LDcg
QEAgcHJpdmF0ZToKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxv
Y2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0FsbG9jYXRvciBtX3N0YWNrQWxs
b2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0
aW9uUHRyPiwgMzI+IG1fZnVuY3Rpb25DYWxsczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFzc2Vt
Ymxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+PiwgMzI+IG1f
ZnVuY3Rpb25DYWxsczsKIAogICAgIFNlbGVjdG9yQ29udGV4dCBtX3NlbGVjdG9yQ29udGV4dDsK
ICAgICBGdW5jdGlvblR5cGUgbV9mdW5jdGlvblR5cGU7CkBAIC0zOTIsNyArMzkyLDcgQEAgc3Rh
dGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoYwogCiBzdGF0aWMgdm9pZCBjb21w
dXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9y
RnJhZ21lbnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCi1TZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogbGFzdFNlbGVjdG9yLCBTZWxl
Y3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZVJlZikKK1NlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG9yKGNvbnN0
IENTU1NlbGVjdG9yKiBsYXN0U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRl
eHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiYgY29kZVJl
ZikKIHsKICAgICBpZiAoIUpTQzo6Vk06OmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JDb21waWxhdGlvblN0YXR1czo6Q2Fubm90Q29tcGlsZTsKQEAgLTQzNiw3ICs0MzYsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgZnJhZ21lbnRNYXRjaGVzUmlnaHRtCiAKIEZ1bmN0aW9uVHlw
ZSBTZWxlY3RvckZyYWdtZW50OjphcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
JikpCiB7Ci0gICAgdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRleHQuYXBwZW5kKEpT
Qzo6RnVuY3Rpb25QdHIobWF0Y2hlcikpOworICAgIHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dp
dGhDb250ZXh0LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0
Y2hlcikpOwogICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVj
a2luZ0NvbnRleHQ7CiB9CiAKQEAgLTUzNCw4MyArNTM0LDgzIEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXMKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAvLyBVbm9w
dGltaXplZCBwc2V1ZG8gc2VsZWN0b3IuIFRoZXkgYXJlIGp1c3QgZnVuY3Rpb24gY2FsbCB0byBh
IHNpbXBsZSB0ZXN0aW5nIGZ1bmN0aW9uLgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzQXV0b2ZpbGw6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0F1dG9maWxsZWQpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4oaXNBdXRvZmlsbGVkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0F1dG9maWxsU3Ryb25nUGFzc3dvcmQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc0F1dG9maWxsZWRTdHJvbmdQYXNz
d29yZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0F1dG9maWxsZWRTdHJvbmdQ
YXNzd29yZCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NDaGVja2VkOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25Q
dHIoaXNDaGVja2VkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzQ2hlY2tlZCkp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWZhdWx0OgotICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hl
c0RlZmF1bHRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRj
aGVzRGVmYXVsdFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rp
c2FibGVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRy
PENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3MpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRW5hYmxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNFbmFibGVk
UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0VuYWJs
ZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxl
Y3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWZpbmVkOgot
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVu
Y3Rpb25QdHIoaXNEZWZpbmVkRWxlbWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFn
Pihpc0RlZmluZWRFbGVtZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3Vz
OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHIoU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcykpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVu
Y3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1
c1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxQYWdlTWVk
aWE6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihpc01lZGlhRG9jdW1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0
clRhZz4oaXNNZWRpYURvY3VtZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0lu
UmFuZ2U6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
SlNDOjpGdW5jdGlvblB0cihpc0luUmFuZ2UpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRh
Zz4oaXNJblJhbmdlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luZGV0ZXJtaW5h
dGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKSk7CisgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW52YWxpZDoKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzSW52YWxp
ZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpT
Qzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc0ludmFsaWQpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzT3B0aW9uYWw6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc09wdGlvbmFsRm9ybUNv
bnRyb2wpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNPcHRpb25hbEZvcm1Db250
cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc091dE9mUmFuZ2U6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cihpc091dE9mUmFuZ2UpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4oaXNPdXRPZlJh
bmdlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRPbmx5OgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIo
bWF0Y2hlc1JlYWRPbmx5UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRh
Zz4obWF0Y2hlc1JlYWRPbmx5UHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzUmVhZFdyaXRlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFz
cykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZXF1aXJlZDoKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlz
UmVxdWlyZWRGb3JtQ29udHJvbCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihpc1Jl
cXVpcmVkRm9ybUNvbnRyb2wpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmFsaWQ6
Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpG
dW5jdGlvblB0cihpc1ZhbGlkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlzVmFs
aWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU6Ci0gICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlv
blB0cihpc1dpbmRvd0luYWN0aXZlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+KGlz
V2luZG93SW5hY3RpdmUpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdWxsU2Ny
ZWVuUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0Z1
bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxs
U2NyZWVuRG9jdW1lbnQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlbkRvY3VtZW50UHNldWRv
Q2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4obWF0Y2hlc0Z1bGxTY3JlZW5E
b2N1bWVudFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxT
Y3JlZW5BbmNlc3RvcjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdWxsU2NyZWVuQW5jZXN0b3JQc2V1ZG9D
bGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnVsbFNjcmVlbkFu
Y2VzdG9yUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW5pbWF0
aW5nRnVsbFNjcmVlblRyYW5zaXRpb246Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlbkFuaW1h
dGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJh
dGlvblB0clRhZz4obWF0Y2hlc0Z1bGxTY3JlZW5BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlv
blBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICNlbmRpZgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1dHVyZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXNGdXR1cmVDdWVQ
c2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPihtYXRjaGVzRnV0dXJl
Q3VlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGFzdDoKLSAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0
aW9uUHRyKG1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlv
blB0clRhZz4obWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAjZW5kaWYKIApAQCAtMTIxNiw3ICsx
MjE2LDcgQEAgdm9pZCBjb21wdXRlQmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbgogICAgIH0K
IH0KIAotaW5saW5lIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmKQoraW5saW5l
IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxl
KEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPENTU1NlbGVjdG9yUHRyVGFnPiYgY29kZVJlZikK
IHsKICAgICBzd2l0Y2ggKG1fZnVuY3Rpb25UeXBlKSB7CiAgICAgY2FzZSBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjoKQEAgLTEyNDQsMTEgKzEyNDQsMTAgQEAgaW5saW5lIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0bwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2Z1bmN0aW9uQ2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhtX2Z1bmN0aW9uQ2FsbHNbaV0uZmlyc3QsIG1fZnVuY3Rpb25DYWxsc1tpXS5zZWNvbmQpOwog
Ci0gICAgSlNDOjpQdHJUYWcgdGFnID0gcHRyVGFnKCZjb2RlUmVmLCBtX3NlbGVjdG9yQ29udGV4
dCk7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKLSAgICBjb2RlUmVmID0gbGlua0J1
ZmZlci5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkodGFnLCAiQ1NTIFNlbGVjdG9yIEpJVCBm
b3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBjb2RlUmVmID0gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1i
bHkoQ1NTU2VsZWN0b3JQdHJUYWcsICJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVzXCIiLCBtX29y
aWdpbmFsU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKLSAg
ICBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCB0YWcsICJDU1MgU2VsZWN0b3Ig
SklUIik7CisgICAgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQ1NTU2VsZWN0
b3JQdHJUYWcsICJDU1MgU2VsZWN0b3IgSklUIik7CiAjZW5kaWYKIAogICAgIGlmIChtX2Z1bmN0
aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciB8fCBtX2Z1bmN0
aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCkBAIC0zMDE5LDcg
KzMwMTgsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAg
fQogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmli
dXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29u
c3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkg
dmFsdWVDYXNlU2Vuc2l0aXZpdHksIEpTQzo6RnVuY3Rpb25QdHIgY2FzZVNlbnNpdGl2ZVRlc3Qs
IEpTQzo6RnVuY3Rpb25QdHIgY2FzZUluc2Vuc2l0aXZlVGVzdCkKK3ZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNo
aW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcmIGV4cGVjdGVk
VmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgSlND
OjpGdW5jdGlvblB0cjxDU1NPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBKU0M6
OkZ1bmN0aW9uUHRyPENTU09wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCkKIHsK
ICAgICBMb2NhbFJlZ2lzdGVyV2l0aFByZWZlcmVuY2UgZXhwZWN0ZWRWYWx1ZVJlZ2lzdGVyKG1f
cmVnaXN0ZXJBbGxvY2F0b3IsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBtX2Fz
c2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihleHBlY3RlZFZhbHVlLmltcGwo
KSksIGV4cGVjdGVkVmFsdWVSZWdpc3Rlcik7CkBAIC0zMDc1LDcgKzMwNzQsNyBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgfQogfQogCi12b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9u
KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2Fs
bFRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRy
PENTU09wZXJhdGlvblB0clRhZz4gdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7CiAgICAgRnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwg
bV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKQEAgLTMwODQsNyArMzA4Myw3IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUo
QXNzZW1ibGVyOjpaZXJvKSk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCit2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHI8Q1NTT3BlcmF0aW9uUHRyVGFnPiB0
ZXN0RnVuY3Rpb24pCiB7CiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4
dCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdpc3RlcigpOwogICAgIGxvYWRDaGVj
a2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuaAkocmV2aXNpb24gMjMwNzQ1KQorKysgU291cmNlL1dlYkNvcmUv
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMzQgKzUzLDMw
IEBAIHR5cGVkZWYgdW5zaWduZWQgKCpRdWVyeVNlbGVjdG9yU2ltcGxlU2UKIHR5cGVkZWYgdW5z
aWduZWQgKCpSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCko
Y29uc3QgRWxlbWVudCosIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiwgdW5zaWdu
ZWQqKTsKIHR5cGVkZWYgdW5zaWduZWQgKCpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dCkoY29uc3QgRWxlbWVudCosIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0Kik7CiAKLVNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgU2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYgb3V0cHV0Q29kZVJlZik7CitTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
IGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIFNlbGVjdG9yQ29udGV4dCwgSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY8Q1NTU2VsZWN0b3JQdHJUYWc+JiBvdXRwdXRDb2RlUmVm
KTsKIAotaW5saW5lIFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgcnVsZUNvbGxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiBjb2RlUmVmLCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21w
aWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKK2lubGluZSBSdWxlQ29sbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyIHJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5j
dGlvbih2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBj
b21waWxhdGlvblN0YXR1cykKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGF0aW9uU3RhdHVz
LCBjb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVT
ZWxlY3RvckNoZWNrZXIpOwotICAgIEpTQzo6UHRyVGFnIHRhZyA9IEpTQzo6cHRyVGFnKCZjb2Rl
UmVmLCBTZWxlY3RvckNvbnRleHQ6OlJ1bGVDb2xsZWN0b3IpOwotICAgIHJldHVybiBKU0M6OnVu
dGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXI+KGV4ZWN1
dGFibGVBZGRyZXNzLCB0YWcpOworICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFJ1
bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIsIENTU1NlbGVjdG9yUHRyVGFnPihleGVj
dXRhYmxlQWRkcmVzcyk7CiB9CiAKLWlubGluZSBRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JD
aGVja2VyIHF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb25zdCBK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgdm9pZCogZXhlY3V0YWJsZUFkZHJl
c3MsIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCitpbmxpbmUg
UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBxdWVyeVNlbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb24odm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChj
b21waWxhdGlvblN0YXR1cywgY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKLSAgICBKU0M6OlB0clRhZyB0YWcgPSBK
U0M6OnB0clRhZygmY29kZVJlZiwgU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKLSAg
ICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0
b3JDaGVja2VyPihleGVjdXRhYmxlQWRkcmVzcywgdGFnKTsKKyAgICByZXR1cm4gSlNDOjp1bnRh
Z0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBDU1NTZWxl
Y3RvclB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpOwogfQogCi1pbmxpbmUgUnVsZUNvbGxlY3Rv
clNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgcnVsZUNvbGxlY3RvclNlbGVjdG9y
Q2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYgY29kZVJlZiwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgY29tcGlsYXRpb25TdGF0dXMpCitpbmxpbmUgUnVsZUNvbGxlY3RvclNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgcnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hl
Y2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dCh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywg
U2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGNvbXBpbGF0aW9uU3RhdHVzLCBjb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsK
LSAgICBKU0M6OlB0clRhZyB0YWcgPSBKU0M6OnB0clRhZygmY29kZVJlZiwgU2VsZWN0b3JDb250
ZXh0OjpSdWxlQ29sbGVjdG9yKTsKLSAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxS
dWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dD4oZXhlY3V0YWJs
ZUFkZHJlc3MsIHRhZyk7CisgICAgcmV0dXJuIEpTQzo6dW50YWdDRnVuY3Rpb25QdHI8UnVsZUNv
bGxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQsIENTU1NlbGVjdG9yUHRy
VGFnPihleGVjdXRhYmxlQWRkcmVzcyk7CiB9CiAKLWlubGluZSBRdWVyeVNlbGVjdG9yU2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2Vy
RnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmJiBjb2RlUmVmLCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKK2lubGluZSBRdWVyeVNlbGVjdG9yU2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVu
Y3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAgIEFTU0VSVF9VTlVT
RUQoY29tcGlsYXRpb25TdGF0dXMsIGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwotICAgIEpT
Qzo6UHRyVGFnIHRhZyA9IEpTQzo6cHRyVGFnKCZjb2RlUmVmLCBTZWxlY3RvckNvbnRleHQ6OlF1
ZXJ5U2VsZWN0b3IpOwotICAgIHJldHVybiBKU0M6OnVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2Vs
ZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0PihleGVjdXRhYmxlQWRkcmVz
cywgdGFnKTsKKyAgICByZXR1cm4gSlNDOjp1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9y
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgQ1NTU2VsZWN0b3JQdHJUYWc+KGV4
ZWN1dGFibGVBZGRyZXNzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgU2VsZWN0b3JDb21waWxlcgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24gMjMwNzQ1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTEsMTEgKzQ1MSwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6
ZXhlCiAgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQq
IGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyID0gc2VsZWN0b3IuY29tcGlsZWRTZWxlY3RvckNvZGVS
ZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICBpZiAoc2VsZWN0b3Iu
Y29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWxlY3RvckNoZWNrZXIgPSBT
ZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rp
b24oc2VsZWN0b3IuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVj
a2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICAgICAgYXV0byBz
ZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yLmNv
bXBpbGF0aW9uU3RhdHVzKTsKICAgICAgICAgICAgICAgICBtYXRjaGVkID0gc2VsZWN0b3JDaGVj
a2VyKCZlbGVtZW50KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHNlbGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgICAg
IGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNl
bGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChzZWxlY3Rvci5jb21waWxl
ZFNlbGVjdG9yQ29kZVJlZiwgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yLmNvbXBp
bGF0aW9uU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdG9yQ2hlY2tlciA9IFNl
bGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhD
aGVja2luZ0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yLmNvbXBpbGF0
aW9uU3RhdHVzKTsKICAgICAgICAgICAgICAgICBtYXRjaGVkID0gc2VsZWN0b3JDaGVja2VyKCZl
bGVtZW50LCAmY2hlY2tpbmdDb250ZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChtYXRjaGVkKSB7CkBAIC01NDMsMTEgKzU0MywxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2Vs
ZWN0b3JEYXRhTGlzdDo6ZXhlCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JE
YXRhID0gbV9zZWxlY3RvcnMuZmlyc3QoKTsKICAgICAgICAgdm9pZCogY29tcGlsZWRTZWxlY3Rv
ckNoZWNrZXIgPSBzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgIGlmIChzZWxlY3RvckRhdGEuY29tcGlsYXRpb25T
dGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
KSB7Ci0gICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2ltcGxlU2Vs
ZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2Vs
ZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihzZWxlY3RvckRhdGEuY29tcGlsZWRT
ZWxlY3RvckNvZGVSZWYsIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3RvckRhdGEuY29t
cGlsYXRpb25TdGF0dXMpOworICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxl
Y3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBp
bGVyOjpxdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRT
ZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyk7CiAgICAgICAg
ICAgICBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXI8U2VsZWN0b3JRdWVyeVRy
YWl0Pigqc2VhcmNoUm9vdE5vZGUsIHNlbGVjdG9yQ2hlY2tlciwgb3V0cHV0LCBzZWxlY3RvckRh
dGEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9yRGF0YS5j
b21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6
OlF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9y
Q2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJG
dW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JD
b2RlUmVmLCBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9u
U3RhdHVzKTsKKyAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTZWxl
Y3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9y
Q29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2lu
Z0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlv
blN0YXR1cyk7CiAgICAgICAgICAgICBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRo
Q2hlY2tpbmdDb250ZXh0PFNlbGVjdG9yUXVlcnlUcmFpdD4ocm9vdE5vZGUsICpzZWFyY2hSb290
Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgJKHJldmlz
aW9uIDIzMDc0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkK
LSAgICAgICAgbXV0YWJsZSBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb21waWxlZFNlbGVj
dG9yQ29kZVJlZjsKKyAgICAgICAgbXV0YWJsZSBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjxD
U1NTZWxlY3RvclB0clRhZz4gY29tcGlsZWRTZWxlY3RvckNvZGVSZWY7CiAgICAgICAgIG11dGFi
bGUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1czsKICNpZiBDU1Nf
U0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICB+U2VsZWN0b3JEYXRhKCkK
</data>
<flag name="commit-queue"
          id="356494"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
      

    </bug>

</bugzilla>