<?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>190906</bug_id>
          
          <creation_ts>2018-10-25 10:25:16 -0700</creation_ts>
          <short_desc>Try ripping out inferred types because it might be a performance improvement</short_desc>
          <delta_ts>2019-01-29 22:27:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186725</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1472104</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-25 10:25:16 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472981</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-29 12:00:21 -0700</bug_when>
    <thetext>Doing this now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472996</commentid>
    <comment_count>2</comment_count>
      <attachid>353310</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-29 12:47:36 -0700</bug_when>
    <thetext>Created attachment 353310
WIP

Test out EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472998</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-29 12:50:36 -0700</bug_when>
    <thetext>Attachment 353310 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 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>1473920</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-31 16:18:13 -0700</bug_when>
    <thetext>On Mac, this looks like:
JetStream 2: neutral - 0.8% improvement based on HW
Speedometer 2: neutral - 1% improvement based on HW

I still need to run on iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473929</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-31 16:27:38 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; On Mac, this looks like:
&gt; JetStream 2: neutral - 0.8% improvement based on HW
&gt; Speedometer 2: neutral - 1% improvement based on HW
Make this: Speedometer 2: neutral - 1.75%
&gt; 
&gt; I still need to run on iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494452</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-14 18:35:18 -0800</bug_when>
    <thetext>Note: If we decide to keep this code, there is LLInt code that&apos;s wrong for BigInt in put_by_id</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494488</commentid>
    <comment_count>7</comment_count>
      <attachid>359121</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-14 19:55:08 -0800</bug_when>
    <thetext>Created attachment 359121
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494490</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 19:57:00 -0800</bug_when>
    <thetext>Attachment 359121 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 20 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>1494744</commentid>
    <comment_count>9</comment_count>
      <attachid>359187</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 11:53:21 -0800</bug_when>
    <thetext>Created attachment 359187
patch

Try to fix 32-bit and non-mac platform build issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494746</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-15 11:56:35 -0800</bug_when>
    <thetext>Attachment 359187 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 21 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>1494761</commentid>
    <comment_count>11</comment_count>
      <attachid>359187</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-01-15 12:32:50 -0800</bug_when>
    <thetext>Comment on attachment 359187
patch

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

r=me with additional cleanup suggestions.

&gt; Source/JavaScriptCore/bytecode/PutByIdFlags.h:41
&gt;  inline PutByIdFlags encodeStructureID(StructureID id)

This function is no longer used.

&gt; Source/JavaScriptCore/bytecode/PutByIdFlags.h:54
&gt;  #if USE(JSVALUE64)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:-2921
&gt; -                    result.merge(
&gt; -                        m_graph.inferredValueForProperty(
&gt; -                            value, uid, status[i].offset(), m_state.structureClobberState()));

This would perform tryGetConstantProperty, don&apos;t we need to do this?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:-1354
&gt; -    loadi OpPutById::Metadata::flags[t5], t1

Now, I think that this metadata.flag is no longer necessary. All the information can be fit into byte code.flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494763</commentid>
    <comment_count>12</comment_count>
      <attachid>359187</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 12:35:42 -0800</bug_when>
    <thetext>Comment on attachment 359187
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:-2921
&gt;&gt; -                            value, uid, status[i].offset(), m_state.structureClobberState()));
&gt; 
&gt; This would perform tryGetConstantProperty, don&apos;t we need to do this?

Yes. I shouldn&apos;t have removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494778</commentid>
    <comment_count>13</comment_count>
      <attachid>359196</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 13:08:44 -0800</bug_when>
    <thetext>Created attachment 359196
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494779</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-15 13:12:27 -0800</bug_when>
    <thetext>Attachment 359196 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 22 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>1494880</commentid>
    <comment_count>15</comment_count>
      <attachid>359196</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-15 16:12:54 -0800</bug_when>
    <thetext>Comment on attachment 359196
patch for landing

Rejecting attachment 359196 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 359196, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
u must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
W: 5b0710c656a3667176a0e697ddf2b0be91a76beb and refs/remotes/origin/master differ, using rebase:
:040000 040000 9902d06c4513992a85e4ce8903cea235fec10a61 26fd48e8dfc4d9f56967ce8420b34ecca68dfba3 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	Source/JavaScriptCore/dfg/DFGDesiredInferredType.h
	D	Source/JavaScriptCore/dfg/DFGInferredTypeCheck.cpp
	D	Source/JavaScriptCore/dfg/DFGInferredTypeCheck.h
	D	Source/JavaScriptCore/runtime/InferredStructure.cpp
	D	Source/JavaScriptCore/runtime/InferredStructure.h
	D	Source/JavaScriptCore/runtime/InferredStructureWatchpoint.cpp
	D	Source/JavaScriptCore/runtime/InferredStructureWatchpoint.h
	D	Source/JavaScriptCore/runtime/InferredType.cpp
	D	Source/JavaScriptCore/runtime/InferredType.h
	D	Source/JavaScriptCore/runtime/InferredTypeInlines.h
	D	Source/JavaScriptCore/runtime/InferredTypeTable.cpp
	D	Source/JavaScriptCore/runtime/InferredTypeTable.h
	M	Source/JavaScriptCore/CMakeLists.txt
	M	Source/JavaScriptCore/ChangeLog
	M	Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
	M	Source/JavaScriptCore/Sources.txt
	M	Source/JavaScriptCore/UnifiedSources-input.xcfilelist
	M	Source/JavaScriptCore/bytecode/AccessCase.cpp
	M	Source/JavaScriptCore/bytecode/BytecodeList.rb
	M	Source/JavaScriptCore/bytecode/Fits.h
	M	Source/JavaScriptCore/bytecode/PutByIdFlags.cpp
	M	Source/JavaScriptCore/bytecode/PutByIdFlags.h
	M	Source/JavaScriptCore/bytecode/PutByIdStatus.cpp
	M	Source/JavaScriptCore/bytecode/PutByIdVariant.cpp
	M	Source/JavaScriptCore/bytecode/PutByIdVariant.h
	M	Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
	M	Source/JavaScriptCore/dfg/DFGAbstractValue.cpp
	M	Source/JavaScriptCore/dfg/DFGAbstractValue.h
	M	Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
	M	Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
	M	Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.cpp
	M	Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h
	M	Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
	M	Source/JavaScriptCore/dfg/DFGGraph.cpp
	M	Source/JavaScriptCore/dfg/DFGGraph.h
	M	Source/JavaScriptCore/dfg/DFGNode.h
	M	Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp
	M	Source/JavaScriptCore/dfg/DFGSafeToExecute.h
	M	Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
	M	Source/JavaScriptCore/generator/DSL.rb
	M	Source/JavaScriptCore/heap/Heap.cpp
	M	Source/JavaScriptCore/jit/AssemblyHelpers.cpp
	M	Source/JavaScriptCore/jit/AssemblyHelpers.h
	M	Source/JavaScriptCore/jit/JITPropertyAccess.cpp
	M	Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
	M	Source/JavaScriptCore/jit/Repatch.cpp
	M	Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp
	M	Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
	M	Source/JavaScriptCore/llint/LowLevelInterpreter.asm
	M	Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
	M	Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
	M	Source/JavaScriptCore/runtime/JSModuleLoader.h
	M	Source/JavaScriptCore/runtime/JSObjectInlines.h
	M	Source/JavaScriptCore/runtime/Structure.cpp
	M	Source/JavaScriptCore/runtime/Structure.h
	M	Source/JavaScriptCore/runtime/StructureInlines.h
	M	Source/JavaScriptCore/runtime/VM.cpp
	M	Source/JavaScriptCore/runtime/VM.h

ERROR from SVN:
A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output:

    The following files contain tab characters:

        trunk/Source/JavaScriptCore/ChangeLog

    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
W: 5b0710c656a3667176a0e697ddf2b0be91a76beb and refs/remotes/origin/master differ, using rebase:
:040000 040000 9902d06c4513992a85e4ce8903cea235fec10a61 26fd48e8dfc4d9f56967ce8420b34ecca68dfba3 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   4320f2cdf04..a364fa76fb3  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 240016 = 4320f2cdf04c35333326d85e2625b21ec6803bdf
r240017 = a364fa76fb35b7cc445c092b976a5d2e121a43d0
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: https://webkit-queues.webkit.org/results/10765054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494910</commentid>
    <comment_count>16</comment_count>
      <attachid>359228</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 16:59:03 -0800</bug_when>
    <thetext>Created attachment 359228
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494938</commentid>
    <comment_count>17</comment_count>
      <attachid>359228</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-15 17:41:49 -0800</bug_when>
    <thetext>Comment on attachment 359228
patch for landing

Clearing flags on attachment: 359228

Committed r240023: &lt;https://trac.webkit.org/changeset/240023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494939</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-15 17:41:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494940</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-15 17:42:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/47303601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496355</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 12:42:18 -0800</bug_when>
    <thetext>Results are:
1% faster Speedometer 2
1% faster ARES6
0-1% faster JetStream2
1% slower JetStream</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353310</attachid>
            <date>2018-10-29 12:47:36 -0700</date>
            <delta_ts>2019-01-14 19:55:08 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>114474</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOSwxNCArMTAxOSw2IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICB9CiAKICAgICBjYXNlIFJlcGxh
Y2U6IHsKLSAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZl
cnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewotICAgICAgICAgICAgaWYgKEFjY2Vzc0Nhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIs
IHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVw
YXRjaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJl
Z3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOwotICAgICAgICB9IGVsc2UgaWYg
KEFjY2Vzc0Nhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRvbid0
IGhhdmUgdHlwZS5cbiIpOwotCiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkp
IHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVn
cywKQEAgLTEwNDksMTQgKzEwNDEsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2
ZSByZXR1cm5lZCBudWxsIGlmIHRoaXMgd2Fzbid0IHRydWUuCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIAotICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gbmV3U3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBs
KCkpKSB7Ci0gICAgICAgICAgICBpZiAoQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAi
XG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKLSAgICAgICAg
ICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+
ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoQWNjZXNzQ2FzZUludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7Ci0KICAg
ICAgICAgLy8gTk9URTogVGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGluIEFjY2Vzc0Nhc2U6OmRv
ZXNDYWxscygpLiBJdCdzIGltcG9ydGFudCB0aGF0IGRvZXNDYWxscygpIGtub3dzCiAgICAgICAg
IC8vIGV4YWN0bHkgd2hlbiB0aGlzIHdvdWxkIG1ha2UgY2FsbHMuCiAgICAgICAgIGJvb2wgYWxs
b2NhdGluZyA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0ZpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRml0cy5oCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRml0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJPcGNvZGVTaXplLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZVR5cGVCeXRlY29kZUZsYWcuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRl
ICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5o
IgogCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgpAQCAtMzksMTEgKzM4LDYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFB1dAogICAgIENvbW1hUHJpbnRlciBjb21tYSgifCIpOwogICAgIGlmIChm
bGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiSXNEaXJl
Y3QiKTsKLQotICAgIEluZmVycmVkVHlwZTo6S2luZCBraW5kID0gSW5mZXJyZWRUeXBlOjpraW5k
Rm9yRmxhZ3MoZmxhZ3MpOwotICAgIG91dC5wcmludChjb21tYSwga2luZCk7Ci0gICAgaWYgKElu
ZmVycmVkVHlwZTo6aGFzU3RydWN0dXJlKGtpbmQpKQotICAgICAgICBvdXQucHJpbnQoIjoiLCBi
aXR3aXNlX2Nhc3Q8aW50MzJfdD4oZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJl
ZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlE
KTsKQEAgLTk0LDcgKzk0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbQogICAgIH0KICAgICAKICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwg
bmV3U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICBz
dHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiAjaWYg
RU5BQkxFKEpJVCkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7CiAgICAgfQpAQCAtMTc0LDcgKzE3NCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNl
dCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xODcsOCArMTg3LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAg
ICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LCBjb25kaXRpb25TZXQsIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0
cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIApAQCAtMzIwLDcgKzMxOSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZv
cih1aWQpKTsKKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1
cmUsIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNTUsOCArMzU0LDcgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgICAgICBib29sIGRpZEFwcGVu
ZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCwKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5pbmZlcnJlZFR5cGVE
ZXNjcmlwdG9yRm9yKHVpZCkpKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRp
b24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIFB1dEJ5
SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9
IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25k
aXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBtX3JlcXVpcmVk
VHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTU0LDIwICs1
MywxOCBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiB9CiAKIFB1
dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVz
dWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVz
dWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1
aXJlZFR5cGUpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3Vs
dDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTc1LDcgKzcyLDYgQEAgUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0
cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3Jl
cXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05
MCw3ICs4Niw2IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAg
cmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNl
dCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExp
bmtTdGF0dXMpOwotICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9w
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE1OSw5ICsxNTQsNiBAQCBib29sIFB1dEJ5
SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZXF1aXJlZFR5
cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
ICAgICBzd2l0Y2ggKG1fa2luZCkgewogICAgIGNhc2UgTm90U2V0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzA1LDE2ICsyOTcsMTQgQEAgdm9pZCBQdXRCeUlk
VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxhY2U6
CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0
KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCi0g
ICAgICAgICAgICBpbkNvbnRleHQocmVxdWlyZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOworICAg
ICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAg
ICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiB0byAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwKLSAgICAgICAgICAgIGlu
Q29udGV4dChyZXF1aXJlZFR5cGUoKSwgY29udGV4dCksICI+Iik7CisgICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICIsICIsICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1MiwxMSBAQCBwdWJs
aWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRC
eUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtMTA1LDEx
ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNl
SWZOZWNlc3NhcnkoKTsKIAotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUeXBlOwotICAgIH0K
LQogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0
ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CkBAIC0xNTAs
NyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVs
bHB0ciB9OwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owog
ICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciBtX3JlcXVpcmVkVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAy
Mzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxODUsMTEgKzMxODUsNiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUg
dmFsdWUgPSBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpKTsKIAotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHR5
cGUgdGhhdCBCeXRlQ29kZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgotICAgICAgICBB
YnN0cmFjdFZhbHVlIHR5cGVGcm9tUGFyc2luZzsKLSAgICAgICAgdHlwZUZyb21QYXJzaW5nLnNl
dChtX2dyYXBoLCBkYXRhLmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSk7Ci0gICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOwotCiAgICAgICAg
IC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0
IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CiAgICAgICAgIC8vIGJlY2F1c2Ug
dGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgogICAgICAgICBpZiAodmFs
dWUuaXNDbGVhcigpKQpAQCAtMzI5Nyw3ICszMjkyLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7Ci0gICAgICAgICAg
ICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAg
ICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2MiArMTI2LDYgQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgc3dpdGNoIChk
ZXNjcmlwdG9yLmtpbmQoKSkgewotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAg
ICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9v
bGVhbjoKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAgICAgICBzZXROb25DZWxsVHlw
ZShTcGVjT3RoZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Oklu
dDMyOgotICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHNldE5vbkNlbGxU
eXBlKFNwZWNCeXRlY29kZU51bWJlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVy
cmVkVHlwZTo6U3RyaW5nOgotICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpT
eW1ib2w6Ci0gICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zeW1ib2xTdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAg
ICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLmJpZ0ludFN0cnVjdHVyZS5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToK
LSAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
LSAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbWVy
Z2UoU3BlY090aGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3Q6Ci0gICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6Ci0gICAgICAgIHNldFR5
cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKLSAgICAgICAgbWFrZUhlYXBUb3AoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAotICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xv
YmJlclN0YXRlKQotewotICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7Ci0gICAgaWYgKGNsb2Ji
ZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQotICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcygpOwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlv
bihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsK
ICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMjUzLDE3
ICsxOTcsNiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAg
cmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1ib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShH
cmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBl
KSBjb25zdAotewotICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOwotICAgIHR5cGVWYWx1ZS5z
ZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7Ci0KLSAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVl
ID0gKnRoaXM7Ci0gICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKLQotICAgIHJldHVy
biBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Ci19Ci0KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJh
Y3RWYWx1ZTo6ZmlsdGVyKAogICAgIEdyYXBoJiBncmFwaCwgY29uc3QgUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldCYgb3RoZXIsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7CkBAIC00MDIs
MTMgKzMzNSw2IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAg
ICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZh
bHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKLSAgICBmaWx0
ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOwotICAgIHJldHVybiBmaWx0ZXIoZmlsdGVy
VmFsdWUpOwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsK
ICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCkBAIC0y
NDksOSArMjQ4LDYgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImKTsKLSAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7Ci0KICAgICB2b2lkIGZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9k
ZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYs
IE5vZGUqKTsKICAgICAKQEAgLTMxOCw4ICszMTQsNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc1R5cGUoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKSBjb25z
dDsKLQogICAgIC8vIEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUg
c2V0LiBJZiB0aGUgYWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCiAg
ICAgLy8gaW1wbGljaXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1
Y3R1cmUgc2V0LCB3aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgogICAgIC8vIFNwZWNDZWxs
LiBIZW5jZSwgYWZ0ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBh
bnkgbm9uLWNlbGwgbWVtYmVycy4gQnV0LCB5b3UgY2FuCkBAIC0zNTQsOCArMzQ4LDYgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFi
c3RyYWN0VmFsdWUmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckNsYXNzSW5mbyhHcmFw
aCYsIGNvbnN0IENsYXNzSW5mbyopOwogCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3Jh
cGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKLSAgICAKICAgICBBTFdBWVNf
SU5MSU5FIEZpbHRyYXRpb25SZXN1bHQgZmFzdEZvcndhcmRUb0FuZEZpbHRlclVucHJvdmVuKEFi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggbmV3RXBvY2gsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAg
ICAgewogICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjM3NTU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NCw4ICsxODQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxl
VHlwZWRBcnJheUNvbnN0cnVjdG9yKFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEludGVybmFsRnVu
Y3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNvbnN0
YW50SW50ZXJuYWxGdW5jdGlvbihOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBTcGVjdWxhdGVk
VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKLSAgICBOb2RlKiBoYW5k
bGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOwotICAg
IE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxl
UHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVk
VHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogICAgIGJvb2wgaGFuZGxlRE9NSklUR2V0dGVy
KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiwgTm9kZSogdGhp
c05vZGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24pOwogICAgIGJvb2wgaGFuZGxlTW9kdWxlTmFtZXNwYWNlTG9hZChWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgR2V0QnlJZFN0YXR1cyk7CiAKQEAg
LTM3MzMsOCArMzczMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50
ZXIKIH0KIAogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAotICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCisgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3Jh
Z2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0zNzQ1LDggKzM3NDQsNiBA
QCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAg
ZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyTnVtYmVyOwotICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAg
ICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7CiAgICAgCiAgICAg
Tm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIApAQCAtMzc1NCw3ICszNzUxLDcg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogfQogCiBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCi0gICAgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgTm9kZSogdmFsdWUpCiB7CiAgICAg
Tm9kZSogcHJvcGVydHlTdG9yYWdlOwpAQCAtMzc2Niw4ICszNzYzLDYgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9
IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKLSAgICBk
YXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgbV9ncmFwaC5yZWdpc3Rlcklu
ZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRv
R3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2
YWx1ZSk7CiAgICAgCkBAIC0zOTQwLDcgKzM5MzUsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
bG9hZCgKICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewog
ICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1l
dGhvZC5wcm90b3R5cGUoKSkpOwogICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCi0g
ICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9k
Lm9mZnNldCgpLCBJbmZlcnJlZFR5cGU6OlRvcCwgb3ApOworICAgICAgICAgICAgcHJlZGljdGlv
biwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOwogICAg
IH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgogICAgICAgICAvLyBXaWxsIG5l
dmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KQEAgLTQxMzMsMTcgKzQxMjgsOCBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29u
c3RhbnQoY29uc3RhbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yIGluZmVycmVkVHlwZTsKLSAgICAgICAgaWYgKG5lZWRTdHJ1Y3R1cmVDaGVjaykgewot
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdGhpc1R5
cGUgPSBtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKTsKLSAg
ICAgICAgICAgICAgICBpbmZlcnJlZFR5cGUubWVyZ2UodGhpc1R5cGUpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlw
ZTo6VG9wOwotICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNl
dCgKLSAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CisgICAgICAgICAgICBsb2Fk
UHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgbG9h
ZE9wKTsKICAgICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC00MTU0LDcgKzQxNDAs
NyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgCiAgICAgUkVMRUFT
RV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAg
ICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICByZXR1cm4g
aGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFy
aWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNl
dChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC00Mzg5LDcgKzQzNzUsNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCku
YWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJh
c2UpOwogCiAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRC
eUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZl
cnJlZFR5cGUodmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgICAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCkBAIC00NDU1LDgg
KzQ0NDAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBT
dG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQo
KTsKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKICAgICAgICAgZGF0
YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgIGRhdGEtPmlu
ZmVycmVkVHlwZSA9IHZhcmlhbnQucmVxdWlyZWRUeXBlKCk7Ci0gICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJJbmZlcnJlZFR5cGUoZGF0YS0+aW5mZXJyZWRUeXBlKTsKICAgICAgICAgCiAgICAgICAg
IC8vIE5PVEU6IFdlIGNvdWxkIEdDIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBzb21lb25lIGNvdWxk
IGluc2VydCBhbiBvcGVyYXRpb24gdGhhdCBHQ3MuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lIGJl
Y2F1c2U6CkBAIC00NzY4LDkgKzQ3NTEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBrbm93blBvbHlQcm90b09m
ZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51
bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUobV9ncmFwaC5tX3ZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnBvbHlQcm90b05hbWUoKS5pbXBsKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRU
eXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNJbmxpbmVPZmZzZXQoa25v
d25Qb2x5UHJvdG9PZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBvYmplY3QsIG9iamVjdCwgd2Vha0pT
Q29uc3RhbnQocHJvdG90eXBlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdH
cmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCi0jaW5jbHVkZSAi
REZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTQ3Nyw4
ICs0NzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNzI3LDEwICs3MjUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPm9mZnNldCA9IGtub3duUG9seVByb3RvT2Zmc2V0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBtX2dy
YXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKG1fZ3JhcGgubV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBl
ID0gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5m
ZXJyZWRUeXBlKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZU5vZGUgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgb3JpZ2luLCBtX2dyYXBoLmZyZWV6
ZShwcm90b3R5cGUpKTsKQEAgLTEwNTUsNyArMTA0OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBlbWl0R2V0QnlPZmZzZXQoCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9k
ZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCi0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKICAgICAgICAgCkBAIC0xMDcxLDcgKzEwNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBT
dG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRk
KCk7CiAgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICBkYXRhLmluZmVycmVkVHlwZSA9
IGluZmVycmVkVHlwZTsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zm
c2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CkBAIC0xMDgyLDgg
KzEwNzUsNiBAQCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1
ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGluc2VydEluZmVycmVkVHlwZUNo
ZWNrKAotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2luLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hpbGRF
ZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAyMzc1NTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTAyICsyNyw0IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gVGhpcyBkb2N1bWVudHMgdGhl
IERGRydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhh
dCB3ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCi0vLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0
aGF0IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgotCi1j
bGFzcyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKLXB1YmxpYzoKLSAgICBEZXNpcmVkSW5mZXJyZWRU
eXBlKCkKLSAgICAgICAgOiBtX29iamVjdChudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgRGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3Qp
Ci0gICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKLSAgICB7Ci0gICAgfQotCi0gICAgRGVz
aXJlZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKLSAgICAgICAgLCBtX2V4cGVjdGVkKEluZmVycmVkVHlwZTo6
VG9wKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3QgJiYgbV9leHBlY3RlZDsgfQotCi0gICAgSW5mZXJyZWRUeXBlKiBv
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQotICAgIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciBleHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWQ7IH0KLQotICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29iamVjdC0+
Y2FuV2F0Y2gobV9leHBlY3RlZCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGQoV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50
KHdhdGNocG9pbnQpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29iamVj
dCA9PSBvdGhlci5tX29iamVjdAotICAgICAgICAgICAgJiYgbV9leHBlY3RlZCA9PSBvdGhlci5t
X2V4cGVjdGVkOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNpcmVkSW5m
ZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9leHBlY3RlZCA9PSBJbmZl
cnJlZFR5cGU6OlRvcDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9vYmpl
Y3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OwotICAgIH0KLQotICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIgZm9y
ICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxs
cHRyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsKLSAg
ICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKLX07Ci0KLXN0cnVjdCBEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJlZElu
ZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKLSAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVk
SW5mZXJyZWRUeXBlSGFzaCBIYXNoOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJl
ZEluZmVycmVkVHlwZT4geyB9OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwxMSArNjksNiBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0
b3I6CiAgICAgfQogfQogCi12b2lkIEluZmVycmVkVHlwZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBDb21tb25EYXRhJiBj
b21tb24pCi17Ci0gICAga2V5LmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykp
OwotfQotCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogRGVz
aXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAgLTEwMiwxMSAr
OTcsNiBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKLXZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQotewot
ICAgIG1faW5mZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKLX0KLQogYm9vbCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3Ry
dWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtMTIyLDcgKzExMiw2IEBAIHZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50
czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xMzEsOCArMTIwLDcgQEAgYm9vbCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJl
U3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgp
CiAgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2luZmVy
cmVkVHlwZXMuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApA
QCAtMTQzLDcgKzEzMSw2IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0
KFAKICAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2lu
ZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVy
IHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAg
IG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQo
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKLSAgICBvdXQucHJpbnQo
IiAgICBJbmZlcnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4
dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlz
aW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKLSNpbmNsdWRlICJERkdEZXNpcmVk
SW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIK
QEAgLTkzLDE4ICs5Miw2IEBAIHN0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFw
dG8KICAgICB9CiB9OwogCi1zdHJ1Y3QgSW5mZXJyZWRUeXBlQWRhcHRvciB7Ci0gICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25E
YXRhJik7Ci0gICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxp
ZCgpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQp
Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29udGV4dCkpOwotICAg
IH0KLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBB
ZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2Vu
ZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTczLDEw
ICsxNjAsNiBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24n
dCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2gg
ZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIg
Ym9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mKTsKLQotICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0
aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVycmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCi0g
ICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgotICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSop
OwogICAgIApAQCAtMjA0LDExICsxODcsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CiAgICAgfQotICAgIGJv
b2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNXYXRjaGVkKGtleSk7Ci0gICAgfQotCiAgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKQEAgLTIxOCw3ICsxOTYsNiBA
QCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSos
IEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFw
dG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKLSAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlwZUFkYXB0b3I+IG1faW5mZXJyZWRU
eXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjM3NTU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpAQCAtMTU0NywxMCArMTU0Niw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVz
dWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hlY2tzKCk7Ci0gICAgICAg
ICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKLSAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldCwgaW5kZXgsIG9yaWdpbkZvckNoZWNrKGluZGV4KSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgp
LAotICAgICAgICAgICAgICAgIG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaW5mZXJyZWRUeXBl
KTsKICAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQzKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw2IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlcl0sICJ9Iik7CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpOwotICAgICAgICBvdXQucHJpbnQoIiwgaW5m
ZXJyZWRUeXBlID0gIiwgaW5Db250ZXh0KHN0b3JhZ2VBY2Nlc3NEYXRhLmluZmVycmVkVHlwZSwg
Y29udGV4dCkpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEo
KSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCk7CkBAIC0xMDU5LDM4ICsxMDU4LDYgQEAgYm9vbCBHcmFwaDo6aXNTYWZl
VG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMo
c3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAKLUluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQot
ewotICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOwotICAgIAotICAgIGF1
dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgIT0gbV9p
bmZlcnJlZFR5cGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7Ci0KLSAgICBJ
bmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZv
cihrZXkudWlkKCkpOwotICAgIGlmICghdHlwZU9iamVjdCkgewotICAgICAgICBtX2luZmVycmVk
VHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOwotICAgICAgICByZXR1cm4gSW5mZXJy
ZWRUeXBlOjpUb3A7Ci0gICAgfQotCi0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHR5cGVE
ZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigpOwotICAgIGlmICh0eXBlRGVzY3Jp
cHRvci5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKLSAgICAgICAgbV9pbmZlcnJlZFR5
cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKLSAgICAgICAgcmV0dXJuIEluZmVycmVk
VHlwZTo6VG9wOwotICAgIH0KLSAgICAKLSAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgdHlw
ZURlc2NyaXB0b3IpOwotCi0gICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzKCkuYWRkTGF6aWx5KHR5
cGVPYmplY3QpOwotICAgIHJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGVEZXNjcmlwdG9yKTsKLQot
ICAgIC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQg
aW5mZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQotICAgIC8vIHBv
aW50IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KLSAgICBtX3BsYW4ud2F0Y2hw
b2ludHMoKS5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVz
Y3JpcHRvcikpOwotCi0gICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9yOwotfQotCiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2sp
OwpAQCAtMTMyMCwxOCArMTI4Nyw5IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJv
cGVydHkoY28KIH0KIAogQWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAotICAgIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCisgICAgY29u
c3QgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCYgLCBVbmlxdWVkU3RyaW5nSW1wbCogLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgKQogewotICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgIGJhc2Uu
Zm9yRWFjaCgKLSAgICAgICAgWyZdIChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewot
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldCgq
dGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLmdldCgpLCB1aWQpKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7Ci0gICAgICAgIH0pOwotICAgIGlmIChjbG9i
YmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKLSAgICAgICAgcmVzdWx0LmNsb2Ji
ZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gQWJzdHJhY3RW
YWx1ZTo6aGVhcFRvcCgpOwogfQogCiBBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVl
Rm9yUHJvcGVydHkoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5NiwxOSArNzk2LDYgQEAgcHVibGljOgogICAgIC8vIGNvbXB1dGVk
IGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlv
bigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNl
dCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBlKGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlLnN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5zdHJ1Y3R1cmUoKSk7Ci0gICAgfQot
Ci0gICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3Zl
IHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KLSAgICBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYp
OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlk
KSk7Ci0gICAgfQotCiAgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHko
CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVk
KTsKIApAQCAtMTA2NCw3ICsxMDUxLDYgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2ls
bHM+PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQ
cm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKLSAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtl
eSwgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgVmVjdG9y
PFJlZjxTbmlwcGV0Pj4gbV9kb21KSVRTbmlwcGV0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1BT
RG9taW5hdG9ycz4gbV9jcHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FEb21p
bmF0b3JzPiBtX3NzYURvbWluYXRvcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24gMjM3NTU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDg0ICsyMywzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKLSAg
ICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3Jp
Z2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCi0gICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiB0eXBlKQotewotICAgIGluc2VydGlvblNldC5ncmFwaCgpLnJlZ2lzdGVySW5mZXJy
ZWRUeXBlKHR5cGUpOwotICAgIAotICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShu
b2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgotICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJh
c2VOb2RlLCBCb29sZWFuVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT3RoZXJVc2UpKTsKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2lu
LCBFZGdlKGJhc2VOb2RlLCBJbnQzMlVzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBOdW1iZXJV
c2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoK
LSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hl
Y2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgU3RyaW5nVXNlKSk7Ci0gICAgICAgIHJldHVybjsK
LQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTeW1ib2w6Ci0gICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5v
ZGUsIFN5bWJvbFVzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6QmlnSW50OgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBCaWdJbnRVc2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6
Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhp
bnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpLAot
ICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhpbnNlcnRp
b25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpLAotICAgICAg
ICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9k
ZSwgT2JqZWN0VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RPck90aGVyOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5k
ZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPYmplY3RPck90aGVy
VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERkdfQ1JBU0goaW5zZXJ0aW9uU2V0LmdyYXBo
KCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKHJldmlzaW9u
IDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTggKzI0LDMgQEAKICAqLwogCiAjcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
Ci0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotLy8gSW5zZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5v
ZGUgaGFzIHRoZSBnaXZlbiBpbmZlcnJlZCB0eXBlLgotdm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVD
aGVjaygKLSAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4s
IE5vZGUqIGJhc2VOb2RlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEx
ICs4MSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cjsKLQotICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1
dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgotICAgIC8v
IHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcwotICAgIC8vIGd1YXJhbnRl
ZWQuCi0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0
cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTUsMTQg
KzIyOTUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMg
cG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRo
ZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3Ry
dWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlh
bnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRP
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNl
dC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRv
cCkpOworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVy
biBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzMywzMSArNTMz
LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZGF0
YS5vZmZzZXQ7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBncmFwaC5pZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl07Ci0KLSAgICAgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0g
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6Ci0gICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBkYXRhLmluZmVycmVkVHlwZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAg
Ly8gUHV0QnlPZmZzZXQga25vd3MgYWJvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCdzIHRo
ZSBlbmZvcmNlciBvZiB0aGF0IHR5cGUgcmF0aGVyCi0gICAgICAgICAgICAvLyB0aGFuIHRoZSBj
b25zdW1lciBvZiB0aGF0IHR5cGUuIFRoZXJlZm9yZSwgUHV0QnlPZmZzZXQgZXhwZWN0cyBUT1Ag
Zm9yIHRoZSBwdXJwb3NlIG9mCi0gICAgICAgICAgICAvLyBzYWZlLXRvLWV4ZWN1dGUgaW4gdGhl
IHNlbnNlIHRoYXQgaXQgd2lsbCBiZSBoYXBweSB3aXRoIGFueXRoaW5nIGFzIGdlbmVyYWwgYXMg
VE9QCi0gICAgICAgICAgICAvLyAoc28gYW55IHR5cGUpLgotICAgICAgICAgICAgaW5mZXJyZWRU
eXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChncmFwaCwgbm9kZSwgIkJhZCBvcGNvZGUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gR3JhcGg6OmlzU2Fm
ZVRvTG9hZCgpIGlzIGFsbCBhYm91dCBwcm9vZnMgZGVyaXZlZCBmcm9tIFByb3BlcnR5Q29uZGl0
aW9ucy4gVGhvc2UgZG9uJ3QKICAgICAgICAgLy8ga25vdyBhbnl0aGluZyBhYm91dCBpbmZlcnJl
ZCB0eXBlcy4gQnV0IGlmIHdlIGhhdmUgYSBwcm9vZiBkZXJpdmVkIGZyb20gd2F0Y2hpbmcgYQog
ICAgICAgICAvLyBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSB0eXBlIHByb29mLCB0aGVuIHRoZSBuZXh0
IGNhc2UgYmVsb3cgd2lsbCBkZWFsIHdpdGggaXQuCi0gICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZAotICAgICAgICAgICAgJiYg
aW5mZXJyZWRUeXBlLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBpZiAo
c3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpIHsK
ICAgICAgICAgICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gbm9kZS0+Y2hpbGQxKCktPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPihncmFwaC5tX3ZtKSkgewogICAgICAgICAgICAg
ICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MSwxMiArNTUwLDYgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAgICAgU3RydWN0dXJlKiB0aGlz
U3RydWN0dXJlID0gdmFsdWVbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXRoaXNTdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoaW5mZXJyZWRUeXBlLmtpbmQoKSAhPSBJbmZlcnJlZFR5cGU6OlRv
cCkgewotICAgICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzSW5mZXJy
ZWRUeXBlID0KLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguaW5mZXJyZWRUeXBlRm9yUHJvcGVy
dHkodGhpc1N0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVHlw
ZS5zdWJzdW1lcyh0aGlzSW5mZXJyZWRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxNiw4ICs2NzE2LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07CiAKLSAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9k
ZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKLSAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCkBAIC0xMTMyMSwxNDggKzExMzE5LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgcmVzdWx0cyk7CiAg
ICAgfQogCi0gICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1
ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyBjYW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2Ug
aXQgaXMgY2FsbGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gbWF5IGJlIGxvd2VyZWQgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBzd2l0Y2gg
KG9iamVjdC0+c3RydWN0dXJlKSB7Ci0gICAgICAgIC8vICAgICBjYXNlIDQyOgotICAgICAgICAv
LyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOwotICAgICAgICAvLyAgICAg
ICAgIC4uLgotICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyAgICAgY2FzZSA0
MzoKLSAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKLSAg
ICAgICAgLy8gICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAg
Ly8gICAgIH0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFy
ZSBkaWZmZXJlbnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3
b3VsZCBiZQotICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9m
IHR5cGUxIHwgdHlwZTIuCi0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xl
YW5UcnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2Up
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90
aGVyOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3ROdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTeW1ib2wodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50
OgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RCaWdJbnQodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZTogewot
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHR5cGUuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdl
KS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSkpIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2Vs
bENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2Vs
bENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAgICAgICAgICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpIHsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAot
ICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3Bl
Y0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3Q6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAg
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5z
dXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsK
LQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RD
ZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAg
ICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0Nl
bGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLSAgICB9Ci0gICAgCiAgICAgTFZhbHVl
IGxvYWRQcm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ2
NChhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCShyZXZpc2lvbiAyMzc1
NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDYgKzEyNCw4IEBAIG1vZHVsZSBEU0wKICAgICAgICAgICAgICNpbmNsdWRl
ICJHZXRCeUlkTWV0YWRhdGEuaCIKICAgICAgICAgICAgICNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgogICAgICAgICAgICAgI2luY2x1ZGUgIk9wY29kZS5oIgorICAgICAgICAgICAgI2luY2x1ZGUg
IlB1dEJ5SWRTdGF0dXMuaCIKKyAgICAgICAgICAgICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIK
ICAgICAgICAgICAgICNpbmNsdWRlICJUb1RoaXNTdGF0dXMuaCIKIAogICAgICAgICAgICAgbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJIZWFwU25hcHNob3QuaCIKICNp
bmNsdWRlICJIZWFwVmVyaWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
LSNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1
ZUlubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIklzb0NlbGxT
ZXRJbmxpbmVzLmgiCkBAIC01ODYsNyArNTg1LDYgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoKQogewotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SW5m
ZXJyZWRUeXBlPih2bSgpLT5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMpOwogICAgIGZpbmFs
aXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SW5mZXJyZWRWYWx1ZT4odm0oKS0+aW5m
ZXJyZWRWYWx1ZXNXaXRoRmluYWxpemVycyk7CiAgICAgdm0oKS0+Zm9yRWFjaENvZGVCbG9ja1Nw
YWNlKAogICAgICAgICBbJl0gKGF1dG8mIHNwYWNlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzc1NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDg4ICs1MCw2IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4
ZWN1dGEKICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlz
dCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKLSAgICBKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUpCi17Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
TGlzdCByZXN1bHQ7Ci0KLSAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7Ci0gICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAgICAgICAgcmVzdWx0LmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgotICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAgICAgICByZXN1
bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJlZ3MsIG1vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIsIG1vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RT
dHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTeW1ib2wo
cmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVk
VHlwZTo6QmlnSW50OgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
LCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCaWdJbnQocmVncy5w
YXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgYnJh
bmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIE5vdEVxdWFsLAotICAgICAgICAgICAgICAg
IEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjog
ewotICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAg
ICAgIE5vdEVxdWFsLAotICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCks
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBvay5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgotICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogewotICAgICAgICBKdW1w
IG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIG9rLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEFzc2Vt
Ymx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRmFzdFR5cGVkQXJyYXko
R1BSUmVnIGJhc2VHUFIpCiB7CiAgICAgcmV0dXJuIGJyYW5jaDMyKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMzc1NTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUyLDEwICsxMDUyLDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAg
SnVtcExpc3QgYnJhbmNoSWZOb3RUeXBlKAotICAgICAgICBKU1ZhbHVlUmVncywgR1BSUmVnIHRl
bXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsCi0gICAgICAgIFRhZ1JlZ2lz
dGVyc01vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw4
ICs0NzcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVG
b3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4
dHJhY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJN
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFi
bGUuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAwLDE4ICs5MDAsMTQgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEuc3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5mbGFncyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5p
bmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KG1ldGFkYXRhLmZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OwogICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQo
KTsKICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZs
YWdzPigKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgfAotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoaWRlbnQuaW1wbCgp
KS5wdXRCeUlkRmxhZ3MoKSk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgPSBzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KG1ldGFkYXRhLmZsYWdzKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsMjQgKzIyLDMgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgi
Ci0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJ
bmZlcnJlZFN0cnVjdHVyZSk7Ci0KLUluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVy
ZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICA6IHBhcmVudChwYXJlbnQpCi0gICAgLCBzdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJl
KQotewotICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJndhdGNocG9pbnQp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgJKHJldmlzaW9uIDIzNzU1OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDI3ICsyMywzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgot
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEluZmVycmVkVHlwZTsKLWNsYXNzIFN0cnVjdHVyZTsK
LQotY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwotcHVibGljOgotICAgIEluZmVycmVkU3RydWN0dXJl
KFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOwotCi0gICAgSW5mZXJyZWRU
eXBlKiBwYXJlbnQ7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAg
IAotICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCB3YXRjaHBvaW50OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNp
b24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjcgKzIyLDMgQEAKICAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotCi0jaW5jbHVkZSAi
SW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEluZmVycmVkU3RydWN0
dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2bSwgY29uc3QgRmlyZURldGFpbCYpCi17
Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KLSAgICAgICAgYml0
d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCB3YXRjaHBv
aW50KSk7Ci0KLSAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IGluZmVycmVkU3RydWN0
dXJlLT5wYXJlbnQ7Ci0gICAgCi0gICAgaWYgKCFpbmZlcnJlZFR5cGUtPmlzTGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgaW5mZXJyZWRUeXBlLT5yZW1vdmVTdHJ1Y3R1cmUodm0p
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw1NDIgKzIyLDMgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgotCi0j
aW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsIDogcHVibGlj
IEZpcmVEZXRhaWwgewotcHVibGljOgotICAgIEluZmVycmVkVHlwZUZpcmVEZXRhaWwoCi0gICAg
ICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAot
ICAgICAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgbmV3RGVzY3JpcHRvciwKLSAgICAgICAgSlNW
YWx1ZSBvZmZlbmRpbmdWYWx1ZSkKLSAgICAgICAgOiBtX2luZmVycmVkVHlwZShpbmZlcnJlZFR5
cGUpCi0gICAgICAgICwgbV91aWQodWlkKQotICAgICAgICAsIG1fb2xkRGVzY3JpcHRvcihvbGRE
ZXNjcmlwdG9yKQotICAgICAgICAsIG1fbmV3RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yKQotICAg
ICAgICAsIG1fb2ZmZW5kaW5nVmFsdWUob2ZmZW5kaW5nVmFsdWUpCi0gICAgewotICAgIH0KLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIkluZmVycmVkIHR5cGUg
Y2hhbmdlZCBvbiAiLCBSYXdQb2ludGVyKG1faW5mZXJyZWRUeXBlKSwgIiBmb3IgcHJvcGVydHkg
IiwgbV91aWQsICI6ICIKLSAgICAgICAgICAgICJvbGQgdHlwZSB3YXMgIiwgbV9vbGREZXNjcmlw
dG9yLCAiIHdoaWxlIGRlc2lyZWQgdHlwZSBpcyAiLCBtX25ld0Rlc2NyaXB0b3IpOwotICAgICAg
ICBpZiAobV9vZmZlbmRpbmdWYWx1ZSkKLSAgICAgICAgICAgIG91dC5wcmludCgiIGR1ZSB0byAi
LCBtX29mZmVuZGluZ1ZhbHVlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSW5mZXJyZWRUeXBl
KiBtX2luZmVycmVkVHlwZTsKLSAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdWlkOwot
ICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX29sZERlc2NyaXB0b3I7Ci0gICAgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIG1fbmV3RGVzY3JpcHRvcjsKLSAgICBKU1ZhbHVlIG1fb2ZmZW5k
aW5nVmFsdWU7Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7
ICJJbmZlcnJlZFR5cGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEluZmVycmVkVHlwZSkgfTsKLQotSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNy
ZWF0ZShWTSYgdm0pCi17Ci0gICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZlcnJl
ZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwot
ICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Ci19Ci0KLVN0
cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwp
OwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgaWYgKGluZmVy
cmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCi0gICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5cGVz
V2l0aEZpbmFsaXplcnMuYWRkKGluZmVycmVkVHlwZSk7Ci19Ci0KLUluZmVycmVkVHlwZTo6S2lu
ZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCi17Ci0gICAg
c3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2spIHsKLSAgICBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKLSAgICAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzaykgewotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90
dG9tOgotICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vj
b25kYXJ5VHlwZUJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gQm9vbGVhbjsKLSAgICAgICAg
Y2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgotICAgICAgICAgICAgcmV0dXJuIE90aGVy
OwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gSW50MzI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXI6Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtYmVyOwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlU3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKLSAgICAgICAgY2FzZSBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN5bWJvbDoKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2w7Ci0gICAg
ICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6Ci0gICAgICAgICAgICByZXR1cm4g
T2JqZWN0OwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoK
LSAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOwotICAgICAgICBjYXNlIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlVG9wOgotICAgICAgICAgICAgcmV0dXJuIFRvcDsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gQm90dG9tOwotICAgICAgICB9Ci0gICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsK
LSAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgot
ICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEJv
dHRvbTsKLSAgICB9Ci19Ci0KLUluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlz
Qm9vbGVhbigpKQotICAgICAgICByZXR1cm4gQm9vbGVhbjsKLSAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIE90aGVyOwotICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiBJbnQzMjsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkK
LSAgICAgICAgcmV0dXJuIE51bWJlcjsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAg
ICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmIChjZWxsLT5pc1N0
cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKLSAgICAgICAgaWYgKGNlbGwtPmlz
U3ltYm9sKCkpCi0gICAgICAgICAgICByZXR1cm4gU3ltYm9sOwotICAgICAgICBpZiAoY2VsbC0+
aXNCaWdJbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBCaWdJbnQ7Ci0gICAgICAgIGlmIChjZWxs
LT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIE9iamVjdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gVG9w
OwotfQotCi1JbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
Ojpmb3JGbGFncyhWTSYgdm0sIFB1dEJ5SWRGbGFncyBmbGFncykKLXsKLSAgICBLaW5kIGtpbmQg
PSBraW5kRm9yRmxhZ3MoZmxhZ3MpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIGlm
IChoYXNTdHJ1Y3R1cmUoa2luZCkpCi0gICAgICAgIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpOwotICAgIGVsc2UKLSAg
ICAgICAgc3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICByZXR1cm4gRGVzY3JpcHRvcihraW5kLCBz
dHJ1Y3R1cmUpOwotfQotCi1QdXRCeUlkRmxhZ3MgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpw
dXRCeUlkRmxhZ3MoKSBjb25zdAotewotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBC
b3R0b206Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQ
cmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tKTsKLSAgICBj
YXNlIEJvb2xlYW46Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbik7
Ci0gICAgY2FzZSBPdGhlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhl
cik7Ci0gICAgY2FzZSBJbnQzMjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMik7Ci0gICAgY2FzZSBOdW1iZXI6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTnVtYmVyKTsKLSAgICBjYXNlIFN0cmluZzoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVTdHJpbmcpOwotICAgIGNhc2UgU3ltYm9sOgotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZVN5bWJvbCk7Ci0gICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsKLSAgICBjYXNlIEJpZ0ludDoKLSAgICBjYXNlIE9i
amVjdE9yT3RoZXI6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JP
dGhlcik7Ci0gICAgY2FzZSBUb3A6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlk
RmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBl
VG9wKTsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAotICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7
Ci0gICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJl
LT5pZCgpKSk7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFB1dEJ5SWROb25lOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCi17Ci0gICAgLy8gRmlsdGVyIG91dCBjb21t
b24gdGhpbmdzIHRvIHNpbXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlbG93LgotICAgIGlm
ICgqdGhpcyA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvdGhlci5tX2tpbmQg
PT0gQm90dG9tKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAg
IGNhc2UgQm90dG9tOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBCb29sZWFuOgotICAgIGNhc2UgU3RyaW5nOgotICAgIGNhc2UgU3ltYm9sOgotICAg
IGNhc2UgQmlnSW50OgotICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgT3RoZXI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKLSAgICAgICAgICAgICp0aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAgICAg
ICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICBjYXNlIEludDMyOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkg
ewotICAgICAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgICAgICp0aGlzID0gTnVtYmVyOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBU
b3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE51bWJlcjoKLSAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9w
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0
aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KLSAgICAgICAgY2FzZSBPYmplY3Q6Ci0g
ICAgICAgICAgICAqdGhpcyA9IE9iamVjdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgICAgIGlmIChtX3N0cnVj
dHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICp0aGlzID0gb3Ro
ZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgICAgICBtX2tpbmQg
PSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAg
ICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOgotICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhl
cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRo
ZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KLSAgICAgICAgY2Fz
ZSBPYmplY3RPck90aGVyOgotICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgot
ICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICBjYXNlIE9iamVjdDoKLSAg
ICAgICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgY2FzZSBUb3A6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
cmVtb3ZlU3RydWN0dXJlKCkKLXsKLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgKnRoaXMgPSBPYmplY3Q7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAqdGhpcyA9
IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotfQotCi1ib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3Vt
ZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgRGVzY3JpcHRvciBtZXJn
ZWQgPSAqdGhpczsKLSAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOwotICAgIHJldHVybiAqdGhpcyA9
PSBtZXJnZWQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAg
IG91dC5wcmludChtX2tpbmQpOwotICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgb3V0LnBy
aW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotfQotCi12b2lkIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQotSW5mZXJyZWRUeXBlOjpJbmZl
cnJlZFR5cGUoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJl
LmdldCgpKQotICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKLXsKLX0KLQot
SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKLXsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGU6
OmNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlw
dG9yJiBleHBlY3RlZCkKLXsKLSAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0g
ZXhwZWN0ZWQ7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBEZXNjcmlw
dG9yJiBleHBlY3RlZCkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgcmV0dXJuIGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOwotfQotCi12b2lkIEluZmVy
cmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwg
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9y
KGxvY2tlcikua2luZCgpICE9IFRvcCk7Ci0KLSAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNo
cG9pbnQpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50
KiB3YXRjaHBvaW50KQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICBhZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Ci19Ci0KLXZvaWQgSW5mZXJy
ZWRUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6IiwgZGVzY3JpcHRvcigpKTsKLX0KLQotYm9vbCBJbmZlcnJlZFR5
cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgRGVzY3JpcHRvciBvbGRUeXBlOwotICAgIERlc2NyaXB0
b3IgbXlUeXBlOwotICAgIGJvb2wgcmVzdWx0OwotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2Nr
ZXIpOwotICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7Ci0KLSAg
ICAgICAgbXlUeXBlLm1lcmdlKG9sZFR5cGUpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG9s
ZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUg
b24gdGhlIHNsb3cgcGF0aC4KLQotICAgICAgICBib29sIHNldFJlc3VsdCA9IHNldChsb2NrZXIs
IHZtLCBteVR5cGUpOwotICAgICAgICByZXN1bHQgPSBraW5kKGxvY2tlcikgIT0gVG9wOwotICAg
ICAgICBpZiAoIXNldFJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotICAgIEluZmVycmVkVHlwZUZpcmVEZXRhaWwgZGV0YWlsKHRoaXMsIHByb3BlcnR5TmFt
ZS51aWQoKSwgb2xkVHlwZSwgbXlUeXBlLCB2YWx1ZSk7Ci0gICAgbV93YXRjaHBvaW50U2V0LmZp
cmVBbGwodm0sIGRldGFpbCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbmZlcnJl
ZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBEZXNjcmlwdG9yIG9sZFR5cGU7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7
Ci0gICAgICAgIGlmICghc2V0KGxvY2tlciwgdm0sIFRvcCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwodGhpcywgcHJvcGVy
dHlOYW1lLnVpZCgpLCBvbGRUeXBlLCBUb3AsIEpTVmFsdWUoKSk7Ci0gICAgbV93YXRjaHBvaW50
U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNj
cmlwdG9yKQotewotICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFu
Z2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgotICAgIGlm
IChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IGZhbHNlOwotICAgIAot
ICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBw
cmV2aW91cyBvbmUuCi0gICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRv
cihsb2NrZXIpKSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVy
ZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4K
LSAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iu
c3RydWN0dXJlKCkpCi0gICAgICAgIEFTU0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVy
ZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLQotICAgIC8vIFdlIGFyZSBjaGFu
Z2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywg
dGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCi0gICAgLy8gYW55b25lIGlzIHdhdGNoaW5n
LCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0
IG9mIHRoaW5nIGFnYWluLgotICAgIGlmIChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVh
cldhdGNocG9pbnQpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRl
ZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgotICAgICAg
ICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7Ci0KLSAg
ICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUg
Y29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAotICAgICAgICAv
LyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3Jh
enksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBmb3IKLSAgICAgICAgLy8gaXQu
Ci0gICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7Ci0KLSAgICAgICAgc2hvdWxkRmlyZVdhdGNo
cG9pbnRTZXQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0
dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgfQotCi0gICAg
Ly8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCi0gICAgbV9raW5kID0gbmV3RGVz
Y3JpcHRvci5raW5kKCk7Ci0KLSAgICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdzLgotICAg
IEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Ci0KLSAgICByZXR1
cm4gc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpyZW1v
dmVTdHJ1Y3R1cmUoVk0mIHZtKQotewotICAgIC8vIEZJWE1FOiBGaW5kIGFuIGVsZWdhbnQgYW5k
IGNoZWFwIHdheSB0byB0aHJlYWQgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHdlIGdvdCBoZXJlIGlu
dG8gdGhlIGZpcmUKLSAgICAvLyBkZXRhaWwgaW4gc2V0KCkuCi0gICAgCi0gICAgRGVzY3JpcHRv
ciBvbGREZXNjcmlwdG9yOwotICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcjsKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgb2xkRGVz
Y3JpcHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKLSAgICAgICAgbmV3RGVzY3JpcHRvciA9IG9s
ZERlc2NyaXB0b3I7Ci0gICAgICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIXNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsIGRl
dGFpbCh0aGlzLCBudWxscHRyLCBvbGREZXNjcmlwdG9yLCBuZXdEZXNjcmlwdG9yLCBKU1ZhbHVl
KCkpOwotICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6Oktp
bmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm90dG9tOgotICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgIG91dC5wcmludCgiQm9vbGVh
biIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAg
ICAgICBvdXQucHJpbnQoIk90aGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVy
cmVkVHlwZTo6SW50MzI6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIG91dC5wcmludCgi
TnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5n
OgotICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAgICAgb3V0LnByaW50KCJTeW1ib2wiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCaWdJbnQ6Ci0gICAgICAgIG91
dC5wcmludCgiQmlnSW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3Ry
dWN0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3Q6Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKLSAgICAgICAgb3V0LnByaW50KCJP
YmplY3RPck90aGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6
VG9wOgotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjUzICsyMywzIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xv
Y2suaCIKLSNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIklzb0NlbGxT
ZXQuaCIKLSNpbmNsdWRlICJKU0Nhc3QuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKLSNp
bmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJXYXRjaHBvaW50LmgiCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBU
aGlzIGlzIGFuIG9iamVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBv
YmplY3QgcHJvcGVydGllcy4KLQotY2xhc3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5pbmZlcnJlZFR5cGVTcGFjZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKLQotICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0gICAgCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBlbnVtIEtp
bmQgOiB1aW50OF90IHsKLSAgICAgICAgQm90dG9tLAotICAgICAgICBCb29sZWFuLAotICAgICAg
ICBPdGhlciwKLSAgICAgICAgSW50MzIsCi0gICAgICAgIE51bWJlciwKLSAgICAgICAgU3RyaW5n
LAotICAgICAgICBTeW1ib2wsCi0gICAgICAgIEJpZ0ludCwKLSAgICAgICAgT2JqZWN0V2l0aFN0
cnVjdHVyZSwKLSAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsCi0gICAgICAgIE9i
amVjdCwKLSAgICAgICAgT2JqZWN0T3JPdGhlciwKLSAgICAgICAgVG9wCi0gICAgfTsKLQotICAg
IHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MpOwotICAgIAotICAgIHN0YXRp
YyBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjbGFzcyBEZXNjcmlwdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIERlc2NyaXB0
b3IoKQotICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQotICAgICAgICAgICAgLCBtX3N0cnVj
dHVyZShudWxscHRyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBEZXNjcmlwdG9y
KEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyKQotICAgICAgICAgICAg
OiBtX2tpbmQoa2luZCkKLSAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoaGFzU3RydWN0dXJlKGtpbmQpKQotICAgICAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIERlc2Ny
aXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7Ci0KLSAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9y
RmxhZ3MoVk0mLCBQdXRCeUlkRmxhZ3MpOwotCi0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9raW5kICE9IEJvdHRv
bSB8fCBtX3N0cnVjdHVyZTsKLSAgICAgICAgfQotCi0gICAgICAgIEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0KLSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRG
bGFncygpIGNvbnN0OwotCi0gICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRlc1ZhbHVl
KEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
Ci0gICAgICAgICAgICBjYXNlIEJvdHRvbToKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBjYXNlIEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzQm9vbGVhbigpOwotICAgICAgICAgICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICAgICAgICAgIGNhc2UgSW50MzI6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLSAgICAgICAgICAgIGNh
c2UgTnVtYmVyOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigpOwotICAg
ICAgICAgICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3Ry
aW5nKCk7Ci0gICAgICAgICAgICBjYXNlIFN5bWJvbDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNTeW1ib2woKTsKLSAgICAgICAgICAgIGNhc2UgQmlnSW50OgotICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc0JpZ0ludCgpOwotICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCi0gICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0Nl
bGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2Jq
ZWN0KCk7Ci0gICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKLSAg
ICAgICAgICAgIGNhc2UgVG9wOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVy
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1f
a2luZAotICAgICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3Im
IG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaCht
X3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKLSAgICAgICAgfQot
ICAgIAotICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsKLSAgICAgICAgdm9p
ZCByZW1vdmVTdHJ1Y3R1cmUoKTsKLQotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBk
ZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUuCi0gICAgICAgIGJv
b2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0gICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgS2lu
ZCBtX2tpbmQ7Ci0gICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci0gICAgfTsKLQotICAg
IENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KLQotICAg
IERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1
Y3R1cmUuZ2V0KCkgOiBudWxscHRyKTsKLSAgICB9Ci0gICAgCi0gICAgRGVzY3JpcHRvciBkZXNj
cmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKLSAgICB9Ci0gICAgRGVzY3JpcHRvciBkZXNj
cmlwdG9yKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKLSAgICB9Ci0gICAg
Ci0gICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKSBjb25zdCB7
IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpOyB9Ci0KLSAgICBib29sIGlzVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsgfQotICAgIGJvb2wgaXNSZWxldmFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBu
b3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCi0gICAgQUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9y
ZVZhbHVlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIERlc2NyaXB0b3IgY3VycmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
TWFpblRocmVhZCgpOwotICAgICAgICBpZiAoY3VycmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1
ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9
IFRvcDsKLSAgICAgICAgcmV0dXJuIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGly
cmVsZXZhbnQuCi0gICAgdm9pZCBtYWtlVG9wKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtYWtlVG9wU2xvdyh2bSwgcHJvcGVydHlOYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5m
ZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUgdGhhdAotICAgIC8vIHRoaXMgd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCi0gICAgYm9vbCBjYW5XYXRjaChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBEZXNjcmlwdG9yJik7Ci0gICAgYm9vbCBjYW5XYXRj
aChjb25zdCBEZXNjcmlwdG9yJik7Ci0gICAgCi0gICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFdhdGNocG9pbnQqKTsKLSAgICB2b2lkIGFkZFdhdGNocG9p
bnQoV2F0Y2hwb2ludCopOwotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0g
ICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotCi1wcml2YXRlOgot
ICAgIEluZmVycmVkVHlwZShWTSYpOwotICAgIH5JbmZlcnJlZFR5cGUoKTsKLQotICAgIGJvb2wg
d2lsbFN0b3JlVmFsdWVTbG93KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKLSAgICB2b2lk
IG1ha2VUb3BTbG93KFZNJiwgUHJvcGVydHlOYW1lKTsKLQotICAgIC8vIEhlbHBlciBmb3Igd2ls
bFN0b3JlVmFsdWVTbG93KCkgYW5kIG1ha2VUb3BTbG93KCkuIFRoaXMgcmV0dXJucyB0cnVlIGlm
IHdlIHNob3VsZCBmaXJlIHRoZQotICAgIC8vIHdhdGNocG9pbnQgc2V0LgotICAgIGJvb2wgc2V0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7Ci0gICAgCi0gICAg
dm9pZCByZW1vdmVTdHJ1Y3R1cmUoVk0mKTsKLSAgICAKLSAgICBmcmllbmQgY2xhc3MgSW5mZXJy
ZWRTdHJ1Y3R1cmU7Ci0gICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dDsKLQotICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7Ci0gICAgCi0gICAgS2lu
ZCBtX2tpbmQgeyBCb3R0b20gfTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQb2lz
b25lZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgw
NzE1Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
LQotICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRv
IFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCi0gICAgLy8gcHJv
Zml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQg
Y2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKLSAgICAvLyB0aHJlYWQuIFRo
ZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRj
aGVzLgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZUlubGluZXMuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywy
NSArMjMsMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJJbmZlcnJlZFR5cGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSB2b2lkIElu
ZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQotewotICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZCh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0g
ICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHJlbW92ZVN0cnVjdHVyZSh2
bSk7Ci0gICAgfQotICAgIAotICAgIHZtLmluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycy5yZW1v
dmUodGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lv
biAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE2NCArMjIsMyBAQAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZv
ID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxlKSB9OwotCi1JbmZlcnJlZFR5cGVUYWJs
ZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYgdm0pCi17Ci0gICAgSW5mZXJyZWRUeXBl
VGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRh
YmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUodm0pOwotICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBl
VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIEluZmVycmVkVHlwZVRhYmxlKiBp
bmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7
Ci0gICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBl
VGFibGUoKTsKLX0KLQotU3RydWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCi17Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0K
LQotdm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5
cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOwotICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGluZmVycmVkVHlwZVRhYmxlLT5jZWxsTG9jaygpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogaW5mZXJyZWRUeXBlVGFibGUtPm1fdGFibGUpIHsKLSAgICAgICAgYXV0byBlbnRyeVZh
bHVlID0gZW50cnkudmFsdWU7Ci0KLSAgICAgICAgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeVZhbHVlLT5pc1JlbGV2YW50KCkpCi0gICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeVZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLUluZmVycmVkVHlwZSogSW5m
ZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBBYnN0cmFjdExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgYXV0byBpdGVyID0gbV90YWJsZS5maW5kKHVpZCk7Ci0gICAgaWYg
KGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJ
bmZlcnJlZFR5cGUqIGVudHJ5VmFsdWUgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICBpZiAoIWVu
dHJ5VmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGFrZSB0aGlzIG9w
cG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRhdGVkIHR5cGVzLgotICAgIGlmICghZW50cnlWYWx1
ZS0+aXNSZWxldmFudCgpKSB7Ci0gICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBlbnRyeVZhbHVlOwotfQotCi1J
bmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgIHJldHVy
biBnZXQobG9ja2VyLCB1aWQpOwotfQotCi1JbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxl
OjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gZ2V0KHByb3Bl
cnR5TmFtZS51aWQoKSk7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZh
bHVlKAotICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQotewotICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSBy
ZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2gg
bWFwLgotICAgIAotICAgIGlmIChhZ2UgPT0gU3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5
KSB7Ci0gICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgotCi0g
ICAgICAgIEluZmVycmVkVHlwZSogZW50cnlWYWx1ZSA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAg
ICAgICBpZiAoIWVudHJ5VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBpZiAoZW50cnlWYWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBp
dGVyLT52YWx1ZS5jbGVhcigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJv
cGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKLSAgICB9Ci0g
ICAgSW5mZXJyZWRUeXBlKiBlbnRyeVZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKLQotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBJbmZlcnJlZFR5cGUq
IGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKLSAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0s
IHRoaXMsIGluZmVycmVkVHlwZSk7Ci0gICAgICAgIGVudHJ5VmFsdWUgPSBpbmZlcnJlZFR5cGU7
Ci0gICAgfSBlbHNlIGlmICghZW50cnlWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIGlmIChlbnRyeVZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuY2xlYXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBl
VGFibGU6Om1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQ
cm9wZXJ0eUFnZSBhZ2UpCi17Ci0gICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0
aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCi0gICAg
aWYgKGFnZSA9PSBTdG9yZWRQcm9wZXJ0eUFnZTo6T2xkUHJvcGVydHkpIHsKLSAgICAgICAgVGFi
bGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7
Ci0gICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47
IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCi0KLSAgICAgICAgSW5mZXJyZWRUeXBlKiBl
bnRyeVZhbHVlID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0KLSAgICAgICAgaWYgKCFlbnRyeVZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGVudHJ5VmFsdWUtPm1ha2VUb3Aodm0s
IHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBUYWJsZVR5cGU6OkFkZFJlc3VsdCByZXN1bHQ7Ci0gICAgewot
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgICAgICByZXN1
bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJl
ZFR5cGU+KCkpOwotICAgIH0KLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKHZt
LCBwcm9wZXJ0eU5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKLX0K
LQotSW5mZXJyZWRUeXBlVGFibGU6OkluZmVycmVkVHlwZVRhYmxlKFZNJiB2bSkKLSAgICA6IEJh
c2Uodm0sIHZtLmluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlLmdldCgpKQotewotfQotCi1JbmZl
cnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlVGFibGUuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNzcg
KzIyLDMgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBl
LmgiCi0jaW5jbHVkZSAiSlNDYXN0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBBIHRhYmxl
IG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBi
ZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUgU3RydWN0dXJlCi0vLyBkZXN0cnVjdG9yIGFuZCBt
YWtlcyBsaWZldGltZSBlYXNpZXIgdG8gbWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBh
IGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRoaW5nCi0vLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGls
ZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxl
IGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCi0vLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlw
ZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGlu
ayBvZiAiYSBwcm9wZXJ0eSIKLS8vIGFzIGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0
dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBwaWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9w
ZXJ0aWVzIGZyb20KLS8vIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVy
ZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMgb2Ygb2JqZWN0cy4KLQotY2xhc3MgSW5mZXJyZWRU
eXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOwotCi0gICAgc3RhdGljIEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsK
LQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7Ci0gICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0K
LSAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZv
ciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKLSAgICAvLyBv
d25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCi0gICAgSW5m
ZXJyZWRUeXBlKiBnZXQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCop
OwotICAgIEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci0gICAgSW5mZXJy
ZWRUeXBlKiBnZXQoUHJvcGVydHlOYW1lKTsKLQotICAgIGVudW0gY2xhc3MgU3RvcmVkUHJvcGVy
dHlBZ2UgeyBOZXdQcm9wZXJ0eSwgT2xkUHJvcGVydHkgfTsKLSAgICAKLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxl
dmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90Ci0gICAgLy8gcmVsZXZhbnQgaWYgaXQncyBU
b3AuIE5vdGUgdGhhdCB0aGlzIHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmll
cy4KLSAgICBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBT
dG9yZWRQcm9wZXJ0eUFnZSk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhl
IHByb3BlcnR5LiBVc2VmdWwgaWYgd2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNv
bnRleHQuCi0gICAgdm9pZCBtYWtlVG9wKFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0
eUFnZSk7Ci0KLXByaXZhdGU6Ci0gICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKLSAgICB+SW5m
ZXJyZWRUeXBlVGFibGUoKTsKLQotICAgIC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgot
ICAgIC8vIFRvcDogbnVsbCB2YWx1ZSBpbiB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9y
IGFic2VuY2UgZnJvbSB0YWJsZS4KLSAgICAvLwotICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVy
bWluZSBpZiBhYnNlbmNlIGZyb20gdGhlIHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5n
IG9uIHdoZXRoZXIgdGhlCi0gICAgLy8gcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5n
IHN0cnVjdHVyZS4gSGVuY2UsIGRlcGVuZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1h
eSBoYXZlCi0gICAgLy8gZGlmZmVyZW50IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFz
cyBkZXRlcm1pbmVzIGlmIHRoZSBvd25pbmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0
eQotICAgIC8vIGlzIHRoYXQgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxh
Y2Ugb3IgdHJhbnNpdGlvbi4gSWYgd2UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5Ci0gICAgLy8g
KHRyYW5zaXRpb24pLCB0aGVuIGFic2VuY2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5n
IHRvIGFuIGV4aXN0aW5nIHByb3BlcnR5IChyZXBsYWNlKSwgdGhlbgotICAgIC8vIGFic2VuY2Ug
bWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRo
ZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKLSAgICAvLyBTMiwgc2hhcmUgdGhl
IHNhbWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2YgdGhlbSBpbml0aWFsbHkga25v
dyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKLSAgICAvLyB3YW50IHRvIGFkZCBQIHdpdGhvdXQg
YSB0eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRk
ZWQgUCBhbmQgdXNlZCBhYnNlbmNlCi0gICAgLy8gdG8gaW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdv
dWxkIHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVh
dGluZyBhIG5vbi1Ub3AKLSAgICAvLyBlbnRyeSBpbiB0aGUgdGFibGUuIFRoZW4gUzEgd291bGQg
Zm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVzZSBTMidzIHR5cGUuIENsZWFy
bHksCi0gICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBjb25mdXNpb24gYnkgZW5zdXJp
bmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50cnkuIEhlbmNlLAotICAgIC8v
IGFic2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBwbGF5IGZvciBwcm9wZXJ0aWVz
IGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2FzCi0gICAgLy8gY3JlYXRlZC4K
LSAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4s
IFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaD47Ci0KLSAgICBU
YWJsZVR5cGUgbV90YWJsZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9u
IDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDYgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoaW5kZXhp
bmdNb2RlKCkpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMo
KSk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgY3VycmVudEF0dHJpYnV0ZXMpOwpAQCAtMzQwLDE4ICszMzksMTIgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJl
bnRBdHRyaWJ1dGVzOwotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOwotICAgIG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsK
ICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUt
PndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
LSAgICAgICAgfQotCiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKICAg
ICAgICAgaWYgKChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSAhPSAo
Y3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpIHx8IChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0
dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIz
NzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3MSwxNSArMzcxLDExIEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVy
ZTo6bWF0ZXJpYWxpemVQcm8KICAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKICAgICAgICAgdGhp
cy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCi0gICAgSW5mZXJyZWRUeXBlVGFibGUq
IHR5cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7Ci0KICAgICBmb3IgKHNpemVf
dCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJlID0gc3Ry
dWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVj
dHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7Ci0gICAgICAgIGlmICh0eXBlVGFibGUgJiYg
dHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKLSAgICAg
ICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHRhYmxlLT5hZGQo
ZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFu
Z2UpOwogICAgIH0KICAgICAKQEAgLTUwMyw3ICs0OTksNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YWRkTmV3UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJl
dmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwg
c3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRy
YW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0cmFuc2l0aW9u
LT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRp
b24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNTM2LDEyICs1MzEs
NiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuCiAgICAgLy8gICBz
dHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxzbyBo
YXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAogICAgIC8vICAgcmVtb3ZhbHMuCiAg
ICAgLy8KLSAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFzc3VtZXMgdGhhdCByZW1vdmFsIGhh
cyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaWYgd2UgY291bGQKLSAg
ICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJlLWFkZCBpdCBsYXRlciwgdGhlbiB0
aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24gd291bGRuJ3QKLSAgICAvLyAgIHdv
cmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRoZXIgcG9pc29uZWQgdHlwZSBpbmZl
cmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCi0gICAgLy8gICBoYXNCZWVu
RGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0aGUgZW50cnkgYXMgVG9wIGJ5IGVu
c3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0Ci0gICAgLy8gICBpbnN0ZWFkLCBoYXMg
YSBudWxsIGVudHJ5LgotICAgIAogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKQEAgLTg5Myw0MCArODgyLDE4
IEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KIH0KIAogdm9pZCBT
dHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKLSAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCi0gICAgSW5m
ZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFnZSkKKyAgICBWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCkKIHsKKyAgICAvKgogICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsKICAgICBBU1NFUlQoIWhhc0JlZW5EaWN0aW9uYXJ5KCkpOwogCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShWTTo6Y2FuVXNlSklUKCksICJXZSBkb24ndCB3YW50IHRvIHVzZSBtZW1vcnkg
Zm9yIGluZmVycmVkIHR5cGVzIHVubGVzcyB3ZSdyZSB1c2luZyB0aGUgSklULiIpOwotCi0gICAg
Ly8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBl
bHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQotICAgIC8vIGdy
YWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KLSAgICBJbmZlcnJlZFR5cGVU
YWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOwotICAgIGlmICghdGFibGUp
IHsKLSAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKLSAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5z
ZXQodm0sIHRoaXMsIHRhYmxlKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYg
d2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCiAgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwogICAgIAotICAgIC8vIFdlIG11c3QgYmUg
Y2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBj
b25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAotICAgIC8vIGFscmVhZHksIHNvIHRoZSBwcm9w
ZXJ0eSBtdXN0IGJlIHByZXNlbnQuCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9w
ZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICBBU1NFUlQoZW50cnkpOwot
ICAgIAotICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKLSAgICAgICAgZW50cnktPmhhc0luZmVycmVk
VHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwg
YWdlKTsKLSAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOwotICAgIH0KLSAg
ICAKICAgICBwcm9wZXJ0eVRhYmxlLT51c2UoKTsgLy8gVGhpcyBtYWtlcyBpdCBzYWZlIHRvIHVz
ZSBlbnRyeSBhYm92ZS4KKyAgICAqLwogfQogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwpA
QCAtMTA5OSw4ICsxMDY2LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUpOwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkK
ICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7Ci0KLSAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAog
Ym9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjM3NTU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNM
b2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBl
VGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiSlNUeXBlLmgiCkBAIC03NywxMyArNzYsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFw
RW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsKLSAgICBib29sIGhhc0luZmVycmVkVHlw
ZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJy
ZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFz
dCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5
TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRyKQogICAgICAgICAsIG9mZnNldChpbnZh
bGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoMCkKLSAgICAgICAgLCBoYXNJbmZlcnJl
ZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTkxLDcgKzg4LDYgQEAgc3RydWN0
IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0
KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICwgaGFz
SW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0
ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtNDI4LDcgKzQyNCw2IEBAIHB1YmxpYzoKIAog
ICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlP
ZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBp
bnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2li
bHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFy
YW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpA
QCAtNTg4LDUzICs1ODMsMzIgQEAgcHVibGljOgogICAgICAgICBzdGFydFdhdGNoaW5nSW50ZXJu
YWxQcm9wZXJ0aWVzKHZtKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7Ci0g
ICAgfQotCi0gICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBt
X2luZmVycmVkVHlwZVRhYmxlLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQo
dWlkKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVk
VHlwZUZvcih1aWQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZGVzY3JpcHRvcigpOwot
ICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgfQotCiAgICAgLy8gQ2FsbCB0
aGlzIHdoZW4gd2Uga25vdyB0aGF0IHRoaXMgaXMgYSBicmFuZCBuZXcgcHJvcGVydHkuIE5vdGUg
dGhhdCBpdCdzIG5vdCBlbm91Z2ggZm9yIHRoZQogICAgIC8vIHByb3BlcnR5IHRvIGJlIGJyYW5k
IG5ldyB0byBzb21lIG9iamVjdC4gSXQgaGFzIHRvIGJlIGJyYW5kIG5ldyB0byB0aGUgU3RydWN0
dXJlLgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRp
b24oCiAgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKICAgICB7Ci0gICAgICAgIGlmIChoYXNCZWVuRGlj
dGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpIHx8
ICFWTTo6Y2FuVXNlSklUKCkpCisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICFz
aG91bGRPcHRpbWl6ZSB8fCAhVk06OmNhblVzZUpJVCgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3Vs
ZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2U6Ok5ld1Byb3Bl
cnR5KTsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzaG91bGRPcHRpbWl6ZSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbCB0aGlzIHdoZW4gd2Uga25v
dyB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHkgZm9yIHRoZSBvYmplY3QsIGJ1dCBub3QgbmV3
IGZvciB0aGUKLSAgICAvLyBzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdW5kZXIgdGhlIEluZmVycmVk
VHlwZVRhYmxlJ3MgcnVsZXMsIGFic2VuY2Ugb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlCi0gICAg
Ly8gdGFibGUgbWVhbnMgVG9wIHJhdGhlciB0aGFuIEJvdHRvbS4KKyAgICAvLyBzdHJ1Y3R1cmUu
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0
aW9uKAogICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCiAgICAgewotICAgICAgICBpZiAoaGFzQmVlbkRp
Y3Rpb25hcnkoKSB8fCAhbV9pbmZlcnJlZFR5cGVUYWJsZSB8fCAhVk06OmNhblVzZUpJVCgpKQor
ICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAhVk06OmNhblVzZUpJVCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJv
cGVydHlBZ2U6Ok5ld1Byb3BlcnR5KTsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CiAgICAgfQogCi0gICAgLy8gQ2Fs
bCB0aGlzIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGV4aXN0cyBh
bmQgaGFzIGFuIGVudHJ5IGZvciB0aGlzIHByb3BlcnR5LgogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCiAgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKICAgICB7
CiAgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICFWTTo6Y2FuVXNlSklUKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQ
cm9wZXJ0eUFnZTo6T2xkUHJvcGVydHkpOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKICAgICB9CiAKICAgICBSZWY8
U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSwgYm9vbCYgc2F3UG9seVBy
b3RvU3RydWN0dXJlKTsKQEAgLTc4NCw3ICs3NTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Rh
cnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyhWTSYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coCi0gICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworICAg
ICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCk7CiAKICAgICBzdGF0aWMgY29u
c3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQg
c19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CkBAIC04MTYsOCAr
NzkwLDYgQEAgcHJpdmF0ZToKICAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2
b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJh
cnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCi0gICAgV3JpdGVC
YXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOwotCiAgICAgbXV0
YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAg
ICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxp
bmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyMzc1NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
OSwxOCArMTI5LDExIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3IK
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
Ym9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcyk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpCiB7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgcmV0dXJu
IGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0lu
ZmVycmVkVHlwZSkKLXsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTE1Myw3
ICsxNDYsNiBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAg
ICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRy
aWJ1dGVzOwotICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAg
ICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQAogI2luY2x1ZGUg
IklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRl
ICJJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUu
aCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAtMzAzLDcgKzMwMiw2IEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBjZWxsRGFuZ2Vy
b3VzQml0c0hlYXBDZWxsVHlwZS5nZXQoKSwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSkKICAg
ICAsIGZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTRnVuY3Rpb24pCiAgICAgLCBnZW5lcmF0b3JGdW5jdGlvblNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVlT09CSGVhcENlbGxUeXBlLmdl
dCgpLCBKU0dlbmVyYXRvckZ1bmN0aW9uKQotICAgICwgaW5mZXJyZWRUeXBlU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5m
ZXJyZWRUeXBlKQogICAgICwgaW5mZXJyZWRWYWx1ZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVycmVkVmFsdWUpCiAg
ICAgLCBpbnRlcm5hbEZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBJbnRlcm5hbEZ1bmN0aW9uKQogI2lmIEVO
QUJMRShJTlRMKQpAQCAtMzM0LDcgKzMzMiw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNX
aXRoQ29uc3RyYWludHMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQogICAgICwgZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyhleGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlU3BhY2UpCi0gICAgLCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMoaW5mZXJyZWRU
eXBlU3BhY2UpCiAgICAgLCBpbmZlcnJlZFZhbHVlc1dpdGhGaW5hbGl6ZXJzKGluZmVycmVkVmFs
dWVTcGFjZSkKICAgICAsIGV2YWxDb2RlQmxvY2tTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBFdmFsQ29kZUJsb2NrKQogICAg
ICwgZnVuY3Rpb25Db2RlQmxvY2tTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVj
dGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkNvZGVCbG9jaykKQEAgLTQyNyw4
ICs0MjQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVk
VHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRWYWx1
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFy
ZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhjZXB0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIzNzU1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICsz
NzQsNiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7CiAgICAgSXNvU3Vic3BhY2Ug
Z2VuZXJhdG9yRnVuY3Rpb25TcGFjZTsKLSAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFR5cGVTcGFj
ZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFZhbHVlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2Ug
aW50ZXJuYWxGdW5jdGlvblNwYWNlOwogI2lmIEVOQUJMRShJTlRMKQpAQCAtNDA2LDcgKzQwNSw2
IEBAIHB1YmxpYzoKICAgICAKICAgICBJc29DZWxsU2V0IGV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2VzV2l0aENvbnN0cmFpbnRzOwogICAgIElzb0NlbGxTZXQgZXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZXNXaXRoRmluYWxpemVyczsKLSAgICBJc29DZWxsU2V0IGluZmVycmVkVHlwZXNXaXRoRmlu
YWxpemVyczsKICAgICBJc29DZWxsU2V0IGluZmVycmVkVmFsdWVzV2l0aEZpbmFsaXplcnM7CiAg
ICAgCiAgICAgc3RydWN0IFNwYWNlQW5kRmluYWxpemVyU2V0IHsKQEAgLTU0OCw4ICs1NDYsNiBA
QCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
a1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0
cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7Ci0g
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4
Y2VwdGlvblN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359121</attachid>
            <date>2019-01-14 19:55:08 -0800</date>
            <delta_ts>2019-01-15 11:53:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>173202</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5OTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxOS0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBUcnkgcmlwcGluZyBvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCBtaWdodCBiZSBhIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwkKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIGluZmVycmVkIHR5cGVzIGZyb20gSlND
LiBJbml0aWFsIGV2aWRlbmNlIHNob3dzIHRoYXQKKyAgICAgICAgdGhpcyBtaWdodCBiZSBhcm91
bmQgYSB+MSUgc3BlZWR1cCBvbiBTcGVlZG9tZXRlcjIgYW5kIEpldFN0cmVhbTIuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0Zp
dHMuaDoKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwOgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXF1aXJlZFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFs
bHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxW
YWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9y
OjphZGQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9yOjpkdW1wSW5D
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVnaXN0ZXJJbmZlcnJlZFR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3JQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNoZWNrSW5mZXJyZWRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBnZW5lcmF0b3IvRFNM
LnJiOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGpp
dC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZUlubGluZXMuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
dW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU1hcEVudHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uaDoKKwogMjAxOS0wMS0xNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgb3B0aW9uIHRvIEpTQyB0byBkdW1wIG1lbW9yeSBmb290cHJpbnQgb24g
c2NyaXB0IGNvbXBsZXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw2IEBAIGRmZy9ERkdHcmFwaC5jcHAKIGRmZy9ERkdHcmFw
aFNhZmVwb2ludC5jcHAKIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwCiBkZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCi1kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCiBkZmcvREZHSW5z
ZXJ0aW9uU2V0LmNwcAogZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogZGZn
L0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtNzY4LDEwICs3NjcsNiBA
QCBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogcnVudGltZS9JZGVudGlmaWVyLmNwcAogcnVudGlt
ZS9JbmRleGluZ1R5cGUuY3BwCiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwCi1y
dW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAotcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwCi1ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKLXJ1bnRpbWUvSW5mZXJyZWRU
eXBlVGFibGUuY3BwCiBydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCiBydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuY3BwCiBydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9VbmlmaWVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9VbmlmaWVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAt
MzIzLDcgKzMyMyw2IEBAICQoU1JDUk9PVCkvZGZnL0RGR0dyYXBoLmNwcAogJChTUkNST09UKS9k
ZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKLSQoU1JDUk9P
VCkvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAogJChTUkNST09UKS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmNwcAogJChTUkNST09UKS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
Y3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAK
QEAgLTczMiwxMCArNzMxLDYgQEAgJChTUkNST09UKS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAog
JChTUkNST09UKS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCiAkKFNSQ1JPT1QpL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmNwcAogJChTUkNST09UKS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUu
Y3BwCi0kKFNSQ1JPT1QpL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCi0kKFNSQ1JPT1Qp
L3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAotJChTUkNST09UKS9ydW50
aW1lL0luZmVycmVkVHlwZS5jcHAKLSQoU1JDUk9PVCkvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJs
ZS5jcHAKICQoU1JDUk9PVCkvcnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAogJChTUkNST09UKS9y
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCiAkKFNSQ1JPT1QpL3J1bnRpbWUvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
NyArMTEzLDYgQEAKIAkJMEYwNzBBNDkxRDU0M0E5MzAwNkU3MjMyIC8qIEhlYXBDZWxsSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNzBB
NDQxRDU0M0E4OTAwNkU3MjMyIC8qIEhlYXBDZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMDcwQTRCMUQ1NDNBOTgwMDZFNzIz
MiAvKiBMYXJnZUFsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDcwQTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjA3
NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEw
MjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBCMjg2QjFFQjhFNkNGMDAw
RUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQjI4NkExRUI4RTZDRDAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBC
Mjg2RDFFQjhFNkQ1MDAwRUI1RDIgLyogSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEIyODY4MUVCOEU2
Q0QwMDBFQjVEMiAvKiBKU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4
NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQjgzOTgxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUwOCw3ICs1
MDcsNiBAQAogCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZEREE2
RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovOyB9OwogCQkwRkI0Njc4MDFGRERBNkYxMDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0Njc4MTFG
RERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0SW5saW5lcy5oICovOyB9OwotCQkwRkI0Njc4NTFGREZCNDU0MDAzRkNCMDkgLyog
SW5mZXJyZWRUeXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGlu
ZXMuaCAqLzsgfTsKIAkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0NzY3RjFEOTlBRUFEMDA4
RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1
QSAvKiBGVExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLzsgfTsKQEAgLTUzNCw4ICs1MzIsNiBAQAogCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IH07CiAJCTBGQkUwRjc3MTZDMURCMTIwMDgyQzVF
OCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRp
b25QaGFzZS5oICovOyB9OwogCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkJGMTU4QjE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXRJbmxpbmVzLmggKi87IH07
Ci0JCTBGQkY5MkI5MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjkyQjgxRkQ3NkZG
QzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8qIElu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhB
NkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICovOyB9OwogCQkwRkMwOTdBMjE0NkIyOENDMDBD
RjI0NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi87IH07
CiAJCTBGQzIwQ0I2MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMyMENC
NDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oICovOyB9OwpA
QCAtNTQ4LDcgKzU0NCw2IEBACiAJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUw
OTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQzg0MTY5MUJBOEMzMjEwMDYx
ODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVy
cmVkVHlwZUNoZWNrLmggKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkM5N0YzRTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDOTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlv
blBvaW50SW5qZWN0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2
IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNl
bWVudC5oICovOyB9OwpAQCAtNzM2LDggKzczMSw2IEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1
QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZH
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyB9OwogCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1
REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0
aEdlbmVyYXRvci5oICovOyB9OwogCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNv
bnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMwREFEMDMwRkIxRUIxQTAwODJEMjA1IC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkZDOTIxMjFCOTRE
NERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZl
cnJlZFR5cGVUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZD
OTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovOyB9Owog
CQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxNTFCOTRGQjNF
MDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi87IH07CiAJCTBGRkM5OUQxMTg0RUM4
QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlE
MzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwNTAsOCAr
MjA0Myw2IEBACiAJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFyZ2VBbGxvY2F0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNzBBNDYxRDU0M0E4OTAwNkU3
MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXJnZUFsbG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNzc2
QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uRWZmb3J0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwQTc1MjExQjk0QkZBOTAwMTEw
NjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjI4NjcxRUI4
RTZDRDAwMEVCNUQyIC8qIEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjI4NjgxRUI4RTZDRDAwMEVCNUQy
IC8qIEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMEIyODY5MUVCOEU2Q0QwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vha1ByaXZhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwNiw3ICsyNjk3LDYgQEAKIAkJMEZC
NDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJbmZlcnJl
ZFR5cGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVk
VHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0MxRDk5
QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTEwMTZCM0E5NjQw
MDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR01pbmlmaWVkSUQuaDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZElELmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzQ2LDEwICsyNzM2LDYgQEAKIAkJMEZCRTBGNzAxNkMx
REIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZp
Y2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRjE1OEExOUI3
QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Jsb2NrU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAv
KiBERkdCbG9ja1NldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQmxvY2tTZXRJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQkY5MkI1MUZENzZGRkMwMEFDMjhBOCAvKiBJ
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEZCRjkyQjYxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3Ry
dWN0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVk
U3RydWN0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCRjkyQjcxRkQ3
NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCRjkyQjgxRkQ3NkZGQzAwQUMyOEE4IC8qIElu
ZmVycmVkU3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVy
cmVkU3RydWN0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2
OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tbW9uLmg7IHBhdGggPSBk
ZmcvREZHQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzhFMTQ2
QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR09TUkV4aXQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc3Miw4ICsyNzU4LDYgQEAKIAkJMEZDNzEy
RTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAv
KiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBE
RkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkM4NDE2NzFCQThDMzIx
MDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJl
ZFR5cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAy
MEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcw
MDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA4OSw5ICszMDczLDYgQEAKIAkJMEZGQjZDMzYx
QUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGQjgwQkIyMEE3OTQ3MDAwMDZBQUY2IC8qIEpJVENvZGVJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGVJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJl
ZFR5cGVUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZl
cnJlZFR5cGVUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkZDOTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVk
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSW5mZXJy
ZWRUeXBlLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BlcnR5
VHlwZUtleS5oOyBwYXRoID0gZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzQ3LDE1ICs2NzI4LDYgQEAKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJMTQzODZBNzYxREQ2OTg5
QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwICovLAogCQkJCTE0Mzg2QTc3
MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8sCi0JCQkJMEZC
RjkyQjYxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmNwcCAqLywKLQkJCQkw
RkJGOTJCODFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCAqLywKLQkJCQkw
RkJGOTJCNTFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cCAqLywKLQkJCQkwRkJGOTJCNzFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggKi8sCi0JCQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVk
VHlwZS5jcHAgKi8sCi0JCQkJMEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlw
ZS5oICovLAotCQkJCTBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxp
bmVzLmggKi8sCi0JCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRh
YmxlLmNwcCAqLywKLQkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUu
aCAqLywKIAkJCQkwRjRBRTA0MjFGRTBEMjU0MDBFMjA4MzkgLyogSW5mZXJyZWRWYWx1ZUlubGlu
ZXMuaCAqLywKQEAgLTczNzQsNyArNzM0Niw2IEBACiAJCQkJRTNCRkE1Q0QyMUU4NTNBMTAwOUMw
RUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oICovLAogCQkJCTBGOEYyQjk3MTcyRjA0
RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovLAogCQkJCTBGOEYyQjk4
MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLywKLQkJCQkwRkZD
OTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovLAogCQkJ
CUMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwICov
LAogCQkJCUMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMu
aCAqLywKIAkJCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcCAqLywKQEAgLTc0MTksOCArNzM5MCw2IEBACiAJCQkJMEYyRkNDRjMxOEE2MDA3MDAw
MUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggKi8sCiAJCQkJMEZCMTc2NUMxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEZCMTc2NUQxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5oICovLAotCQkJCTBGQzg0MTY2MUJBOEMzMjEwMDYx
ODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgKi8sCi0JCQkJMEZDODQxNjcxQkE4QzMy
MTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggKi8sCiAJCQkJMEZCMTRFMjAxODEy
NTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oICovLAogCQkJCTBGQjE0RTIy
MTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8sCiAJ
CQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cCAqLywKQEAgLTg3NjEsNyArODczMCw2IEBACiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2
IC8qIERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGQTVEMDIxRTg1M0ExMDA5
QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMkI5QTE3MkYwNTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRkZDOTIxNDFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8q
IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODUzNEMxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC04Nzg5LDcgKzg3NTcsNiBAQAogCQkJCTg2RUM5REM4MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkExOEE2
MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwNjE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTA5MSwxMSArOTA1OCw2IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0
NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTBGQkY5MkI5MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJl
ZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4
IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYw
QTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEZCNDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIElu
ZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEFFMDQzMUZFMEQyNTcwMEUyMDgz
OSAvKiBJbmZlcnJlZFZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTAw
RTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE5LDE0ICsxMDE5LDYgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFj
ZTogewotICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVy
cmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7Ci0gICAgICAgICAgICBpZiAoQWNjZXNzQ2FzZUlu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwg
dHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBh
dGNoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVn
cywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
QWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3Qg
aGF2ZSB0eXBlLlxuIik7Ci0KICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkg
ewogICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LApAQCAtMTA0OSwxNCArMTA0MSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgLy8gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigpIHNob3VsZCBoYXZl
IHJldHVybmVkIG51bGwgaWYgdGhpcyB3YXNuJ3QgdHJ1ZS4KICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCi0gICAgICAgIGlmIChJbmZlcnJl
ZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwo
KSkpIHsKLSAgICAgICAgICAgIGlmIChBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJc
biIpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAgICAgICAg
ICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgfSBlbHNlIGlmIChBY2Nlc3NDYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKLQogICAg
ICAgICAvLyBOT1RFOiBUaGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9l
c0NhbGxzKCkuIEl0J3MgaW1wb3J0YW50IHRoYXQgZG9lc0NhbGxzKCkga25vd3MKICAgICAgICAg
Ly8gZXhhY3RseSB3aGVuIHRoaXMgd291bGQgbWFrZSBjYWxscy4KICAgICAgICAgYm9vbCBhbGxv
Y2F0aW5nID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRml0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GaXRzLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9GaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJM
YWJlbC5oIgogI2luY2x1ZGUgIk9wY29kZVNpemUuaCIKICNpbmNsdWRlICJQcm9maWxlVHlwZUJ5
dGVjb2RlRmxhZy5oIgorI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlc3Vs
dFR5cGUuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRG
bGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAKLSNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CkBAIC0zOSwxMSArMzgsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgUHV0CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZsYWdzICYg
UHV0QnlJZElzRGlyZWN0KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwot
Ci0gICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFn
cyhmbGFncyk7Ci0gICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsKLSAgICBpZiAoSW5mZXJyZWRU
eXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCi0gICAgICAgIG91dC5wcmludCgiOiIsIGJpdHdpc2Vf
Y2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZs
YWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRGbGFncy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDM4ICszNiw2IEBAIGVu
dW0gUHV0QnlJZEZsYWdzIDogaW50MzJfdCB7CiAgICAgLy8gY2hlY2tpbmcgaWYgdGhlIHByb3Rv
dHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCiAgICAgUHV0QnlJZElzRGlyZWN0ID0gMHgxLAogICAg
IFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAotCi0gICAgLy8gTk9URTogVGhlIHZh
bHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtLgotCi0gICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVkIGluZmVycmVkIHR5
cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBtYXNrLCBhbmQgdGhl
bgotICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmluZyBvZiB0aGUgc2Vj
b25kYXJ5IG1hc2s6Ci0gICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1h
c2spIHsKLSAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKLSAgICAvLyAg
ICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgewotICAgIC8vICAg
ICAuLi4KLSAgICAvLyAgICAgfQotICAgIC8vICAgICBicmVhazsKLSAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgLy8gY2FzZSBQdXRCeUlkUHJp
bWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAvLyAgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7Ci0gICAgLy8gICAgIGJy
ZWFrOwotICAgIC8vIH0KLSAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2LAotICAgIFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBjaGVjayB0aGUgc2Vj
b25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCi0gICAgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJ
RC4KLSAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9IDB4
NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KLQotICAgIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlTWFzayA9IC0weDgsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20gPSAw
eDAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAotICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIg
PSAweDE4LAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMCwKLSAgICBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVT
eW1ib2wgPSAweDMwLAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzOCwKLSAg
ICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSAweDQwLAotICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlVG9wID0gMHg0OAogfTsKIAogaW5saW5lIFB1dEJ5SWRGbGFncyBlbmNvZGVT
dHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBpZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVy
ZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7CkBAIC04Nyw3ICs4Nyw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb20KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBvZmZzZXQsIG5ld1N0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsK
KyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsK
IH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNDIsNyArMTQyLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwogICAgIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwogICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTgyLDggKzE4Miw3
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJl
KCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMxNSw3ICszMTQsNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURl
c2NyaXB0b3JGb3IodWlkKSk7CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2Uoc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFy
aWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzUwLDggKzM0OSw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICAgICAgYm9v
bCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKICAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlv
biwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5m
ZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFw
cGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NiBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdT
dHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9IG90
aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAg
bV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIubV9j
YWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNlCkBA
IC01NCwyMCArNTMsMTggQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRv
cgogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OwotICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgcmVxdWlyZWRUeXBlKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03NSw3ICs3
Miw2IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICBy
ZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtOTAsNyArODYsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZN
b3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSBJbmZlcnJl
ZFR5cGU6OlRvcDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTksOSArMTU0LDYgQEAg
Ym9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgIGlmIChtX29mZnNl
dCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
cmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNlIE5vdFNldDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMwNSwxNiArMjk3LDE0IEBAIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIs
IGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiLCAiLAotICAgICAgICAgICAgaW5Db250ZXh0KHJlcXVpcmVkVHlwZSgpLCBjb250ZXh0KSwg
Ij4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAgICBvdXQucHJpbnQo
CiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIgdG8gIiwKICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25k
aXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCi0gICAg
ICAgICAgICBpbkNvbnRleHQocmVxdWlyZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOworICAgICAg
ICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIs
IG9mZnNldCgpLCAiLCAiLCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgU2V0dGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIs
MTEgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwog
Ci0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5
T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3Bl
cnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAg
ICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKICAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwK
QEAgLTEwNSwxMSArMTA1LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZml4VHJhbnNpdGlv
blRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
cmVxdWlyZWRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlw
ZTsKLSAgICB9Ci0KICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29s
IHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OwpAQCAtMTUwLDcgKzE0NSw2IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVj
dHVyZSB7IG51bGxwdHIgfTsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRp
dGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTA2LDIzICsyOTA2LDEw
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYg
KHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
KSB7CiAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgICAgICBHZXRCeUlkU3Rh
dHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwgdWlkKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUo
KSkgewotICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVzdWx0IGlzIGdv
aW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBhIGNvbnN0YW50LCBvciBtYXliZQotICAgICAgICAgICAg
ICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KLSAgICAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHJlc3VsdDsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVt
VmFyaWFudHMoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdv
bid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlk
LCB3ZSdkCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUu
Ci0gICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ld
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFs
dWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwgdWlkKS5pc1NpbXBsZSgpKSB7CiAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
ICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KSA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyOTIs
NyArMzI3OSw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVy
XTsKIAogICAgICAgICAvLyBGSVhNRTogVGhlIHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5m
ZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVzIG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVyZQog
ICAgICAgICAvLyByaWdodCBub3cuIFRoYXQncyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4gc29t
ZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4gb3B0aW1pemF0aW9uICh1c3VhbGx5CkBAIC0zMzAw
LDEyICszMjg2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5
LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgaGF2ZSB0byByZWx5IGVudGlyZWx5CiAgICAgICAg
IC8vIG9uIHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2FzIGFibGUgdG8gcHJvdmUuCiAg
ICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9w
ZXJ0eSgKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zm
c2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLQotICAgICAgICAvLyBJdCdz
IHBvc3NpYmxlIHRoYXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciBjYW1lIHVwIHdpdGgg
aXMgYmV0dGVyLgotICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9tUGFyc2luZzsKLSAgICAg
ICAgdHlwZUZyb21QYXJzaW5nLnNldChtX2dyYXBoLCBkYXRhLmluZmVycmVkVHlwZSwgbV9zdGF0
ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJv
bVBhcnNpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zm
c2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKIAogICAgICAgICAvLyBJZiB3
ZSBkZWNpZGUgdGhhdCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNh
biByZXR1cm4sIHRoZW4gaXQncyBwcm9iYWJseQogICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21w
aWxhdGlvbiB3YXMgYWxyZWFkeSBpbnZhbGlkYXRlZC4KQEAgLTMzNDQsOCArMzMyNSw2IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9u
bHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAot
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07Ci0KICAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7CkBAIC0zMzY3LDEzICszMzQ2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0Lm1lcmdlKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCwgdWlkLCBtX3N0YXRlLnN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICByZXN1bHQu
bWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM0MTQsNyArMzM4Niw2
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBv
cmlnaW5hbFZhbHVlOwotICAgICAgICAgICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBoLCB2YXJp
YW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRo
aXNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNjIgKzEyNiw2IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFw
aCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1
ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKLSAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICBjbGVhcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgIHNldE5vbkNlbGxUeXBlKFNw
ZWNCb29sZWFuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhl
cjoKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY090aGVyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3Bl
Y0ludDMyT25seSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVt
YmVyOgotICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKLSAgICAgICAgc2V0KGdy
YXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICBzZXQoZ3JhcGgsIGdyYXBo
Lm1fdm0uc3ltYm9sU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCaWdJbnQ6Ci0gICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5iaWdJ
bnRTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1lcmdlKFNwZWNPdGhlcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgotICAgICAgICBzZXRUeXBlKGdyYXBoLCBT
cGVjT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RPck90aGVyOgotICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0IHwgU3BlY090aGVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAg
IG1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFic3RyYWN0VmFsdWU6OnNldCgKLSAgICBH
cmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
U3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKLXsKLSAgICBzZXQoZ3JhcGgsIGRl
c2NyaXB0b3IpOwotICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJl
ZCkKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKLX0KLQogdm9pZCBBYnN0cmFjdFZhbHVl
OjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmIGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVz
ZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IE5vZGVS
ZXN1bHREb3VibGUpIHsKQEAgLTI1MywxNyArMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpt
ZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBvbGRNZSAhPSAqdGhpczsKIH0KIAotYm9v
bCBBYnN0cmFjdFZhbHVlOjppc1R5cGUoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSkgY29uc3QKLXsKLSAgICBBYnN0cmFjdFZhbHVlIHR5
cGVWYWx1ZTsKLSAgICB0eXBlVmFsdWUuc2V0KGdyYXBoLCBpbmZlcnJlZFR5cGUpOwotCi0gICAg
QWJzdHJhY3RWYWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlzOwotICAgIG1lcmdlZFZhbHVlLm1lcmdl
KHR5cGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gbWVyZ2VkVmFsdWUgPT0gdHlwZVZhbHVlOwotfQot
CiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcigKICAgICBHcmFwaCYgZ3Jh
cGgsIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQmIG90aGVyLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzKQogewpAQCAtNDAyLDEzICszMzUsNiBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CiB9CiAKLUZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEFic3RyYWN0VmFs
dWUgZmlsdGVyVmFsdWU7Ci0gICAgZmlsdGVyVmFsdWUuc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsK
LSAgICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKLX0KLQogdm9pZCBBYnN0cmFjdFZhbHVl
OjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5k
IGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiREZHTm9k
ZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1
ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5o
IgogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRl
ICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtMjQ5LDkgKzI0OCw2IEBAIHN0cnVjdCBBYnN0cmFjdFZh
bHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0
KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7Ci0gICAgdm9pZCBzZXQo
R3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUpOwotCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2Rl
RmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAgICAgdm9pZCBmaXhUeXBl
Rm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBAIC0zMTgsOCArMzE0LDYg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVz
aXJlZFR5cGUpOwogICAgIH0KIAotICAgIGJvb2wgaXNUeXBlKEdyYXBoJiwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJikgY29uc3Q7Ci0KICAgICAvLyBGaWx0ZXJzIHRoZSB2YWx1ZSB1
c2luZyB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYgdGhlIGFkbWl0dGVkVHlwZXMgYXJndW1l
bnQgaXMgbm90IHBhc3NlZCwgdGhpcwogICAgIC8vIGltcGxpY2l0bHkgZmlsdGVycyBieSB0aGUg
dHlwZXMgaW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNldCwgd2hpY2ggYXJlIHVzdWFsbHkgYSBz
dWJzZXQgb2YKICAgICAvLyBTcGVjQ2VsbC4gSGVuY2UsIGFmdGVyIHRoaXMgY2FsbCwgdGhlIHZh
bHVlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1jZWxsIG1lbWJlcnMuIEJ1dCwgeW91IGNh
bgpAQCAtMzU0LDggKzM0OCw2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJik7CiAgICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXJDbGFzc0luZm8oR3JhcGgmLCBjb25zdCBDbGFzc0luZm8qKTsKIAotICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJik7Ci0gICAgCiAgICAgQUxXQVlTX0lOTElORSBGaWx0cmF0aW9uUmVzdWx0IGZhc3RGb3J3
YXJkVG9BbmRGaWx0ZXJVbnByb3ZlbihBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG5ld0Vwb2No
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWND
ZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDggQEAg
cHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NG
dW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgU3BlY3VsYXRlZFR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxh
dGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGVUeXBlID0gR2V0QnlP
ZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogaGFu
ZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKICAg
ICBib29sIGhhbmRsZURPTUpJVEdldHRlcihWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBH
ZXRCeUlkVmFyaWFudCYsIE5vZGUqIHRoaXNOb2RlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhhbmRsZU1vZHVsZU5hbWVz
cGFjZUxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJh
c2UsIEdldEJ5SWRTdGF0dXMpOwogCkBAIC0zNzcyLDggKzM3NzIsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiB9CiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldCgKLSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0g
ICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsIE5vZGVUeXBl
IG9wKQorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7
CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZz
ZXQpKQpAQCAtMzc4NCw4ICszNzgzLDYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAgICBkYXRhLT5pbmZlcnJl
ZFR5cGUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShp
bmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChv
cCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFz
ZSk7CiAKQEAgLTM3OTMsNyArMzc5MCw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeU9mZnNldCgKIH0KIAogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0
KAotICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsCisgICAg
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKQEAgLTM4MDUs
OCArMzgwMiw2IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5h
ZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXI7Ci0gICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBl
OwotICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAK
ICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIApAQCAtMzk3OSw3ICszOTc0LDcg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKICAgICAgICAgcmV0
dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUs
IGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9w
KTsKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBt
ZXRob2Qub2Zmc2V0KCksIG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBA
IC00MTcyLDE3ICs0MTY3LDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQogCi0g
ICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7Ci0gICAgICAgIGlm
IChuZWVkU3RydWN0dXJlQ2hlY2spIHsKLSAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9ncmFwaC5pbmZlcnJlZFR5cGVGb3JQcm9w
ZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICAgICAgaW5mZXJyZWRUeXBlLm1lcmdl
KHRoaXNUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBp
bmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKLSAgICAgICAgCiAgICAgICAgIGxvYWRl
ZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBs
b2FkT3ApOworICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGxvYWRl
ZFZhbHVlOwpAQCAtNDE5Myw3ICs0MTc5LDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3Jl
KE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VMaWtlKGJhc2UsIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5z
dHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZp
ZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCksIHZhbHVlKTsKKyAg
ICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKApA
QCAtNDQyOCw3ICs0NDE0LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAg
ICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHZhcmlhbnQucmVxdWlyZWRUeXBlKCkp
OwogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKQpAQCAtNDQ5NCw4ICs0NDc5LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlJZCgKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPm9mZnNldCA9IHZhcmlh
bnQub2Zmc2V0KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
TnVtYmVyOwotICAgICAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSB2YXJpYW50LnJlcXVpcmVkVHlw
ZSgpOwotICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGRhdGEtPmluZmVycmVk
VHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiBXZSBjb3VsZCBHQyBhdCB0aGlzIHBv
aW50IGJlY2F1c2Ugc29tZW9uZSBjb3VsZCBpbnNlcnQgYW4gb3BlcmF0aW9uIHRoYXQgR0NzLgog
ICAgICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlOgpAQCAtNDgwNyw5ICs0NzkwLDYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+
b2Zmc2V0ID0ga25vd25Qb2x5UHJvdG9PZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKG1fZ3JhcGgubV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9O
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5
cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZl
cnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRh
KSwgb2JqZWN0LCBvYmplY3QsIHdlYWtKU0NvbnN0YW50KHByb3RvdHlwZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJH
ZXRCeUlkU3RhdHVzLmgiCkBAIC00NzcsOCArNDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5yZXF1
aXJlZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTcyNywxMCArNzI1LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBrbm93blBvbHlQ
cm90b09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShtX2dyYXBo
Lm1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVy
cmVkVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7Ci0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53
aXRoSW52YWxpZEV4aXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcm90b3R5cGVOb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayAr
IDEsIG9yaWdpbiwgbV9ncmFwaC5mcmVlemUocHJvdG90eXBlKSk7CkBAIC0xMDc0LDcgKzEwNjgs
NyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KAogICAgICAgICB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpU
b3ApCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7CiAgICAgICAgIGNoaWxk
RWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIApAQCAtMTA5MCw3ICsxMDg0
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSAqbV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNl
dDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAg
ICAgICAgZGF0YS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgICAgIAogICAgICAg
ICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxk
RWRnZSk7CiAgICAgfQpAQCAtMTEwMSw4ICsxMDk0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgRWRn
ZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5k
ZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwotICAg
ICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCB2YXJpYW50LnJl
cXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewotCi0vLyBUaGlzIGRvY3VtZW50cyB0aGUgREZHJ3MgZXhwZWN0YXRpb24gZm9yIGFuIEluZmVy
cmVkVHlwZTogc3BlY2lmaWNhbGx5LCB0aGF0IHdlIHdhbnQgaXQgdG8gaGF2ZSBhIGxpdmUKLS8v
IEluZmVycmVkVHlwZSBvYmplY3QgYW5kIHRoYXQgdGhpcyBvYmplY3QgaGFzIHRoZSB0eXBlIHRo
YXQgd2Ugb3JpZ2luYWxseSBzYXcuCi0KLWNsYXNzIERlc2lyZWRJbmZlcnJlZFR5cGUgewotcHVi
bGljOgotICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoKQotICAgICAgICA6IG1fb2JqZWN0KG51bGxw
dHIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKEluZmVycmVk
VHlwZSogb2JqZWN0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGV4cGVjdGVkKQot
ICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX2V4cGVjdGVkKGV4cGVjdGVk
KQotICAgIHsKLSAgICB9Ci0KLSAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29iamVjdChudWxscHRyKQotICAgICAgICAs
IG1fZXhwZWN0ZWQoSW5mZXJyZWRUeXBlOjpUb3ApCi0gICAgewotICAgIH0KLQotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVjdGVk
OyB9Ci0KLSAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
OyB9Ci0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyByZXR1
cm4gbV9leHBlY3RlZDsgfQotCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAotICAgIHsKLSAgICAg
ICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0Ci0gICAgICAgICAg
ICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLQotICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX29i
amVjdCAmJiBtX2V4cGVjdGVkID09IEluZmVycmVkVHlwZTo6VG9wOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJ
bmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7Ci0g
ICAgfQotCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KGluQ29udGV4dCht
X2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOwotICAg
IH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAg
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJ
bmZlcnJlZFR5cGUqIG1fb2JqZWN0OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4
cGVjdGVkOwotfTsKLQotc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4gewotICAg
IHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZp
c2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSw2IEBAIHZvaWQgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjoKICAgICB9CiB9CiAKLXZvaWQgSW5mZXJyZWRU
eXBlQWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKLXsKLSAgICBrZXkuYWRkKGNvbW1vbi53
YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Ci19Ci0KIERlc2lyZWRXYXRjaHBvaW50czo6RGVz
aXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hw
b2ludHMoKSB7IH0KIApAQCAtMTAyLDExICs5Nyw2IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRz
OjphZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHko
a2V5KTsKIH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNp
cmVkSW5mZXJyZWRUeXBlJiBrZXkpCi17Ci0gICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShr
ZXkpOwotfQotCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0x
MjIsNyArMTEyLDYgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgog
ICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAg
ICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBt
X2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsK
LSAgICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9
CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTEz
MSw4ICsxMjAsNyBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAg
ICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZl
cnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVT
dGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxW
YWxpZCgpCi0gICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CisgICAg
ICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xNDMsNyArMTMxLDYgQEAgdm9pZCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVk
IHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsK
ICAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZp
ZXdzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5
IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4
dCksICJcbiIpOwotICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRl
eHQobV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0
YS5oIgotI2luY2x1ZGUgIkRGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgpAQCAtOTMsMTggKzkyLDYgQEAgc3RydWN0IEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0bwogICAgIH0KIH07CiAKLXN0cnVjdCBJbmZlcnJl
ZFR5cGVBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYsIENvbW1vbkRhdGEmKTsKLSAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
a2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIG91dC5wcmludChpbkNv
bnRleHQoa2V5LCBjb250ZXh0KSk7Ci0gICAgfQotfTsKLQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0
Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRj
aHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECkBAIC0xNzMsMTAgKzE2MCw2IEBAIHB1YmxpYzoKICAgICAvLyBJdCdz
IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBo
Ojp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1h
Z2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemls
eShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOwotCi0gICAgLy8gSXQncyByZWNvbW1l
bmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJy
ZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMKLSAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCi0g
ICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAg
IGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBAIC0yMDQsMTEgKzE4Nyw2IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dh
dGNoZWQoa2V5KTsKICAgICB9Ci0gICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dh
dGNoZWQoa2V5KTsKLSAgICB9Ci0KICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgIApAQCAtMjE4LDcgKzE5Niw2IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRX
YXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJy
ZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmll
dyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwot
ICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJy
ZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRl
ICJBcnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiREZH
SW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNs
dWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmgiCkBAIC0xNjMzLDEwICsxNjMyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdl
PEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
aW5kZXhGb3JDaGVja3MoKTsKLSAgICAgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAot
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBpbmRleCwgb3JpZ2luRm9yQ2hlY2soaW5k
ZXgpLCBub2RlLT5jaGlsZDMoKS5ub2RlKCksCi0gICAgICAgICAgICAgICAgbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGEoKS5pbmZlcnJlZFR5cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9yQmFy
cmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIzOTk2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODEsNyArMjgxLDYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBj
b25zdAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9y
YWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50
KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7
Ci0gICAgICAgIG91dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAiLCBpbkNvbnRleHQoc3RvcmFn
ZUFjY2Vzc0RhdGEuaW5mZXJyZWRUeXBlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmIChub2Rl
LT5oYXNNdWx0aUdldEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRE
YXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKQEAgLTEwNTksMzggKzEw
NTgsNiBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0
dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsK
IH0KIAotSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29u
c3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCi17Ci0gICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5z
dHJ1Y3R1cmUoKSk7Ci0gICAgCi0gICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmZpbmQo
a2V5KTsKLSAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlwZXMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKLQotICAgIEluZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5z
dHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQoKSk7Ci0gICAgaWYgKCF0eXBlT2Jq
ZWN0KSB7Ci0gICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRv
cCk7Ci0gICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKLSAgICB9Ci0KLSAgICBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlw
dG9yKCk7Ci0gICAgaWYgKHR5cGVEZXNjcmlwdG9yLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRv
cCkgewotICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3Ap
OwotICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgfQotICAgIAotICAgIG1f
aW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3BsYW4ud2Vh
a1JlZmVyZW5jZXMoKS5hZGRMYXppbHkodHlwZU9iamVjdCk7Ci0gICAgcmVnaXN0ZXJJbmZlcnJl
ZFR5cGUodHlwZURlc2NyaXB0b3IpOwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5
IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxl
IHN0cnVjdHVyZXMgbWF5Ci0gICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGlu
c3RhbmNlLgotICAgIG1fcGxhbi53YXRjaHBvaW50cygpLmFkZExhemlseShEZXNpcmVkSW5mZXJy
ZWRUeXBlKHR5cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7Ci0KLSAgICByZXR1cm4gdHlwZURl
c2NyaXB0b3I7Ci19Ci0KIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNv
ZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMzIwLDIyICsxMjg3LDcgQEAgSlNWYWx1
ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjbwogfQogCiBBYnN0cmFjdFZhbHVlIEdy
YXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0gICAgY29uc3QgUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0
YXRlIGNsb2JiZXJTdGF0ZSkKLXsKLSAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKLSAgICBiYXNl
LmZvckVhY2goCi0gICAgICAgIFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZS5zZXQo
KnRoaXMsIGluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZS5nZXQoKSwgdWlkKSk7Ci0g
ICAgICAgICAgICByZXN1bHQubWVyZ2UodmFsdWUpOwotICAgICAgICB9KTsKLSAgICBpZiAoY2xv
YmJlclN0YXRlID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCi0gICAgICAgIHJlc3VsdC5jbG9i
YmVyU3RydWN0dXJlcygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFic3RyYWN0VmFsdWUg
R3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisg
ICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAg
IFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCiB7CiAgICAgaWYgKEpTVmFsdWUg
dmFsdWUgPSB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIG9mZnNldCkpIHsKQEAgLTEzNDQs
OSArMTI5Niw2IEBAIEFic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm8KICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5p
c0Zpbml0ZSgpKQotICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2Uu
bV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJlclN0YXRlKTsKLQogICAgIHJldHVybiBBYnN0
cmFjdFZhbHVlOjpoZWFwVG9wKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDI2ICs3OTcsMTAgQEAgcHVibGljOgog
ICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0
aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNl
LCBQcm9wZXJ0eU9mZnNldCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBlKGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBl
LnN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5zdHJ1Y3R1
cmUoKSk7Ci0gICAgfQotCi0gICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFy
ZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVy
ZS4KLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYpOwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5
cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5
KHN0cnVjdHVyZSwgdWlkKSk7Ci0gICAgfQotCi0gICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQmIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVj
dHVyZXNBcmVXYXRjaGVkKTsKLQogICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJv
cGVydHkgaW5mZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdv
b2QgYWJzdHJhY3QKICAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRo
IHRoZSBnaXZlbiBhYnN0cmFjdCB2YWx1ZSBiYXNlLgogICAgIEFic3RyYWN0VmFsdWUgaW5mZXJy
ZWRWYWx1ZUZvclByb3BlcnR5KAotICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0
YXRlKTsKKyAgICAgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQs
IFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZl
bmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKQEAgLTEwNjUsNyArMTA0OSw2IEBAIHB1YmxpYzoK
ICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZl
bmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8
c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7Ci0gICAg
SGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZl
cnJlZFR5cGVzOwogICAgIFZlY3RvcjxSZWY8U25pcHBldD4+IG1fZG9tSklUU25pcHBldHM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENQU0RvbWluYXRvcnM+IG1fY3BzRG9taW5hdG9yczsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U1NBRG9taW5hdG9ycz4gbV9zc2FEb21pbmF0b3JzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJ
KHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJy
ZWRUeXBlQ2hlY2suY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKLQotI2lmIEVOQUJMRShERkdfSklU
KQotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7Ci0KLXZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCi0gICAgSW5zZXJ0aW9uU2V0
JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5v
ZGUqIGJhc2VOb2RlLAotICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkK
LXsKLSAgICBpbnNlcnRpb25TZXQuZ3JhcGgoKS5yZWdpc3RlckluZmVycmVkVHlwZSh0eXBlKTsK
LSAgICAKLSAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvdHRvbToKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgRm9yY2VPU1JFeGl0LCBvcmlnaW4pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVh
blVzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6
Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE90aGVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsK
LQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9k
ZSwgSW50MzJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok51bWJlcjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7Ci0gICAgICAg
IHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVk
Z2UoYmFzZU5vZGUsIFN0cmluZ1VzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2Rl
SW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTeW1ib2xVc2Up
KTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ss
IG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQmlnSW50VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBvcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0Lmdy
YXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKLSAgICAgICAgICAgIEVk
Z2UoYmFzZU5vZGUsIENlbGxVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3Ry
dWN0dXJlLCBvcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCku
YWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKLSAgICAgICAgICAgIEVkZ2UoYmFz
ZU5vZGUsIENlbGxPck90aGVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3Q6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJ
bmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE9iamVjdFVzZSkp
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhl
cjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwg
Q2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT2JqZWN0T3JPdGhlclVzZSkpOwotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgREZHX0NSQVNIKGluc2VydGlvblNldC5ncmFwaCgpLCBiYXNlTm9kZSwg
IkJhZCBpbmZlcnJlZCB0eXBlIik7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIEluc2VydHMgYSB0eXBlIGNoZWNrIHRo
YXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4gaW5mZXJyZWQgdHlwZS4KLXZv
aWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCi0gICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jazsKIHN0cnVj
dCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0KLSAgICAvLyBUaGlzIG5lZWRzIHRvIGtub3cgdGhl
IGluZmVycmVkIHR5cGUuIEZvciBwdXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5l
ZWQgdG8gcmVtZW1iZXIKLSAgICAvLyB3aGF0IGNoZWNrIGlzIG5lZWRlZC4gRm9yIGdldHMsIHRo
aXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIEFJIG1pZ2h0IGZvcmdldCB3aGF0IHR5
cGUgaXMKLSAgICAvLyBndWFyYW50ZWVkLgotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBp
bmZlcnJlZFR5cGU7CiB9OwogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjk0LDE0ICsyMjk0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhl
IGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwg
SW5mZXJyZWRUeXBlOjpUb3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAg
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9m
ZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIzOTk2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NDEsMzEgKzU0MSwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBQdXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IGRhdGEub2Zmc2V0OwotICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkID0gZ3JhcGguaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOwotCi0g
ICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBj
YXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0g
ZGF0YS5pbmZlcnJlZFR5cGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRC
eU9mZnNldDoKLSAgICAgICAgICAgIC8vIFB1dEJ5T2Zmc2V0IGtub3dzIGFib3V0IGluZmVycmVk
IHR5cGVzIGJlY2F1c2UgaXQncyB0aGUgZW5mb3JjZXIgb2YgdGhhdCB0eXBlIHJhdGhlcgotICAg
ICAgICAgICAgLy8gdGhhbiB0aGUgY29uc3VtZXIgb2YgdGhhdCB0eXBlLiBUaGVyZWZvcmUsIFB1
dEJ5T2Zmc2V0IGV4cGVjdHMgVE9QIGZvciB0aGUgcHVycG9zZSBvZgotICAgICAgICAgICAgLy8g
c2FmZS10by1leGVjdXRlIGluIHRoZSBzZW5zZSB0aGF0IGl0IHdpbGwgYmUgaGFwcHkgd2l0aCBh
bnl0aGluZyBhcyBnZW5lcmFsIGFzIFRPUAotICAgICAgICAgICAgLy8gKHNvIGFueSB0eXBlKS4K
LSAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0goZ3JhcGgs
IG5vZGUsICJCYWQgb3Bjb2RlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAg
ICAgICAgIC8vIEdyYXBoOjppc1NhZmVUb0xvYWQoKSBpcyBhbGwgYWJvdXQgcHJvb2ZzIGRlcml2
ZWQgZnJvbSBQcm9wZXJ0eUNvbmRpdGlvbnMuIFRob3NlIGRvbid0CiAgICAgICAgIC8vIGtub3cg
YW55dGhpbmcgYWJvdXQgaW5mZXJyZWQgdHlwZXMuIEJ1dCBpZiB3ZSBoYXZlIGEgcHJvb2YgZGVy
aXZlZCBmcm9tIHdhdGNoaW5nIGEKICAgICAgICAgLy8gc3RydWN0dXJlIHRoYXQgaGFzIGEgdHlw
ZSBwcm9vZiwgdGhlbiB0aGUgbmV4dCBjYXNlIGJlbG93IHdpbGwgZGVhbCB3aXRoIGl0LgotICAg
ICAgICBpZiAoc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdh
dGNoZWQKLSAgICAgICAgICAgICYmIGluZmVycmVkVHlwZS5raW5kKCkgPT0gSW5mZXJyZWRUeXBl
OjpUb3ApIHsKKyAgICAgICAgaWYgKHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0
cnVjdHVyZXNBcmVXYXRjaGVkKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFz
ZSA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oZ3JhcGgu
bV92bSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZ3JhcGguaXNTYWZlVG9Mb2FkKGtub3duQmFz
ZSwgb2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NzksMTIg
KzU1OCw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSA9IHZhbHVlW2ldLmdldCgpOwogICAgICAg
ICAgICAgaWYgKCF0aGlzU3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGluZmVycmVkVHlwZS5raW5k
KCkgIT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKLSAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgdGhpc0luZmVycmVkVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBo
LmluZmVycmVkVHlwZUZvclByb3BlcnR5KHRoaXNTdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpbmZlcnJlZFR5cGUuc3Vic3VtZXModGhpc0luZmVycmVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5MjAsOCArNjkyMCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCi0gICAgICAgICAgICBj
aGVja0luZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQpA
QCAtMTE1MzAsMTQ4ICsxMTUyOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5w
aGkoSW50MzIsIHJlc3VsdHMpOwogICAgIH0KIAotICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUo
RWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYg
dHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBv
ciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9k
ZSBsaWtlOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4p
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgotICAgICAgICAvLwot
ICAgICAgICAvLyAgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgewotICAgICAgICAvLyAg
ICAgY2FzZSA0MjoKLSAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5
cGUxKTsKLSAgICAgICAgLy8gICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsK
LSAgICAgICAgLy8gICAgIGNhc2UgNDM6Ci0gICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJl
ZFR5cGUoLi4uLCB0eXBlMik7Ci0gICAgICAgIC8vICAgICAgICAgLi4uCi0gICAgICAgIC8vICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIC8vICAgICB9Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHdo
ZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3Vs
ZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQgYmUKLSAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlw
ZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgotICAgICAgICAKLSAgICAgICAg
c3dpdGNoICh0eXBlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9t
OgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJv
dmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpOdW1iZXI6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmlu
ZzoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RD
ZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3ltYm9sKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90QmlnSW50KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2Up
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdFdpdGhTdHJ1Y3R1cmU6IHsKLSAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBp
ZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVk
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAot
ICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1
cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwot
Ci0gICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodHlwZS5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBpZiAoIWFic3Ry
YWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBj
YXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0T3JPdGhlcjogewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkp
OwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNl
bGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAg
ICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxs
KSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6VG9wOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Ci0g
ICAgfQotICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRp
Zmllck51bWJlciwgb2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL0RTTC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0RTTC5yYgkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9EU0wucmIJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsOCBAQCBtb2R1bGUgRFNM
CiAjaW5jbHVkZSAiR2V0QnlJZE1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIK
ICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVk
ZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5j
bHVkZSAiSW5mZXJyZWRUeXBlSW5saW5lcy5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0SW5s
aW5lcy5oIgpAQCAtNTg2LDcgKzU4NSw2IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVNYXJrZWRVbmNv
bmRpdGlvbmFsRmkKIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJz
KCkKIHsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
VHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzKTsKICAgICBmaW5hbGl6ZU1h
cmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVmFsdWU+KHZtKCktPmluZmVycmVk
VmFsdWVzV2l0aEZpbmFsaXplcnMpOwogICAgIHZtKCktPmZvckVhY2hDb2RlQmxvY2tTcGFjZSgK
ICAgICAgICAgWyZdIChhdXRvJiBzcGFjZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4OCArNTAsNiBAQCBFeGVjdXRhYmxlQmFzZSogQXNzZW1ibHlIZWxwZXJzOjpleGVjdXRh
CiAgICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCk7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNz
ZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdFR5cGUoCi0gICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BS
UmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
VGFnUmVnaXN0ZXJzTW9kZSBtb2RlKQotewotICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3Qg
cmVzdWx0OwotCi0gICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgewotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChicmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyZWdzLCBtb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51
bWJlcihyZWdzLCB0ZW1wR1BSLCBtb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlN0cmluZzoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5n
KHJlZ3MucGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlN5bWJvbDoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3ltYm9sKHJlZ3Mu
cGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJpZ0ludDoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9k
ZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90QmlnSW50KHJlZ3MucGF5bG9h
ZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z3MsIG1vZGUpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgKLSAgICAgICAgICAgIGJyYW5jaFN0
cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBBZGRy
ZXNzKHJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAg
ICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgKLSAgICAgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBO
b3RFcXVhbCwKLSAgICAgICAgICAgICAgICBBZGRyZXNzKHJlZ3MucGF5bG9hZEdQUigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpKTsKLSAgICAgICAgb2subGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKLSAgICAgICAgSnVtcCBvayA9
IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkpOwotICAgICAgICBvay5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBBc3NlbWJseUhl
bHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlR1BSKQogewogICAgIHJldHVybiBicmFuY2gzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA1MiwxMCArMTA1Miw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXBM
aXN0IGJyYW5jaElmTm90VHlwZSgKLSAgICAgICAgSlNWYWx1ZVJlZ3MsIEdQUlJlZyB0ZW1wR1BS
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLAotICAgICAgICBUYWdSZWdpc3RlcnNN
b2RlID0gSGF2ZVRhZ1JlZ2lzdGVycyk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxl
ZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzAsOCArNDcw
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6
OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAg
ICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlk
ZW50LmltcGwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9m
ZnNldHNFeHRyYWN0b3IuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgi
CisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNSwxOCArOTA1LDE0IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoY2hhaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnN0
cnVjdHVyZUNoYWluLnNldCh2bSwgY29kZUJsb2NrLCBjaGFpbik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRp
Y19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEuZmxhZ3MgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFncygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZs
YWdzPihtZXRhZGF0YS5mbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAg
ICAgICAgICAgICAgICAgbWV0YWRhdGEub2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzIHwKLSAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0
QnlJZEZsYWdzKCkpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0gc3RhdGljX2Nh
c3Q8UHV0QnlJZEZsYWdzPihtZXRhZGF0YS5mbGFncyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjM5OTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTE0MDgsODMgKzE0MDgsNiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X3B1dF9ieV9pZCwgT3BQdXRCCiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQogICAgICMgV2Ugd2ls
bCBsb3NlIGN1cnJlbnRTdHJ1Y3R1cmVJRCBpbiB0aGUgc2hlbmFuaWdhbnMgYmVsb3cuCiAKLSAg
ICBnZXQodmFsdWUsIHQxKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQy
LCB0MykKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpmbGFnc1t0NV0sIHQxCi0KLSAg
ICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0MCAtPiBvYmplY3QgYmFzZQotICAg
ICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdzCi0gICAgIyB0MiAtPiB2YWx1ZSB0YWcKLSAgICAjIHQz
IC0+IHZhbHVlIHBheWxvYWQKLQotICAgIGJ0aW56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNr
LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIKLQotICAgICMg
V2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdo
aWNoIG9uZS4KLSAgICBhbmRpIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEKLSAgICBiaWx0
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NU
aGFuU3RyaW5nCi0KLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBT
eW1ib2wsIE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCi0gICAgYmlsdCB0MSwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmpl
Y3RPck90aGVyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCi0g
ICAgYmllcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcwotCi0gICAgIyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KLSAgICBiaWVx
IHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0ub3BQdXRCeUlkVHlwZUNo
ZWNrT3RoZXI6Ci0gICAgYmllcSB0MiwgTnVsbFRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5
cGVzCi0gICAgYmllcSB0MiwgVW5kZWZpbmVkVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
T2JqZWN0T3JPdGhlcjoKLSAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nLCBTeW1ib2wgb3IgT2Jq
ZWN0LgotICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkU2xvdwotICAgIGJpZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0g
ICAgYmllcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tTeW1ib2wKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0
QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0ub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0OgotICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlw
ZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0u
b3BQdXRCeUlkVHlwZUNoZWNrU3ltYm9sOgotICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBT
eW1ib2xUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nOgotICAgICMgV2UgYXJl
IG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVt
YmVyLgotICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tMZXNzVGhhbkludDMyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVt
YmVyLgotICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlk
VHlwZUNoZWNrTnVtYmVyCi0KLSAgICBiaWVxIHQyLCBJbnQzMlRhZywgLm9wUHV0QnlJZERvbmVD
aGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hl
Y2tOdW1iZXI6Ci0gICAgYmliIHQyLCBMb3dlc3RUYWcgKyAxLCAub3BQdXRCeUlkRG9uZUNoZWNr
aW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xl
c3NUaGFuSW50MzI6Ci0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwg
Qm9vbGVhbiwgT3RoZXIKLSAgICBiaW5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFu
LCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgotICAgIGJpZXEgdDIsIEJvb2xlYW5U
YWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwot
Ci0ub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKLSAgICBiaWVxIHQxLCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKLSAgICBqbXAgLm9w
UHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgotICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRo
U3RydWN0dXJlCi0gICAgYnRpbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKLSAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgYW5k
aSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCi0gICAgYmluZXEgdDEsIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWREb25lQ2hlY2tpbmdU
eXBlczoKICAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpuZXdTdHJ1Y3R1cmVbdDVdLCB0
MQogCiAgICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTM0NCw5MiArMTM0NCwxMSBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCCiAgICAgYmluZXEgdDIs
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRo
aXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0NSAtPiBtZXRhZGF0YQotICAgICMgdDIgLT4gY3Vy
cmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNlCi0KLSAgICBnZXQodmFs
dWUsIHQxKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQzKQotCi0gICAg
bG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6ZmxhZ3NbdDVdLCB0MQotCi0gICAgIyBBdCB0aGlz
IHBvaW50LCB3ZSBoYXZlOgotICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKLSAgICAjIHQxIC0+IHB1
dCBieSBpZCBmbGFncwogICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKLSAgICAjIHQz
IC0+IHZhbHVlIHRvIHB1dAogICAgICMgdDUgLT4gbWV0YWRhdGEKIAotICAgIGJ0cG56IHQxLCBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIKLQotICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlw
ZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KLSAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTWFzaywgdDEKLSAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9w
UHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCi0KLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzogU3RyaW5nLCBTeW1ib2wsIE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCi0g
ICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlk
VHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgT2Jq
ZWN0T3JPdGhlciBvciBUb3AuCi0gICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3As
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotCi0gICAgIyBDaGVjayBpZiB3ZSBhcmUgT2Jq
ZWN0T3JPdGhlci4KLSAgICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0Ci0ub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6Ci0gICAgYW5kcSB+VGFnQml0VW5kZWZpbmVk
LCB0MwotICAgIGJxZXEgdDMsIFZhbHVlTnVsbCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
Ci0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9i
amVjdE9yT3RoZXI6Ci0gICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZywgU3ltYm9sIG9yIE9iamVj
dC4KLSAgICBidHFueiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFNsb3cKLSAgICBicGVxIHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAotICAg
IGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sLCAub3BQdXRCeUlkVHlwZUNoZWNr
U3ltYm9sCi0gICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9wUHV0QnlJZFR5
cGVDaGVja09iamVjdDoKLSAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUs
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9w
UHV0QnlJZFR5cGVDaGVja1N5bWJvbDoKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3lt
Ym9sVHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRT
bG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKLSAgICAjIFdlIGFyZSBv
bmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJl
cgotICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBl
Q2hlY2tMZXNzVGhhbkludDMyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVy
LgotICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlw
ZUNoZWNrTnVtYmVyCi0KLSAgICBicWFlcSB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERv
bmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBl
Q2hlY2tOdW1iZXI6Ci0gICAgYnRxbnogdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25l
Q2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNo
ZWNrTGVzc1RoYW5JbnQzMjoKLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90
dG9tLCBCb29sZWFuLCBPdGhlci4KLSAgICBicG5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b29sZWFuLCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgotICAgIHhvcnEgVmFsdWVG
YWxzZSwgdDMKLSAgICBidHF6IHQzLCB+MSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0g
ICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVy
OgotICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRUeXBl
Q2hlY2tPdGhlcgotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNr
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0
QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKLSAgICBidHBueiB0MSwgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tP
dGhlcgotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0
V2l0aFN0cnVjdHVyZToKLSAgICB1cnNoaWZ0cCAzLCB0MQotICAgIGJpbmVxIHQxLCBKU0NlbGw6
Om1fc3RydWN0dXJlSURbdDNdLCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkRG9uZUNoZWNr
aW5nVHlwZXM6CiAgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0dXJlW3Q1
XSwgdDEKLSAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgogCiAgICAg
IyBUaGlzIGlzIHRoZSB0cmFuc2l0aW9uIGNhc2UuIHQxIGhvbGRzIHRoZSBuZXcgc3RydWN0dXJl
SUQuIHQyIGhvbGRzIHRoZSBvbGQgc3RydWN0dXJlIElELgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjMgKzIwNCw2IEBAIGVsc2UKICAgICBjb25z
dCBMb3dlc3RUYWcgPSBjb25zdGV4cHIgSlNWYWx1ZTo6TG93ZXN0VGFnCiBlbmQKIAotIyBQdXRC
eUlkRmxhZ3MgZGF0YQotY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IGNvbnN0ZXhwciBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrCi1jb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkg
PSBjb25zdGV4cHIgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5Ci1jb25zdCBQdXRCeUlkUHJp
bWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlID0gY29uc3RleHByIFB1dEJ5SWRQcmltYXJ5VHlw
ZU9iamVjdFdpdGhTdHJ1Y3R1cmUKLWNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyID0gY29uc3RleHByIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sgPSBjb25zdGV4
cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJv
dHRvbSA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbQotY29uc3QgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVCb29sZWFuID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9v
bGVhbgotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IGNvbnN0ZXhwciBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gY29u
c3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTnVtYmVyID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyCi1jb25zdCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVN0cmluZwotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wgPSBjb25zdGV4cHIgUHV0
QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0
ID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0Ci1jb25zdCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVP
YmplY3RPck90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IGNvbnN0ZXhwciBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVRvcAotCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IGNvbnN0ZXhw
ciBvcF9jYWxsX2xlbmd0aAogCiBjb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9
IGNvbnN0ZXhwciBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmUuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEluZmVycmVkU3RydWN0dXJlKTsKLQotSW5mZXJy
ZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJl
bnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogcGFyZW50KHBhcmVudCkKLSAgICAsIHN0
cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCi17Ci0gICAgc3RydWN0dXJlLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmd2F0Y2hwb2ludCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLSNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBJbmZlcnJlZFR5cGU7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci0KLWNsYXNz
IEluZmVycmVkU3RydWN0dXJlIGZpbmFsIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElu
ZmVycmVkU3RydWN0dXJlKTsKLXB1YmxpYzoKLSAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIElu
ZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKLQotICAgIEluZmVycmVkVHlwZSogcGFy
ZW50OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAKLSAgICBJ
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgd2F0Y2hwb2ludDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIzOTk2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLQotI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwmKQotewotICAg
IEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9Ci0gICAgICAgIGJpdHdpc2Vf
Y2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgd2F0Y2hwb2ludCkp
OwotCi0gICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFN0cnVjdHVyZS0+
cGFyZW50OwotICAgIAotICAgIGlmICghaW5mZXJyZWRUeXBlLT5pc0xpdmUoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGluZmVycmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJlKHZtKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oCShyZXZp
c2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZVdhdGNocG9pbnQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJXYXRjaHBvaW50LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbmZl
cnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Ci1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaXJlSW50ZXJuYWwoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBl
LmgiCi0KLSNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEluZmVycmVkVHlwZUZpcmVEZXRhaWwg
OiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFp
bCgKLSAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsCi0gICAgICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgb2xkRGVzY3Jp
cHRvciwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBuZXdEZXNjcmlwdG9yLAotICAg
ICAgICBKU1ZhbHVlIG9mZmVuZGluZ1ZhbHVlKQotICAgICAgICA6IG1faW5mZXJyZWRUeXBlKGlu
ZmVycmVkVHlwZSkKLSAgICAgICAgLCBtX3VpZCh1aWQpCi0gICAgICAgICwgbV9vbGREZXNjcmlw
dG9yKG9sZERlc2NyaXB0b3IpCi0gICAgICAgICwgbV9uZXdEZXNjcmlwdG9yKG5ld0Rlc2NyaXB0
b3IpCi0gICAgICAgICwgbV9vZmZlbmRpbmdWYWx1ZShvZmZlbmRpbmdWYWx1ZSkKLSAgICB7Ci0g
ICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiSW5mZXJy
ZWQgdHlwZSBjaGFuZ2VkIG9uICIsIFJhd1BvaW50ZXIobV9pbmZlcnJlZFR5cGUpLCAiIGZvciBw
cm9wZXJ0eSAiLCBtX3VpZCwgIjogIgotICAgICAgICAgICAgIm9sZCB0eXBlIHdhcyAiLCBtX29s
ZERlc2NyaXB0b3IsICIgd2hpbGUgZGVzaXJlZCB0eXBlIGlzICIsIG1fbmV3RGVzY3JpcHRvcik7
Ci0gICAgICAgIGlmIChtX29mZmVuZGluZ1ZhbHVlKQotICAgICAgICAgICAgb3V0LnByaW50KCIg
ZHVlIHRvICIsIG1fb2ZmZW5kaW5nVmFsdWUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJbmZl
cnJlZFR5cGUqIG1faW5mZXJyZWRUeXBlOwotICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4g
bV91aWQ7Ci0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fb2xkRGVzY3JpcHRvcjsKLSAg
ICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9uZXdEZXNjcmlwdG9yOwotICAgIEpTVmFsdWUg
bV9vZmZlbmRpbmdWYWx1ZTsKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNf
aW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OwotCi1JbmZlcnJlZFR5cGUqIEluZmVycmVk
VHlwZTo6Y3JlYXRlKFZNJiB2bSkKLXsKLSAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlw
ZSh2bSk7Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAg
IEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4o
Y2VsbCk7Ci0gICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsK
LX0KLQotU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJy
ZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBl
Kj4oY2VsbCk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBp
ZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKLSAgICAgICAgdmlzaXRvci52bSgpLmluZmVy
cmVkVHlwZXNXaXRoRmluYWxpemVycy5hZGQoaW5mZXJyZWRUeXBlKTsKLX0KLQotSW5mZXJyZWRU
eXBlOjpLaW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyBmbGFncykK
LXsKLSAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgewotICAgIGNh
c2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgotICAgICAgICBzd2l0Y2ggKGZsYWdzICYg
UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFy
eVR5cGVCb3R0b206Ci0gICAgICAgICAgICByZXR1cm4gQm90dG9tOwotICAgICAgICBjYXNlIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiBCb29sZWFuOwot
ICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXI6Ci0gICAgICAgICAgICByZXR1
cm4gT3RoZXI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiBJbnQzMjsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51
bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNl
Y29uZGFyeVR5cGVTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOwotICAgICAgICBj
YXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sOgotICAgICAgICAgICAgcmV0dXJuIFN5bWJv
bDsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKLSAgICAgICAgICAg
IHJldHVybiBPYmplY3Q7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RP
ck90aGVyOgotICAgICAgICAgICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7Ci0gICAgICAgIGNhc2Ug
UHV0QnlJZFNlY29uZGFyeVR5cGVUb3A6Ci0gICAgICAgICAgICByZXR1cm4gVG9wOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybiBCb3R0b207Ci0gICAgICAgIH0KLSAgICBjYXNlIFB1dEJ5SWRQcmlt
YXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHJldHVybiBPYmplY3RXaXRoU3Ry
dWN0dXJlOwotICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6Ci0gICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gQm90dG9tOwotICAgIH0KLX0KLQotSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBCb29sZWFuOwotICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gT3RoZXI7Ci0gICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEludDMyOwotICAgIGlmICh2YWx1ZS5pc051
bWJlcigpKQotICAgICAgICByZXR1cm4gTnVtYmVyOwotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
ewotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgaWYgKGNl
bGwtPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOwotICAgICAgICBpZiAo
Y2VsbC0+aXNTeW1ib2woKSkKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2w7Ci0gICAgICAgIGlm
IChjZWxsLT5pc0JpZ0ludCgpKQotICAgICAgICAgICAgcmV0dXJuIEJpZ0ludDsKLSAgICAgICAg
aWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gT2JqZWN0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBUb3A7Ci19Ci0KLUluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQotewotICAgIEtp
bmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7
Ci0gICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKLSAgICAgICAgc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIHJldHVybiBEZXNjcmlwdG9y
KGtpbmQsIHN0cnVjdHVyZSk7Ci19Ci0KLVB1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAg
ICBjYXNlIEJvdHRvbToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20p
OwotICAgIGNhc2UgQm9vbGVhbjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b29sZWFuKTsKLSAgICBjYXNlIE90aGVyOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0
QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU90aGVyKTsKLSAgICBjYXNlIEludDMyOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZUludDMyKTsKLSAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVOdW1iZXIpOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7Ci0gICAgY2FzZSBTeW1ib2w6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sKTsKLSAgICBjYXNlIE9iamVjdDoKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25k
YXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QpOwotICAgIGNhc2UgQmlnSW50OgotICAg
IGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVP
YmplY3RPck90aGVyKTsKLSAgICBjYXNlIFRvcDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVUb3ApOwotICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICBQdXRCeUlkUHJpbWFy
eVR5cGVPYmplY3RXaXRoU3RydWN0dXJlIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUt
PmlkKCkpKTsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKLSAgICAgICAgICAgIFB1dEJ5SWRQcmlt
YXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIHwgZW5jb2RlU3RydWN0dXJlSUQobV9z
dHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gUHV0QnlJZE5vbmU7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKLXsKLSAgICAvLyBGaWx0ZXIg
b3V0IGNvbW1vbiB0aGluZ3MgdG8gc2ltcGxpZnkgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVsb3cu
Ci0gICAgaWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG90aGVy
Lm1fa2luZCA9PSBCb3R0b20pCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV9raW5k
KSB7Ci0gICAgY2FzZSBCb3R0b206Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEJvb2xlYW46Ci0gICAgY2FzZSBTdHJpbmc6Ci0gICAgY2FzZSBTeW1i
b2w6Ci0gICAgY2FzZSBCaWdJbnQ6Ci0gICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBPdGhlcjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAgICAgKnRoaXMgPSBEZXNjcmlwdG9yKE9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyLCBvdGhlci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGNhc2UgT2JqZWN0OgotICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0g
ICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgSW50MzI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIu
bV9raW5kKSB7Ci0gICAgICAgIGNhc2UgTnVtYmVyOgotICAgICAgICAgICAgKnRoaXMgPSBOdW1i
ZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAq
dGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgTnVt
YmVyOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIEludDMy
OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRo
aXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZTogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3
ZSBrbm93IHRoYXQgdGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgotICAgICAgICBjYXNlIE9i
amVjdDoKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0OwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAgICAgaWYg
KG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgKnRo
aXMgPSBvdGhlcjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhl
cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAg
IG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgKnRoaXMgPSBPYmpl
Y3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE9iamVjdDoKLSAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogLy8gSWYgd2Ugc2VlIHRoaXMg
aGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgotICAg
ICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3Ro
ZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgT2JqZWN0OgotICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6Ci0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgY2FzZSBPdGhlcjoK
LSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0g
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIGNhc2UgT2Jq
ZWN0OgotICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICBjYXNlIFRvcDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUoKQotewotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICAqdGhpcyA9IE9iamVjdDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAg
ICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjpzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBEZXNjcmlw
dG9yIG1lcmdlZCA9ICp0aGlzOwotICAgIG1lcmdlZC5tZXJnZShvdGhlcik7Ci0gICAgcmV0dXJu
ICp0aGlzID09IG1lcmdlZDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgb3V0LnByaW50KG1fa2luZCk7Ci0gICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAg
ICBvdXQucHJpbnQoIjoiLCBpbkNvbnRleHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Ci19Ci0K
LXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi1JbmZlcnJlZFR5
cGU6OkluZmVycmVkVHlwZShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVT
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQot
ewotfQotCi1JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKQotewotfQotCi1ib29sIEluZmVy
cmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQotewotICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9w
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKSA9PSBleHBlY3RlZDsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICByZXR1cm4gY2FuV2F0Y2gobG9ja2VyLCBleHBlY3RlZCk7Ci19Ci0KLXZv
aWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGRl
c2NyaXB0b3IobG9ja2VyKS5raW5kKCkgIT0gVG9wKTsKLQotICAgIG1fd2F0Y2hwb2ludFNldC5h
ZGQod2F0Y2hwb2ludCk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdh
dGNocG9pbnQqIHdhdGNocG9pbnQpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKLX0KLQotdm9p
ZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOwotfQotCi1ib29sIElu
ZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBEZXNjcmlwdG9yIG9sZFR5cGU7Ci0gICAg
RGVzY3JpcHRvciBteVR5cGU7Ci0gICAgYm9vbCByZXN1bHQ7Ci0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIG9sZFR5cGUgPSBkZXNjcmlw
dG9yKGxvY2tlcik7Ci0gICAgICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVl
KTsKLQotICAgICAgICBteVR5cGUubWVyZ2Uob2xkVHlwZSk7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQob2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBp
ZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgotCi0gICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0
KGxvY2tlciwgdm0sIG15VHlwZSk7Ci0gICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBU
b3A7Ci0gICAgICAgIGlmICghc2V0UmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwodGhpcywgcHJv
cGVydHlOYW1lLnVpZCgpLCBvbGRUeXBlLCBteVR5cGUsIHZhbHVlKTsKLSAgICBtX3dhdGNocG9p
bnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQotewotICAgIERlc2NyaXB0b3Igb2xkVHlwZTsKLSAgICB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgb2xkVHlwZSA9IGRlc2NyaXB0b3Io
bG9ja2VyKTsKLSAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgVG9wKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsIGRldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUudWlkKCksIG9sZFR5cGUsIFRvcCwgSlNWYWx1ZSgpKTsKLSAgICBtX3dh
dGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGU6
OnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9y
IG5ld0Rlc2NyaXB0b3IpCi17Ci0gICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVh
bGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcu
Ci0gICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHNob3VsZEZpcmVXYXRjaHBvaW50U2V0ID0gZmFsc2U7
Ci0gICAgCi0gICAgLy8gVGhlIG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIHByZXZpb3VzIG9uZS4KLSAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhk
ZXNjcmlwdG9yKGxvY2tlcikpKTsKLQotICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2
ZSBkaWZmZXJlbnQgc3RydWN0dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBp
cyBudWxsLgotICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVz
Y3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlciku
c3RydWN0dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotCi0gICAgLy8gV2Ug
YXJlIGNoYW5naW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdh
dGNoaW5nLCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0IG5vdy4gSWYKLSAgICAvLyBhbnlvbmUgaXMg
d2F0Y2hpbmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0
aGlzIHNvcnQgb2YgdGhpbmcgYWdhaW4uCi0gICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgp
ICE9IENsZWFyV2F0Y2hwb2ludCkgewotICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGlu
dmFsaWRhdGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3Au
Ci0gICAgICAgIEFTU0VSVChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KTsKLQotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1
c2Ugc29tZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCi0g
ICAgICAgIC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0
eSBpcyBjcmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgotICAgICAg
ICAvLyBpdC4KLSAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKLQotICAgICAgICBzaG91bGRG
aXJlV2F0Y2hwb2ludFNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpKQotICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJy
ZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICB9
Ci0KLSAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KLSAgICBtX2tpbmQg
PSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKLQotICAgIC8vIEFzc2VydCB0aGF0IHdlIGRpZCB0aGlu
Z3MuCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKTsKLQot
ICAgIHJldHVybiBzaG91bGRGaXJlV2F0Y2hwb2ludFNldDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5
cGU6OnJlbW92ZVN0cnVjdHVyZShWTSYgdm0pCi17Ci0gICAgLy8gRklYTUU6IEZpbmQgYW4gZWxl
Z2FudCBhbmQgY2hlYXAgd2F5IHRvIHRocmVhZCBpbmZvcm1hdGlvbiBhYm91dCB3aHkgd2UgZ290
IGhlcmUgaW50byB0aGUgZmlyZQotICAgIC8vIGRldGFpbCBpbiBzZXQoKS4KLSAgICAKLSAgICBE
ZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7Ci0gICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yOwot
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAg
ICBvbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBuZXdEZXNjcmlw
dG9yID0gb2xkRGVzY3JpcHRvcjsKLSAgICAgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1
cmUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0
b3IpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEluZmVycmVkVHlwZUZpcmVE
ZXRhaWwgZGV0YWlsKHRoaXMsIG51bGxwdHIsIG9sZERlc2NyaXB0b3IsIG5ld0Rlc2NyaXB0b3Is
IEpTVmFsdWUoKSk7Ci0gICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVk
VHlwZTo6S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb3R0b206Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgb3V0LnByaW50
KCJCb29sZWFuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6Ci0gICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgb3V0
LnByaW50KCJOdW1iZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpTdHJpbmc6Ci0gICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICBvdXQucHJpbnQoIlN5bWJv
bCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAg
ICAgICAgb3V0LnByaW50KCJCaWdJbnQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBvdXQucHJpbnQoIk9iamVj
dFdpdGhTdHJ1Y3R1cmUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgotICAgICAgICBvdXQu
cHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpUb3A6Ci0gICAgICAgIG91dC5wcmludCgiVG9wIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXVEYKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVHlwZS5oCShub25leGlzdGVudCkKQEAgLTEsMjc1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKLSNpbmNsdWRlICJJbmZlcnJl
ZFN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKLSNpbmNsdWRlICJKU0Nhc3Qu
aCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIK
LSNpbmNsdWRlICJXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBUaGlzIGlzIGFuIG9iamVjdCB1c2VkIGZv
ciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJvcGVydGllcy4KLQotY2xh
c3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICZ2bS5pbmZlcnJlZFR5cGVTcGFjZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSW5mZXJy
ZWRUeXBlKiBjcmVhdGUoVk0mKTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0gICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0K
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKLSAgICAgICAg
Qm90dG9tLAotICAgICAgICBCb29sZWFuLAotICAgICAgICBPdGhlciwKLSAgICAgICAgSW50MzIs
Ci0gICAgICAgIE51bWJlciwKLSAgICAgICAgU3RyaW5nLAotICAgICAgICBTeW1ib2wsCi0gICAg
ICAgIEJpZ0ludCwKLSAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKLSAgICAgICAgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXIsCi0gICAgICAgIE9iamVjdCwKLSAgICAgICAgT2JqZWN0T3JP
dGhlciwKLSAgICAgICAgVG9wCi0gICAgfTsKLQotICAgIHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFn
cyhQdXRCeUlkRmxhZ3MpOwotICAgIAotICAgIHN0YXRpYyBib29sIGhhc1N0cnVjdHVyZShLaW5k
IGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEZXNjcmlwdG9y
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIERlc2NyaXB0b3IoKQotICAgICAgICAgICAgOiBtX2tp
bmQoQm90dG9tKQotICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBudWxscHRyKQotICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKLSAgICAgICAg
ICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
aGFzU3RydWN0dXJlKGtpbmQpKQotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7
Ci0KLSAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yRmxhZ3MoVk0mLCBQdXRCeUlkRmxhZ3Mp
OwotCi0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9raW5kICE9IEJvdHRvbSB8fCBtX3N0cnVjdHVyZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9
Ci0KLSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFncygpIGNvbnN0OwotCi0gICAgICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEJvdHRv
bToKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIEJvb2xl
YW46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOwotICAgICAgICAg
ICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKTsKLSAgICAgICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSW50MzIoKTsKLSAgICAgICAgICAgIGNhc2UgTnVtYmVyOgotICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigpOwotICAgICAgICAgICAgY2FzZSBTdHJpbmc6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3RyaW5nKCk7Ci0gICAgICAgICAgICBjYXNl
IFN5bWJvbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTeW1ib2woKTsKLSAgICAg
ICAgICAgIGNhc2UgQmlnSW50OgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0JpZ0lu
dCgpOwotICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkg
PT0gbV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCi0g
ICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgY2FzZSBPYmplY3Q6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7Ci0gICAgICAgICAgICBjYXNl
IE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKLSAgICAgICAgICAgIGNhc2UgVG9wOgotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAotICAgICAgICAgICAgICAgICYm
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9raW5kKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IERlc2NyaXB0b3ImKTsKLSAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKLQot
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJh
bCB0aGFuIHRoZSBvdGhlciBvbmUuCi0gICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3Jp
cHRvciYpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYs
IER1bXBDb250ZXh0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgS2luZCBtX2tpbmQ7Ci0gICAgICAgIFN0cnVj
dHVyZSogbV9zdHJ1Y3R1cmU7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2smIGxvY2so
KSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1h
aW5UaHJlYWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5k
LCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBudWxscHRyKTsK
LSAgICB9Ci0gICAgCi0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGVzY3JpcHRvck1haW5UaHJl
YWQoKTsKLSAgICB9Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJu
IGRlc2NyaXB0b3IobG9ja2VyKTsKLSAgICB9Ci0gICAgCi0gICAgS2luZCBraW5kKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKGxvY2tl
cikua2luZCgpOyB9Ci0KLSAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09
IFRvcDsgfQotICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBU
b3A7IH0KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxs
IHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3Au
Ci0gICAgQUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIERlc2NyaXB0
b3IgY3VycmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOwotICAgICAgICBp
ZiAoY3VycmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gY3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKLSAgICAgICAgcmV0dXJuIHdp
bGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAg
Ly8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCi0gICAgdm9pZCBtYWtl
VG9wKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLSAgICB7Ci0gICAgICAgIGlm
IChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtYWtlVG9wU2xvdyh2bSwg
cHJvcGVydHlOYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVu
dGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2Ny
aXB0b3IuIE5vdGUgdGhhdAotICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZv
ciBUb3AuCi0gICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBEZXNjcmlwdG9yJik7Ci0gICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7Ci0g
ICAgCi0gICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFdh
dGNocG9pbnQqKTsKLSAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwotCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseShWTSYpOwotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZShWTSYpOwot
ICAgIH5JbmZlcnJlZFR5cGUoKTsKLQotICAgIGJvb2wgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKLSAgICB2b2lkIG1ha2VUb3BTbG93KFZNJiwgUHJvcGVy
dHlOYW1lKTsKLQotICAgIC8vIEhlbHBlciBmb3Igd2lsbFN0b3JlVmFsdWVTbG93KCkgYW5kIG1h
a2VUb3BTbG93KCkuIFRoaXMgcmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBmaXJlIHRoZQotICAg
IC8vIHdhdGNocG9pbnQgc2V0LgotICAgIGJvb2wgc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFZNJiwgRGVzY3JpcHRvcik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoVk0m
KTsKLSAgICAKLSAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmU7Ci0gICAgZnJpZW5k
IGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLQotICAgIG11dGFibGUgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7Ci0gICAgCi0gICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQb2lzb25lZC4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNzE1Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLQotICAgIC8vIE5PVEU6IElmIHRoaXMg
aXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGll
cyB0aGF0IGl0IHdvdWxkbid0IGJlCi0gICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fp
bi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBv
c2VkIHRvIHRoZSBERkcKLSAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVy
cmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgotICAgIElubGluZVdhdGNocG9p
bnRTZXQgbV93YXRjaHBvaW50U2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVz
cGFjZSBXVEYgewotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVy
cmVkVHlwZTo6S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZUlubGluZXMuaAkocmV2aXNp
b24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
SW5saW5lcy5oCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgdm9pZCBJ
bmZlcnJlZFR5cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKLXsKLSAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWQodGhpcykpOwotICAgIAotICAgIGlmIChtX3N0cnVjdHVyZSkgewot
ICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICByZW1vdmVTdHJ1Y3R1cmUo
dm0pOwotICAgIH0KLSAgICAKLSAgICB2bS5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMucmVt
b3ZlKHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNp
b24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNf
aW5mbyA9IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKLQotSW5mZXJyZWRUeXBl
VGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQotewotICAgIEluZmVycmVk
VHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5
cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKLSAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEluZmVycmVk
VHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZlcnJlZFR5cGVUYWJs
ZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNl
bGwpOwotICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVk
VHlwZVRhYmxlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJy
ZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKLSAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhpbmZlcnJlZFR5cGVUYWJsZS0+Y2VsbExvY2soKSk7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IGluZmVycmVkVHlwZVRhYmxlLT5tX3RhYmxlKSB7Ci0gICAgICAgIGF1dG8gZW50
cnlWYWx1ZSA9IGVudHJ5LnZhbHVlOwotCi0gICAgICAgIGlmICghZW50cnlWYWx1ZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnlWYWx1ZS0+aXNSZWxldmFudCgpKQot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnlWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGVudHJ5LnZhbHVlLmNsZWFyKCk7Ci0gICAgfQotfQotCi1JbmZlcnJlZFR5cGUq
IEluZmVycmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOwotICAg
IGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgSW5mZXJyZWRUeXBlKiBlbnRyeVZhbHVlID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgaWYg
KCFlbnRyeVZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRha2UgdGhp
cyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KLSAgICBpZiAoIWVudHJ5
VmFsdWUtPmlzUmVsZXZhbnQoKSkgewotICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlWYWx1ZTsKLX0K
LQotSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAgICBy
ZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsKLX0KLQotSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVU
YWJsZTo6Z2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIGdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOwotfQotCi1ib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3Rv
cmVWYWx1ZSgKLSAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKLXsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIGhl
cmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBo
YXNoIG1hcC4KLSAgICAKLSAgICBpZiAoYWdlID09IFN0b3JlZFByb3BlcnR5QWdlOjpPbGRQcm9w
ZXJ0eSkgewotICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4K
LQotICAgICAgICBJbmZlcnJlZFR5cGUqIGVudHJ5VmFsdWUgPSBpdGVyLT52YWx1ZS5nZXQoKTsK
LSAgICAgICAgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGVudHJ5VmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAg
ICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFRhYmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7Ci0gICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRk
KHByb3BlcnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7Ci0gICAg
fQotICAgIEluZmVycmVkVHlwZSogZW50cnlWYWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0KCk7Ci0KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgSW5mZXJyZWRU
eXBlKiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7Ci0gICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0
KHZtLCB0aGlzLCBpbmZlcnJlZFR5cGUpOwotICAgICAgICBlbnRyeVZhbHVlID0gaW5mZXJyZWRU
eXBlOwotICAgIH0gZWxzZSBpZiAoIWVudHJ5VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBpZiAoZW50cnlWYWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmNsZWFyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluZmVycmVk
VHlwZVRhYmxlOjptYWtlVG9wKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgU3Rv
cmVkUHJvcGVydHlBZ2UgYWdlKQotewotICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMg
b24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgot
ICAgIGlmIChhZ2UgPT0gU3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5KSB7Ci0gICAgICAg
IFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlk
KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgotCi0gICAgICAgIEluZmVycmVkVHlw
ZSogZW50cnlWYWx1ZSA9IGl0ZXItPnZhbHVlLmdldCgpOwotCi0gICAgICAgIGlmICghZW50cnlW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBlbnRyeVZhbHVlLT5tYWtlVG9w
KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OwotICAg
IHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAgICAgICAg
cmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5m
ZXJyZWRUeXBlPigpKTsKLSAgICB9Ci0gICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRv
cCh2bSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7
Ci19Ci0KLUluZmVycmVkVHlwZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZShWTSYgdm0pCi0gICAg
OiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5nZXQoKSkKLXsKLX0KLQot
SW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpCi17Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGVUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZVRhYmxlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgotI2luY2x1ZGUgIkpTQ2FzdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8g
QSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBK
U0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQotLy8gZGVzdHJ1Y3Rv
ciBhbmQgbWFrZXMgbGlmZXRpbWUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNl
IGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZwotLy8gY2Fubm90IGJlIGRlbGV0
ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVy
dHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcwotLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZl
cnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5
b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCi0vLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21l
IFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMg
b2YgcHJvcGVydGllcyBmcm9tCi0vLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBz
dHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCi0KLWNsYXNzIElu
ZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRl
KFZNJik7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
LSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsOwotICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotCi0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgREVDTEFSRV9J
TkZPOwotCi0gICAgLy8gR2V0IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVs
bHB0ciBmb3IgYm90aCBUb3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCi0g
ICAgLy8gb3duaW5nIFN0cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5Lgot
ICAgIEluZmVycmVkVHlwZSogZ2V0KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKLSAgICBJbmZlcnJlZFR5cGUqIGdldChVbmlxdWVkU3RyaW5nSW1wbCopOwotICAg
IEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5TmFtZSk7Ci0KLSAgICBlbnVtIGNsYXNzIFN0b3Jl
ZFByb3BlcnR5QWdlIHsgTmV3UHJvcGVydHksIE9sZFByb3BlcnR5IH07Ci0gICAgCi0gICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3Rp
bGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAotICAgIC8vIHJlbGV2YW50IGlm
IGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9w
IGVudHJpZXMuCi0gICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOwotCi0gICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUg
Zm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVj
dGl2ZSBjb250ZXh0LgotICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVk
UHJvcGVydHlBZ2UpOwotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7Ci0g
ICAgfkluZmVycmVkVHlwZVRhYmxlKCk7Ci0KLSAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0
YWJsZS4KLSAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFu
dCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCi0gICAgLy8KLSAgICAvLyBXZSBrbm93IGhvdyB0
byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRl
cGVuZGluZyBvbiB3aGV0aGVyIHRoZQotICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhl
IG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJz
ZW5jZSBtYXkgaGF2ZQotICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRo
aXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUg
cHJvcGVydHkKLSAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25z
OiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQot
ICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUg
c3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSksIHRoZW4KLSAgICAvLyBh
YnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0
IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCi0gICAgLy8gUzIsIHNo
YXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlh
bGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5Ci0gICAgLy8gd2FudCB0byBhZGQgUCB3
aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUuIElm
IFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQotICAgIC8vIHRvIGluZGljYXRlIFRvcCwgdGhl
biBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBlbmQg
dXAgY3JlYXRpbmcgYSBub24tVG9wCi0gICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMx
IHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0eXBl
LiBDbGVhcmx5LAotICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5
IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwK
LSAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3IgcHJv
cGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcwotICAgIC8vIGNy
ZWF0ZWQuCi0gICAgdXNpbmcgVGFibGVUeXBlID0gSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmlu
Z0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPiwgSWRlbnRpZmllclJlcEhhc2g+Owot
Ci0gICAgVGFibGVUeXBlIG1fdGFibGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSlNJbnRlcm5hbFByb21pc2U7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDsKK2NsYXNzIEpTTW9kdWxlUmVjb3JkOwogY2xhc3MgU291cmNlQ29kZTsKIAogY2xhc3MgSlNN
b2R1bGVMb2FkZXIgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNp
b24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCBpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSB0
aGlzLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3RydWN0dXJlKTsKLSAgICBib29sIHNob3Vs
ZE9wdGltaXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1Ry
YW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CkBAIC0yODEsNyArMjc5LDYgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoaW5kZXhp
bmdNb2RlKCkpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMo
KSk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgY3VycmVudEF0dHJpYnV0ZXMpOwpAQCAtMzE4LDkgKzMxNSw2IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKICAg
ICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiAgICAg
aWYgKG5ld1N0cnVjdHVyZSkgewotICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVl
Rm9yRXhpc3RpbmdUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAg
IAogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAg
ICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewogICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUo
dm0pKTsKQEAgLTM0MSwxOCArMzM1LDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW4KICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAg
ICBib29sIGhhc0luZmVycmVkVHlwZTsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRl
cyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9k
ZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1
cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoaGFz
SW5mZXJyZWRUeXBlKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZv
clJlcGxhY2UoCi0gICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qu
Y29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgIH0KLQogICAg
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCiAgICAgICAgIGlmICgoYXR0cmli
dXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpICE9IChjdXJyZW50QXR0cmlidXRlcyAm
IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpKSB7CkBAIC0zNzQsOCAr
MzYyLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIAog
ICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAog
ICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwg
c2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKLSAgICBuZXdTdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAgdm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7
CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEs
MTUgKzM3MSwxMSBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvCiAg
ICAgaWYgKHNldFByb3BlcnR5VGFibGUpCiAgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUo
dm0sIHRhYmxlKTsKIAotICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVy
cmVkVHlwZVRhYmxlLmdldCgpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAg
IGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZp
b3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblBy
ZXZpb3VzKCkpOwotICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVj
dHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCi0gICAgICAgICAgICBlbnRyeS5oYXNJbmZl
cnJlZFR5cGUgPSB0cnVlOwogICAgICAgICB0YWJsZS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBA
IC01MDMsNyArNDk5LDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJh
bgogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwog
ICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9
IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJs
ZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVU
YWJsZS5nZXQoKSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcyk7CiAKQEAgLTUzNiwxMiArNTMxLDYgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbgogICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEg
cGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRv
IGhhbmRsZSBjYWNoZWQKICAgICAvLyAgIHJlbW92YWxzLgogICAgIC8vCi0gICAgLy8gLSBJbmZl
cnJlZFR5cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVuZWQuIFRo
aXMgaXMgaW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCi0gICAgLy8gICByZW1vdmUgYSBwcm9w
ZXJ0eSBhbmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1lYW5zIHRv
cCIgb3B0aW1pemF0aW9uIHdvdWxkbid0Ci0gICAgLy8gICB3b3JrIGFueW1vcmUsIHVubGVzcyBy
ZW1vdmFsIGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2luZyBzb21l
dGhpbmcgZXF1aXZhbGVudCB0bwotICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9yIGJ5IHN0
cm9uZ2x5IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0IGlzIG5v
dCBhYnNlbnQsIGJ1dAotICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4KLSAgICAK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSk7CkBAIC04OTIsNDMgKzg4MSw2IEBAIHZvaWQgU3RydWN0dXJlOjpz
dGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGll
cyh0cnVlKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKLSAgICBW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkT3B0aW1pemUsCi0gICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFn
ZSkKLXsKLSAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0
cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgQVNTRVJUKCFoYXNCZWVu
RGljdGlvbmFyeSgpKTsKLQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVk06OmNhblVzZUpJVCgp
LCAiV2UgZG9uJ3Qgd2FudCB0byB1c2UgbWVtb3J5IGZvciBpbmZlcnJlZCB0eXBlcyB1bmxlc3Mg
d2UncmUgdXNpbmcgdGhlIEpJVC4iKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlw
ZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBh
ZnRlciB3ZSBoYXZlIGFscmVhZHkKLSAgICAvLyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRoZSBw
cm9wZXJ0eSBtYXAuCi0gICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5
cGVUYWJsZS5nZXQoKTsKLSAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gSW5mZXJy
ZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
Ci0gICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxl
LgotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxl
KHZtKTsKLSAgICAKLSAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcg
Y3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNl
bnQKLSAgICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgotICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFt
ZS51aWQoKSk7Ci0gICAgQVNTRVJUKGVudHJ5KTsKLSAgICAKLSAgICBpZiAoc2hvdWxkT3B0aW1p
emUpCi0gICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0b3JlVmFs
dWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRh
YmxlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUsIGFnZSk7Ci0gICAgICAgIGVudHJ5LT5oYXNJ
bmZlcnJlZFR5cGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcHJvcGVydHlUYWJsZS0+dXNl
KCk7IC8vIFRoaXMgbWFrZXMgaXQgc2FmZSB0byB1c2UgZW50cnkgYWJvdmUuCi19Ci0KICNpZiBE
VU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3Bl
cnR5TWFwSGFzaFRhYmxlU3RhdHMgPSAwOwpAQCAtMTA5OSw4ICsxMDUxLDYgQEAgdm9pZCBTdHJ1
Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2UgaWYgKHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmNsZWFyKCk7Ci0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdH
QygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDbGFzc0luZm8u
aCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBl
LmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC03NiwxMyAr
NzUsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRl
czsKLSAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBu
b3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0
YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxs
cHRyKQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0
ZXMoMCkKLSAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAg
ICAKQEAgLTkwLDcgKzg3LDYgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6
IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCi0gICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAt
NDM1LDcgKzQzMSw2IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFBy
b3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCYgYXR0cmlidXRlcyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAog
ICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2Fs
bCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1
cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxk
IG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNjA1LDU1ICs2MDAsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXModm0pOwogICAgIH0KICAgICAK
LSAgICBib29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
ICEhbV9pbmZlcnJlZFR5cGVUYWJsZTsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZUZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgaWYgKElu
ZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdGFibGUtPmdldCh1aWQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRGVzY3Jp
cHRvckZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgaWYgKEluZmVy
cmVkVHlwZSogcmVzdWx0ID0gaW5mZXJyZWRUeXBlRm9yKHVpZCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0LT5kZXNjcmlwdG9yKCk7Ci0gICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRv
cDsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIHRoaXMgd2hlbiB3ZSBrbm93IHRoYXQgdGhpcyBpcyBh
IGJyYW5kIG5ldyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGl0J3Mgbm90IGVub3VnaCBmb3IgdGhlCi0g
ICAgLy8gcHJvcGVydHkgdG8gYmUgYnJhbmQgbmV3IHRvIHNvbWUgb2JqZWN0LiBJdCBoYXMgdG8g
YmUgYnJhbmQgbmV3IHRvIHRoZSBTdHJ1Y3R1cmUuCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHdp
bGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQotICAg
IHsKLSAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6ZSAm
JiAhbV9pbmZlcnJlZFR5cGVUYWJsZSkgfHwgIVZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdl
OjpOZXdQcm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGlzIHdoZW4gd2Uga25vdyB0
aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHkgZm9yIHRoZSBvYmplY3QsIGJ1dCBub3QgbmV3IGZv
ciB0aGUKLSAgICAvLyBzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdW5kZXIgdGhlIEluZmVycmVkVHlw
ZVRhYmxlJ3MgcnVsZXMsIGFic2VuY2Ugb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlCi0gICAgLy8g
dGFibGUgbWVhbnMgVG9wIHJhdGhlciB0aGFuIEJvdHRvbS4KLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgd2lsbFN0b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRpb24oCi0gICAgICAgIFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRp
bWl6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICFtX2luZmVy
cmVkVHlwZVRhYmxlIHx8ICFWTTo6Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxk
T3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZTo6TmV3UHJvcGVy
dHkpOwotICAgIH0KLQotICAgIC8vIENhbGwgdGhpcyB3aGVuIHdlIGtub3cgdGhhdCB0aGUgaW5m
ZXJyZWQgdHlwZSB0YWJsZSBleGlzdHMgYW5kIGhhcyBhbiBlbnRyeSBmb3IgdGhpcyBwcm9wZXJ0
eS4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAotICAg
ICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkT3B0aW1pemUpCi0gICAgewotICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnko
KSB8fCAhVk06OmNhblVzZUpJVCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aWxs
U3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJ
bmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5KTsKLSAgICB9
Ci0KICAgICBSZWY8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSwgYm9v
bCYgc2F3UG9seVByb3RvU3RydWN0dXJlKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKQEAgLTgwMCw5ICs3NDYsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyhWTSYpOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coCi0gICAgICAgIFZNJiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOwot
CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0g
NTEyOwogCkBAIC04MzMsOCArNzc2LDYgQEAgcHJpdmF0ZToKICAgICAvLyBEdXJpbmcgYSBIZWFw
IFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRv
IHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5z
YWZlOwogCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlw
ZVRhYmxlOwotCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldh
dGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8
IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCwxOCArMTIwLDExIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnN0b3IKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgcmV0dXJuIGdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworICAgIHJldHVy
biBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiB9CiAgICAgCiBBTFdBWVNfSU5M
SU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7Ci0gICAgYm9vbCBoYXNJbmZlcnJl
ZFR5cGU7Ci0gICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJ
bmZlcnJlZFR5cGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJp
YnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKLXsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRp
b25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGlu
Zm8oKSk7CiAKQEAgLTE0NCw3ICsxMzcsNiBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6CiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmli
dXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5o
YXNJbmZlcnJlZFR5cGU7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNiBAQAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3
ZWVwZXIuaCIKICNpbmNsdWRlICJJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAi
SW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpA
QCAtMzAzLDcgKzMwMiw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBjZWxsRGFuZ2Vyb3VzQml0c0hlYXBDZWxsVHlwZS5nZXQoKSwgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZSkKICAgICAsIGZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTRnVuY3Rpb24pCiAgICAgLCBn
ZW5lcmF0b3JGdW5jdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVl
T09CSGVhcENlbGxUeXBlLmdldCgpLCBKU0dlbmVyYXRvckZ1bmN0aW9uKQotICAgICwgaW5mZXJy
ZWRUeXBlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBD
ZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRUeXBlKQogICAgICwgaW5mZXJyZWRWYWx1ZVNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCks
IEluZmVycmVkVmFsdWUpCiAgICAgLCBpbnRlcm5hbEZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBJbnRlcm5h
bEZ1bmN0aW9uKQogI2lmIEVOQUJMRShJTlRMKQpAQCAtMzM0LDcgKzMzMiw2IEBAIFZNOjpWTShW
TVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgICwgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZVNwYWNlKQogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyhl
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCi0gICAgLCBpbmZlcnJlZFR5cGVzV2l0aEZp
bmFsaXplcnMoaW5mZXJyZWRUeXBlU3BhY2UpCiAgICAgLCBpbmZlcnJlZFZhbHVlc1dpdGhGaW5h
bGl6ZXJzKGluZmVycmVkVmFsdWVTcGFjZSkKICAgICAsIGV2YWxDb2RlQmxvY2tTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBF
dmFsQ29kZUJsb2NrKQogICAgICwgZnVuY3Rpb25Db2RlQmxvY2tTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkNv
ZGVCbG9jaykKQEAgLTQyNyw4ICs0MjQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQo
KnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwotICAgIGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVkVHlwZVRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgq
dGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVE
YXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhjZXB0aW9u
U3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Nyw3ICszNzcsNiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7
CiAgICAgSXNvU3Vic3BhY2UgZ2VuZXJhdG9yRnVuY3Rpb25TcGFjZTsKLSAgICBJc29TdWJzcGFj
ZSBpbmZlcnJlZFR5cGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFZhbHVlU3BhY2U7
CiAgICAgSXNvU3Vic3BhY2UgaW50ZXJuYWxGdW5jdGlvblNwYWNlOwogI2lmIEVOQUJMRShJTlRM
KQpAQCAtNDA5LDcgKzQwOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBJc29DZWxsU2V0IGV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzOwogICAgIElzb0NlbGxTZXQgZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsKLSAgICBJc29DZWxsU2V0IGlu
ZmVycmVkVHlwZXNXaXRoRmluYWxpemVyczsKICAgICBJc29DZWxsU2V0IGluZmVycmVkVmFsdWVz
V2l0aEZpbmFsaXplcnM7CiAgICAgCiAgICAgc3RydWN0IFNwYWNlQW5kRmluYWxpemVyU2V0IHsK
QEAgLTU1MSw4ICs1NDksNiBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJl
ZFR5cGVTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVT
dHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359187</attachid>
            <date>2019-01-15 11:53:21 -0800</date>
            <delta_ts>2019-01-15 13:08:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>174425</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5OTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxOS0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBUcnkgcmlwcGluZyBvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCBtaWdodCBiZSBhIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwkKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIGluZmVycmVkIHR5cGVzIGZyb20gSlND
LiBJbml0aWFsIGV2aWRlbmNlIHNob3dzIHRoYXQKKyAgICAgICAgdGhpcyBtaWdodCBiZSBhcm91
bmQgYSB+MSUgc3BlZWR1cCBvbiBTcGVlZG9tZXRlcjIgYW5kIEpldFN0cmVhbTIuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0Zp
dHMuaDoKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwOgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXF1aXJlZFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFs
bHlBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxW
YWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9y
OjphZGQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9yOjpkdW1wSW5D
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVnaXN0ZXJJbmZlcnJlZFR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3JQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNoZWNrSW5mZXJyZWRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBnZW5lcmF0b3IvRFNM
LnJiOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGpp
dC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZUlubGluZXMuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
dW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU1hcEVudHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uaDoKKwogMjAxOS0wMS0xNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgb3B0aW9uIHRvIEpTQyB0byBkdW1wIG1lbW9yeSBmb290cHJpbnQgb24g
c2NyaXB0IGNvbXBsZXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzkzLDEwICs3OTMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9JbmRleGluZ0hlYWRlci5oCiAgICAg
cnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZXMuaAogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBl
LmgKLSAgICBydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKLSAgICBydW50aW1lL0luZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludC5oCi0gICAgcnVudGltZS9JbmZlcnJlZFR5cGUuaAotICAgIHJ1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAogICAgIHJ1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCiAg
ICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmgKICAgICBydW50aW1lL0ludDE2QXJyYXku
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjM5OTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNDQs
NyArMzQ0LDYgQEAgZGZnL0RGR0dyYXBoLmNwcAogZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNwcAog
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAK
LWRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKIGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwCiBk
ZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiBkZmcvREZHSW50ZWdlclJhbmdl
T3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC03NjgsMTAgKzc2Nyw2IEBAIHJ1bnRpbWUvSGFzaE1h
cEltcGwuY3BwCiBydW50aW1lL0lkZW50aWZpZXIuY3BwCiBydW50aW1lL0luZGV4aW5nVHlwZS5j
cHAKIHJ1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAKLXJ1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmUuY3BwCi1ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKLXJ1
bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAotcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKIHJ1
bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAKIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAK
IHJ1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9VbmlmaWVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyArMzIzLDYgQEAg
JChTUkNST09UKS9kZmcvREZHR3JhcGguY3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdHcmFwaFNhZmVw
b2ludC5jcHAKICQoU1JDUk9PVCkvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICQoU1JDUk9PVCkv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAotJChTUkNST09UKS9kZmcvREZHSW5mZXJy
ZWRUeXBlQ2hlY2suY3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdJbnNlcnRpb25TZXQuY3BwCiAkKFNS
Q1JPT1QpL2RmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICQoU1JDUk9PVCkv
ZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtNzMyLDEwICs3MzEs
NiBAQCAkKFNSQ1JPT1QpL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCiAkKFNSQ1JPT1QpL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAKICQoU1JDUk9PVCkvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAk
KFNSQ1JPT1QpL3J1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAKLSQoU1JDUk9PVCkv
cnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAKLSQoU1JDUk9PVCkvcnVudGltZS9JbmZlcnJl
ZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCi0kKFNSQ1JPT1QpL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmNwcAotJChTUkNST09UKS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAogJChTUkNST09U
KS9ydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCiAkKFNSQ1JPT1QpL3J1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKICQoU1JDUk9PVCkvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25PYmplY3QuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNiBAQAogCQkw
RjA3MEE0OTFENTQzQTkzMDA2RTcyMzIgLyogSGVhcENlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3MEE0NDFENTQzQTg5MDA2RTcy
MzIgLyogSGVhcENlbGxJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYwNzBBNEIxRDU0M0E5ODAwNkU3MjMyIC8qIExhcmdlQWxsb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
NzBBNDYxRDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMDc3NkJGMTRGRjAwMkIwMDEw
MjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBp
bGF0aW9uRWZmb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQTc1MjExQjk0QkZB
OTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBCMjg2QTFFQjhFNkNEMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEIyODZEMUVCOEU2RDUwMDBF
QjVEMiAvKiBKU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjI4NjgxRUI4RTZDRDAwMEVCNUQyIC8qIEpT
TWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBC
ODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTA4LDcgKzUwNyw2IEBACiAJCTBGQjQ2
NzdGMUZEREE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggKi87IH07CiAJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxs
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ2NzgxMUZEREE2RjcwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggKi87IH07Ci0JCTBGQjQ2Nzg1MUZERkI0NTQwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5saW5lcy5oICovOyB9OwogCQkw
RkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVy
cmFsQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCAqLzsgfTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtNTM0
LDggKzUzMiw2IEBACiAJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuaCAqLzsgfTsKIAkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkUwRjcwMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi87IH07
CiAJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkYxNThCMTlCN0E1
MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCAqLzsgfTsKLQkJMEZCRjkyQjkxRkQ3
NkZGRjAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJGOTJCODFGRDc2RkZDMDBBQzI4QTggLyogSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkJGOTJCQTFGRDc3MDA0MDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkJGOTJCNzFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZD
MDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggKi87IH07CiAJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVu
a3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5
N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLzsgfTsKIAkJMEZDMjBDQjYxODUy
RTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzIwQ0I0MTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggKi87IH07CkBAIC01NDgsNyArNTQ0LDYg
QEAKIAkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
NzEyREQxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkUz
MTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1
MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYw
MyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDODQxNjkxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVy
cmVkVHlwZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkM4NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAq
LzsgfTsKIAkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5oICovOyB9OwogCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxh
Y2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkM5N0YzQTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IH07CkBA
IC03MzYsOCArNzMxLDYgQEAKIAkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4
aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmggKi87IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87
IH07CiAJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzBEQUQwMzBGQjFF
QjFBMDA4MkQyMDUgLyogTm9kZUNvbnN0cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJ
bmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZGQzky
MTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcx
REQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CiAJCTBGRkM5MjE2MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQ
cm9wZXJ0eVR5cGVLZXkuaCAqLzsgfTsKIAkJMEZGQzk5RDExODRFQzhBRDAwOUMxMEFCIC8qIENv
bnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkM5OUQ1MTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQzMTg0RUUzMTgwMDlDMTBB
QiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA1MCw4ICsyMDQzLDYgQEAKIAkJMEYw
NzBBNDUxRDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXJnZUFsbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjA3MEE0NjFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxv
Y2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhcmdlQWxsb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIz
MzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCMjg2NzFFQjhFNkNEMDAwRUI1RDIgLyog
SlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjBCMjg2ODFFQjhFNkNEMDAwRUI1RDIgLyogSlNNYXJraW5nQ29u
c3RyYWludFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYXJr
aW5nQ29uc3RyYWludFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
QjI4NjkxRUI4RTZDRDAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWFrUHJpdmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNzA2LDcgKzI2OTcsNiBAQAogCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI3NDYsMTAgKzI3MzYsNiBAQAogCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyog
REZHVW5pZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdVbmlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJGMTU4QTE5QjdBNTMxMDA2OTVERDAgLyog
REZHQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QmxvY2tTZXQuY3BwOyBwYXRoID0gZGZnL0RGR0Jsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9ja1NldElubGlu
ZXMuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEZCRjkyQjUxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZl
cnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRkJGOTJCNjFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkJGOTJCNzFGRDc2RkZDMDBBQzI4QTggLyog
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkJGOTJCODFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRTdHJ1Y3R1cmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhp
dC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdDb21tb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3OEUxNDZBNkY2MzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRXhpdC5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNzcyLDggKzI3NTgsNiBAQAogCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5
M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1
cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA5MTQw
NDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luZmVycmVk
VHlwZUNoZWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJ
bmZlcnJlZFR5cGVDaGVjay5oOyBwYXRoID0gZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zMDg5LDkgKzMwNzMsNiBAQAogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
eXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0
OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCODBC
QjIwQTc5NDcwMDAwNkFBRjYgLyogSklUQ29kZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUQ29kZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2
IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRkM5
MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0aCA9
IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGVydHlUeXBlS2V5Lmg7IHBhdGgg
PSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmlu
Z1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY3NDcsMTUgKzY3MjgsNiBAQAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQkxNDM4NkE3NjFERDY5ODlDMDA4NjUyQzQgLyogSW5k
aXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0
IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCAqLywKLQkJCQkwRkJGOTJCNjFGRDc2RkZDMDBB
QzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwICovLAotCQkJCTBGQkY5MkI4MUZENzZGRkMw
MEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oICovLAotCQkJCTBGQkY5MkI1MUZENzZGRkMw
MEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAotCQkJCTBGQkY5
MkI3MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywK
LQkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLywKLQkJ
CQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8sCi0JCQkJMEZC
NDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAqLywKLQkJCQkw
RkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAotCQkJ
CTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJ
CTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkw
RkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCTBGNEFF
MDQyMUZFMEQyNTQwMEUyMDgzOSAvKiBJbmZlcnJlZFZhbHVlSW5saW5lcy5oICovLApAQCAtNzM3
NCw3ICs3MzQ2LDYgQEAKIAkJCQlFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERG
R0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAotCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcx
REQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0IxN0JCRkM1
QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJDMEY3Q0Mx
N0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJCTBGRTg1
MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLApAQCAt
NzQxOSw4ICs3MzkwLDYgQEAKIAkJCQkwRjJGQ0NGMzE4QTYwMDcwMDAxQTI3RjggLyogREZHR3Jh
cGhTYWZlcG9pbnQuaCAqLywKIAkJCQkwRkIxNzY1QzE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmNwcCAqLywKIAkJCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggKi8sCi0JCQkJMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVy
cmVkVHlwZUNoZWNrLmNwcCAqLywKLQkJCQkwRkM4NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZH
SW5mZXJyZWRUeXBlQ2hlY2suaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjRE
IC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtODc2MSw3
ICs4NzMwLDYgQEAKIAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYgLyogREZHRENFUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkZBNUQwMjFFODUzQTEwMDlDMEVCQSAvKiBERkdEZXNp
cmVkR2xvYmFsUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlBMTcyRjA1MDEw
MDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjk4MUZEOTE3QkFF
RTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3ODksNyArODc1Nyw2IEBACiAJCQkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0dyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGQTE4QTYwMDcwMDAxQTI3RjggLyog
REZHR3JhcGhTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE3NjYxMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQzg0MTY5
MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCMTRFMjExODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA2MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MDkxLDExICs5MDU4LDYgQEAKIAkJCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2
MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3OTFE
RDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEZCRjkyQjkxRkQ3NkZGRjAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRkJGOTJCQTFGRDc3MDA0MDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1
Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjBBNzUyMzFCOTRCRkE5MDAx
MTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkI0Njc4NTFGREZC
NDU0MDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0QUUwNDMxRkUwRDI1NzAwRTIwODM5IC8qIEluZmVycmVkVmFs
dWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMDBFMTZGNUNEMDBCMzQ0NjAg
LyogSW5pdGlhbGl6ZVRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzk5NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTksMTQgKzEwMTksNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
SW1wbChBY2Nlc3NHZW5lCiAgICAgfQogCiAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIGlm
IChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50
LmltcGwoKSkpIHsKLSAgICAgICAgICAgIGlmIChBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9y
KCksICJcbiIpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAg
ICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0
eXBlLT5kZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgfSBlbHNlIGlmIChBY2Nlc3NDYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsK
LQogICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCkBAIC0xMDQ5LDE0ICsx
MDQxLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbCBp
ZiB0aGlzIHdhc24ndCB0cnVlLgogICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8
fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKLSAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5l
d1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewotICAgICAgICAg
ICAgaWYgKEFjY2Vzc0Nhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7Ci0gICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOwot
ICAgICAgICB9IGVsc2UgaWYgKEFjY2Vzc0Nhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOwotCiAgICAgICAgIC8vIE5PVEU6IFRo
aXMgbG9naWMgaXMgZHVwbGljYXRlZCBpbiBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoKS4gSXQncyBp
bXBvcnRhbnQgdGhhdCBkb2VzQ2FsbHMoKSBrbm93cwogICAgICAgICAvLyBleGFjdGx5IHdoZW4g
dGhpcyB3b3VsZCBtYWtlIGNhbGxzLgogICAgICAgICBib29sIGFsbG9jYXRpbmcgPSBuZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GaXRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ZpdHMuaAkocmV2aXNp
b24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ZpdHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkxhYmVsLmgiCiAjaW5jbHVk
ZSAiT3Bjb2RlU2l6ZS5oIgogI2luY2x1ZGUgIlByb2ZpbGVUeXBlQnl0ZWNvZGVGbGFnLmgiCisj
aW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1
ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKIAotI2luY2x1ZGUgIkluZmVycmVk
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM5LDEx
ICszOCw2IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQdXQKICAgICBD
b21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Qp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7Ci0KLSAgICBJbmZlcnJlZFR5
cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKGZsYWdzKTsKLSAgICBv
dXQucHJpbnQoY29tbWEsIGtpbmQpOwotICAgIGlmIChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVy
ZShraW5kKSkKLSAgICAgICAgb3V0LnByaW50KCI6IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRl
Y29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlz
aW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxh
Z3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzggKzM2LDYgQEAgZW51bSBQdXRCeUlkRmxhZ3Mg
OiBpbnQzMl90IHsKICAgICAvLyBjaGVja2luZyBpZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBh
IHNldHRlci4KICAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEsCiAgICAgUHV0QnlJZFBlcnNpc3Rl
bnRGbGFnc01hc2sgPSAweDEsCi0KLSAgICAvLyBOT1RFOiBUaGUgdmFsdWVzIGJlbG93IG11c3Qg
YmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJbnRlcnByZXRlci5hc20uCi0KLSAg
ICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJyZWQgdHlwZSBpbnZvbHZlcyBmaXJz
dCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFuZCB0aGVuCi0gICAgLy8gdXNpbmcg
dGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBzZWNvbmRhcnkgbWFzazoKLSAg
ICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgewotICAgIC8vIGNh
c2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgotICAgIC8vICAgICBzd2l0Y2ggKGZsYWdz
ICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7Ci0gICAgLy8gICAgIC4uLgotICAgIC8vICAg
ICB9Ci0gICAgLy8gICAgIGJyZWFrOwotICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKLSAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOgotICAgIC8vICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKLSAgICAvLyAgICAgYnJlYWs7Ci0gICAgLy8gfQot
ICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCi0gICAgUHV0QnlJZFByaW1hcnlUeXBl
U2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRoZSBzZWNvbmRhcnkgdHlwZSBtYXNr
IGZvciB0aGUgdHlwZS4KLSAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
ID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgotICAgIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyID0gMHg0LCAvLyBTZWNvbmRhcnkg
dHlwZSBoYXMgc3RydWN0dXJlIElELgotCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrID0g
LTB4OCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9IDB4MCwKLSAgICBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhl
ciA9IDB4MTAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgsCi0gICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
U3RyaW5nID0gMHgyOCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN5bWJvbCA9IDB4MzAsCi0g
ICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSAweDM4LAotICAgIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlT2JqZWN0T3JPdGhlciA9IDB4NDAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3Ag
PSAweDQ4CiB9OwogCiBpbmxpbmUgUHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVj
dHVyZUlEIGlkKQpAQCAtNzYsNyArNDQsNyBAQCBpbmxpbmUgUHV0QnlJZEZsYWdzIGVuY29kZVN0
cnVjdHVyZUlEKFN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CiAjZWxzZQogICAgIFB1dEJ5SWRGbGFncyBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7Ci0gICAgQVNTRVJUKCEocmVz
dWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIEFTU0VSVCghKHJlc3VsdCAm
IFB1dEJ5SWRJc0RpcmVjdCkpOwogICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIH0KQEAgLTg2
LDcgKzU0LDcgQEAgaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlEKFB1dAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZUlEPihmbGFn
cyA+PiAzKTsKICNlbHNlCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxh
Z3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
U3RydWN0dXJlSUQ+KGZsYWdzICYgflB1dEJ5SWRJc0RpcmVjdCk7CiAjZW5kaWYKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKQEAgLTg3LDcgKzg3LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgIH0KICAgICAKICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3U3RydWN0dXJlLT5pbmZlcnJl
ZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE0Miw3
ICsxNDIsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwg
SW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CiAgICAgfQpA
QCAtMTY5LDcgKzE2OSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJl
ZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCkBAIC0xODIsOCArMTgyLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vz
cy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0
dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MzE1LDcgKzMxNCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0g
ICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQs
IHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0zNTAsOCArMzQ5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJp
YW50KAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCwKLSAgICAg
ICAgICAgICAgICB0cmFuc2l0aW9uLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpKTsK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zm
c2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyMzk5NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJl
OwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZz
ZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWly
ZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTU0LDIwICs1MywxOCBAQCBQdXRCeUlkVmFyaWFu
dCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWly
ZWRUeXBlKQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0g
cmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5k
ID0gVHJhbnNpdGlvbjsKQEAgLTc1LDcgKzcyLDYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVy
ZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVk
VHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05MCw3ICs4Niw2IEBAIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1
bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOwotICAgIHJlc3Vs
dC5tX3JlcXVpcmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTE1OSw5ICsxNTQsNiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZShjb25zCiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJl
ZFR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkg
ewogICAgIGNhc2UgTm90U2V0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMzA1LDE2ICsyOTcsMTQgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4
dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0
KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCi0gICAgICAgICAgICBpbkNvbnRleHQo
cmVxdWlyZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAi
LCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQo
KSwgIiwgIiwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRyYW5z
aXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAogICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4dChyZXF1aXJlZFR5cGUo
KSwgY29udGV4dCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjM5OTY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDExICs1MiwxMSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlh
bnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9
KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVw
bGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29u
c3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRC
eUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYs
IFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVy
KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtMTA1LDExICsxMDUsNiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKIAotICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUeXBlOwotICAgIH0KLQogICAgIGJvb2wgd3JpdGVzU3Ry
dWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAg
ICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToK
ICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OwogICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX3JlcXVpcmVkVHlwZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MDYsMjMgKzI5MDYsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQog
ICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEo
dmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigp
XTsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLCB1aWQpOwotICAgICAg
ICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlndXJl
IG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEgY29uc3Rh
bnQsIG9yIG1heWJlCi0gICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwot
ICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZv
bHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QKLSAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgp
LCB1aWQpLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAgICAgICAgICAgICAgIG1h
a2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMzI5Miw3ICszMjc5LDYgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7
CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGUgcGFy
dCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBpbmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMgb24g
QUkga25vd2luZyB0aGUgc3RydWN0dXJlCiAgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdzIHBy
b2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBvcHRp
bWl6YXRpb24gKHVzdWFsbHkKQEAgLTMzMDAsMTIgKzMyODYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBH
ZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZl
IHRvIHJlbHkgZW50aXJlbHkKICAgICAgICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBh
cnNlciB3YXMgYWJsZSB0byBwcm92ZS4KICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1f
Z3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwotCi0gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5
dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBpcyBiZXR0ZXIuCi0gICAgICAgIEFic3RyYWN0VmFs
dWUgdHlwZUZyb21QYXJzaW5nOwotICAgICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgs
IGRhdGEuaW5mZXJyZWRUeXBlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAg
ICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGcm9tUGFyc2luZyk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4
aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CiAg
ICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVk
LgpAQCAtMzM0NCw4ICszMzI1LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1l
cywgYnV0IHRoaXMgbm9kZSBpcyBGVEwtb25seS4KICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgCi0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVu
dGlmaWVyTnVtYmVyXTsKLQogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0Owog
ICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTMzNjcsMTMgKzMzNDYsNiBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkxvYWQ6IHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0LCB1aWQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZGVmYXVsdDog
ewogICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzQxNCw3ICszMzg2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7Ci0gICAgICAgICAgICB0aGlz
VmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAgICAgICAg
ICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5j
cHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2MiArMTI2LDYgQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgc3dpdGNoIChkZXNjcmlw
dG9yLmtpbmQoKSkgewotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgIGNs
ZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoK
LSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAgICAgICBzZXROb25DZWxsVHlwZShTcGVj
T3RoZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgot
ICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHNldE5vbkNlbGxUeXBlKFNw
ZWNCeXRlY29kZU51bWJlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6U3RyaW5nOgotICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTeW1ib2w6
Ci0gICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAgICAgICAg
c2V0KGdyYXBoLCBncmFwaC5tX3ZtLmJpZ0ludFN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAg
ICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAg
ICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbWVyZ2UoU3Bl
Y090aGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6
Ci0gICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6Ci0gICAgICAgIHNldFR5cGUoZ3Jh
cGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlRvcDoKLSAgICAgICAgbWFrZUhlYXBUb3AoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
QWJzdHJhY3RWYWx1ZTo6c2V0KAotICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0
YXRlKQotewotICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7Ci0gICAgaWYgKGNsb2JiZXJTdGF0
ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygp
OwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFw
aCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMjUzLDE3ICsxOTcs
NiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJu
IG9sZE1lICE9ICp0aGlzOwogfQogCi1ib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYg
Z3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25z
dAotewotICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOwotICAgIHR5cGVWYWx1ZS5zZXQoZ3Jh
cGgsIGluZmVycmVkVHlwZSk7Ci0KLSAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRo
aXM7Ci0gICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKLQotICAgIHJldHVybiBtZXJn
ZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Ci19Ci0KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKAogICAgIEdyYXBoJiBncmFwaCwgY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dCYgb3RoZXIsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7CkBAIC00MDIsMTMgKzMz
NSw2IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1
cm4gQ29udHJhZGljdGlvbjsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKLSAgICBmaWx0ZXJWYWx1
ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOwotICAgIHJldHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUp
OwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAv
LyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDYgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgi
Ci0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVk
ZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCkBAIC0yNDksOSAr
MjQ4LDYgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImKTsKLSAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7Ci0KICAgICB2b2lkIGZpeFR5cGVGb3JS
ZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogPSBu
dWxscHRyKTsKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGUq
KTsKICAgICAKQEAgLTMxOCw4ICszMTQsNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAg
ICAgIHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQogCi0gICAgYm9vbCBp
c1R5cGUoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKSBjb25zdDsKLQog
ICAgIC8vIEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJ
ZiB0aGUgYWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCiAgICAgLy8g
aW1wbGljaXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUg
c2V0LCB3aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgogICAgIC8vIFNwZWNDZWxsLiBIZW5j
ZSwgYWZ0ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9u
LWNlbGwgbWVtYmVycy4gQnV0LCB5b3UgY2FuCkBAIC0zNTQsOCArMzQ4LDYgQEAgc3RydWN0IEFi
c3RyYWN0VmFsdWUgewogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0
VmFsdWUmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckNsYXNzSW5mbyhHcmFwaCYsIGNv
bnN0IENsYXNzSW5mbyopOwogCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKLSAgICAKICAgICBBTFdBWVNfSU5MSU5F
IEZpbHRyYXRpb25SZXN1bHQgZmFzdEZvcndhcmRUb0FuZEZpbHRlclVucHJvdmVuKEFic3RyYWN0
VmFsdWVDbG9iYmVyRXBvY2ggbmV3RXBvY2gsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewog
ICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw4ICsxODUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVHlwZWRB
cnJheUNvbnN0cnVjdG9yKFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEludGVybmFsRnVuY3Rpb24q
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlw
ZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbihOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBTcGVjdWxhdGVkVHlwZSwg
Y29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKLSAgICBOb2RlKiBoYW5kbGVQdXRC
eU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUq
IGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlP
ZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwg
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogICAgIGJvb2wgaGFuZGxlRE9NSklUR2V0dGVyKFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IEdldEJ5SWRWYXJpYW50JiwgTm9kZSogdGhpc05vZGUs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwog
ICAgIGJvb2wgaGFuZGxlTW9kdWxlTmFtZXNwYWNlTG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgR2V0QnlJZFN0YXR1cyk7CiAKQEAgLTM3NzIs
OCArMzc3Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKIH0K
IAogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAotICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0zNzg0LDggKzM3ODMsNiBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+
b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
TnVtYmVyOwotICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAgICBtX2dy
YXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7CiAgICAgCiAgICAgTm9kZSog
Z2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIApAQCAtMzc5Myw3ICszNzkwLDcgQEAgTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogfQogCiBOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCi0gICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImIGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwpAQCAtMzgwNSw4ICszODAyLDYgQEAgTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNl
dDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKLSAgICBkYXRhLT5p
bmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVk
VHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgo
UHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7
CiAgICAgCkBAIC0zOTc5LDcgKzM5NzQsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgK
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAg
ICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5w
cm90b3R5cGUoKSkpOwogICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICBwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNl
dCgpLCBJbmZlcnJlZFR5cGU6OlRvcCwgb3ApOworICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFz
ZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOwogICAgIH0KICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgogICAgICAgICAvLyBXaWxsIG5ldmVyIHNl
ZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KQEAgLTQxNzIsMTcgKzQxNjcsOCBAQCBOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQo
Y29uc3RhbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZTsKLSAgICAgICAgaWYgKG5lZWRTdHJ1Y3R1cmVDaGVjaykgewotICAgICAg
ICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
IHsKLSAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdGhpc1R5cGUgPSBt
X2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAg
ICAgICAgICBpbmZlcnJlZFR5cGUubWVyZ2UodGhpc1R5cGUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9w
OwotICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAg
ICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50
Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGlj
dGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgbG9hZE9wKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC00MTkzLDcgKzQxNzksNyBAQCBO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgCiAgICAgUkVMRUFTRV9BU1NF
UlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hl
Y2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2
YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICByZXR1cm4gaGFuZGxl
UHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5y
ZXF1aXJlZFR5cGUoKSwgdmFsdWUpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNl
LCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC00NDI4LDcgKzQ0MTQsNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwog
CiAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3Rh
dHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5
cGUodmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCkBAIC00NDk0LDggKzQ0Nzks
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAg
ICAgICAgZGF0YS0+b2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKICAgICAgICAgZGF0YS0+aWRl
bnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgIGRhdGEtPmluZmVycmVk
VHlwZSA9IHZhcmlhbnQucmVxdWlyZWRUeXBlKCk7Ci0gICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJ
bmZlcnJlZFR5cGUoZGF0YS0+aW5mZXJyZWRUeXBlKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5P
VEU6IFdlIGNvdWxkIEdDIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBzb21lb25lIGNvdWxkIGluc2Vy
dCBhbiBvcGVyYXRpb24gdGhhdCBHQ3MuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2U6
CkBAIC00ODA3LDkgKzQ3OTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBrbm93blBvbHlQcm90b09mZnNldDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUobV9ncmFwaC5tX3ZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLnBvbHlQcm90b05hbWUoKS5pbXBsKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlID0g
SW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
PmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNJbmxpbmVPZmZzZXQoa25vd25Qb2x5
UHJvdG9PZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBvYmplY3QsIG9iamVjdCwgd2Vha0pTQ29uc3Rh
bnQocHJvdG90eXBlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBA
CiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCi0jaW5jbHVkZSAiREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTQ3Nyw4ICs0NzYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpA
QCAtNzI3LDEwICs3MjUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEtPm9mZnNldCA9IGtub3duUG9seVByb3RvT2Zmc2V0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKCkuZW5zdXJlKG1fZ3JhcGgubV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5wb2x5UHJvdG9OYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRU
eXBlKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZU5vZGUgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgb3JpZ2luLCBtX2dyYXBoLmZyZWV6ZShwcm90
b3R5cGUpKTsKQEAgLTEwNzQsNyArMTA2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBl
bWl0R2V0QnlPZmZzZXQoCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCi0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZl
cnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogICAgIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsK
ICAgICAgICAgCkBAIC0xMDkwLDcgKzEwODQsNiBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAg
ICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICBkYXRhLmluZmVycmVkVHlwZSA9IGluZmVy
cmVkVHlwZTsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRh
dGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CkBAIC0xMTAxLDggKzEwOTQs
NiBAQCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwog
CiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAot
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2luLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hpbGRFZGdlLnNl
dFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcn
cyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ug
d2FudCBpdCB0byBoYXZlIGEgbGl2ZQotLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0
aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KLQotY2xhc3Mg
RGVzaXJlZEluZmVycmVkVHlwZSB7Ci1wdWJsaWM6Ci0gICAgRGVzaXJlZEluZmVycmVkVHlwZSgp
Ci0gICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERl
c2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAg
ICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCi0gICAgewotICAgIH0KLQotICAgIERlc2lyZWRJ
bmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1f
b2JqZWN0KG51bGxwdHIpCi0gICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5cGU6OlRvcCkK
LSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KLQotICAgIEluZmVycmVkVHlwZSogb2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9Ci0KLSAgICBib29sIGlz
U3RpbGxWYWxpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldh
dGNoKG1fZXhwZWN0ZWQpOwotICAgIH0KLQotICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNo
cG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRj
aHBvaW50KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0g
b3RoZXIubV9vYmplY3QKLSAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBl
Y3RlZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gSW5mZXJyZWRU
eXBlOjpUb3A7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1fb2JqZWN0KSAr
IG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAiIGZvciAiLCBS
YXdQb2ludGVyKG1fb2JqZWN0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7Ci0gICAgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Ci19OwotCi1zdHJ1Y3QgRGVzaXJlZElu
ZmVycmVkVHlwZUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2lyZWRJbmZlcnJl
ZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpE
ZXNpcmVkSW5mZXJyZWRUeXBlPiB7Ci0gICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVzaXJlZEluZmVy
cmVkVHlwZUhhc2ggSGFzaDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZl
cnJlZFR5cGU+IHsgfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksMTEgKzY5LDYgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgog
ICAgIH0KIH0KIAotdm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9u
KQotewotICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKLX0K
LQogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRX
YXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC0xMDIsMTEgKzk3LDYg
QEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAgIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCi12b2lkIERlc2lyZWRXYXRjaHBv
aW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKLXsKLSAgICBt
X2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7Ci19Ci0KIGJvb2wgRGVzaXJlZFdhdGNocG9p
bnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVy
ZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEyMiw3ICsxMTIsNiBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1faW5mZXJyZWRUeXBlcy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTMxLDggKzEyMCw3IEBAIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQogICAg
ICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9pbmZlcnJlZFR5
cGVzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
YXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKQEAgLTE0
Myw3ICsxMzEsNiBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQCiAg
ICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJl
ZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3
czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQu
cHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250ZXh0KG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7Ci0gICAgb3V0LnByaW50KCIgICAg
SW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNvbnRleHQpLCAi
XG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAy
Mzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCi0jaW5jbHVkZSAiREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05
MywxOCArOTIsNiBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAg
ICAgfQogfTsKIAotc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYp
OwotICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsK
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQotICAg
IHsKLSAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKLSAgICB9Ci19
OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRv
ciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE3MywxMCArMTYw
LDYgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2Fs
bCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMK
ICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2tr
ZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Jik7Ci0KLSAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBk
aXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcwotICAgIC8v
IHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KLSAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAg
ICAKQEAgLTIwNCwxMSArMTg3LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KLSAgICBib29sIGlz
V2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOwotICAgIH0KLQogICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkBAIC0yMTgsNyArMTk2LDYgQEAgcHJp
dmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZl
cnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFk
YXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4g
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7Ci0gICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxE
ZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
REZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKQEAgLTE2MzMsMTAgKzE2MzIsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgp
KQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvckNoZWNrcygpOwotICAgICAgICAgICAg
aW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQs
IGluZGV4LCBvcmlnaW5Gb3JDaGVjayhpbmRleCksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKLSAg
ICAgICAgICAgICAgICBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNiBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
JiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciwgInsiLCBpZGVudGlmaWVycygpW3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXJd
LCAifSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKTsKLSAgICAgICAgb3V0LnByaW50KCIsIGluZmVycmVk
VHlwZSA9ICIsIGluQ29udGV4dChzdG9yYWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5cGUsIGNvbnRl
eHQpKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXREYXRhKCkpIHsK
ICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpOwpAQCAtMTA1OSwzOCArMTA1OCw2IEBAIGJvb2wgR3JhcGg6OmlzU2FmZVRvTG9h
ZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0ZDo6
bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCi1JbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
R3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkKLXsKLSAg
ICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgpKTsKLSAgICAKLSAgICBhdXRvIGl0
ZXIgPSBtX2luZmVycmVkVHlwZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyICE9IG1faW5mZXJy
ZWRUeXBlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwotCi0gICAgSW5mZXJy
ZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Ioa2V5
LnVpZCgpKTsKLSAgICBpZiAoIXR5cGVPYmplY3QpIHsKLSAgICAgICAgbV9pbmZlcnJlZFR5cGVz
LmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKLSAgICAgICAgcmV0dXJuIEluZmVycmVkVHlw
ZTo6VG9wOwotICAgIH0KLQotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3Jp
cHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0b3IoKTsKLSAgICBpZiAodHlwZURlc2NyaXB0b3Iu
a2luZCgpID09IEluZmVycmVkVHlwZTo6VG9wKSB7Ci0gICAgICAgIG1faW5mZXJyZWRUeXBlcy5h
ZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7Ci0gICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6
OlRvcDsKLSAgICB9Ci0gICAgCi0gICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIHR5cGVEZXNj
cmlwdG9yKTsKLQotICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemlseSh0eXBlT2Jq
ZWN0KTsKLSAgICByZWdpc3RlckluZmVycmVkVHlwZSh0eXBlRGVzY3JpcHRvcik7Ci0KLSAgICAv
LyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNpcmVkIGluZmVy
cmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKLSAgICAvLyBwb2ludCB0
byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCi0gICAgbV9wbGFuLndhdGNocG9pbnRz
KCkuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0
b3IpKTsKLQotICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKLX0KLQogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAg
LTEzMjAsMjIgKzEyODcsNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5
KGNvCiB9CiAKIEFic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgK
LSAgICBjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQotewotICAgIEFic3Ry
YWN0VmFsdWUgcmVzdWx0OwotICAgIGJhc2UuZm9yRWFjaCgKLSAgICAgICAgWyZdIChSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1
ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHko
c3RydWN0dXJlLmdldCgpLCB1aWQpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7
Ci0gICAgICAgIH0pOwotICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2Ji
ZXJlZCkKLSAgICAgICAgcmVzdWx0LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotQWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5
KAotICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJT
dGF0ZSkKIHsKICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHko
YmFzZSwgb2Zmc2V0KSkgewpAQCAtMTM0NCw5ICsxMjk2LDYgQEAgQWJzdHJhY3RWYWx1ZSBHcmFw
aDo6aW5mZXJyZWRWYWx1ZUZvclBybwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIGlmIChiYXNlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybiBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoYmFzZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkLCBjbG9iYmVy
U3RhdGUpOwotCiAgICAgcmV0dXJuIEFic3RyYWN0VmFsdWU6OmhlYXBUb3AoKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjM5OTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OTcsMjYgKzc5NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gY29tcHV0ZWQgYnkgdHJhY2tpbmcgd2hp
Y2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCiAgICAgYm9vbCBp
c1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKIAotICAgIHZvaWQg
cmVnaXN0ZXJJbmZlcnJlZFR5cGUoY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBl
KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuc3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZWdp
c3RlclN0cnVjdHVyZSh0eXBlLnN0cnVjdHVyZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBUZWxscyB1
cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRv
IGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7Ci0gICAgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZmVy
cmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKLSAgICB9Ci0KLSAg
ICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICAgICAgY29uc3Qg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJlc0FyZVdhdGNoZWQpOwotCiAgICAgLy8gVGhp
cyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlw
ZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBhYnN0cmFjdAogICAgIC8vIHZhbHVlIGZvciBz
b21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhlIGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2Uu
CiAgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0gICAgICAgIGNv
bnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgICAgICBjb25zdCBBYnN0cmFjdFZh
bHVlJiBiYXNlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAK
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwpAQCAt
MTA2NSw3ICsxMDQ5LDYgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1
bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5
dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9m
ZnNldD4+IG1fc2FmZVRvTG9hZDsKLSAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgVmVjdG9yPFJlZjxTbmlw
cGV0Pj4gbV9kb21KSVRTbmlwcGV0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1BTRG9taW5hdG9y
cz4gbV9jcHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FEb21pbmF0b3JzPiBt
X3NzYURvbWluYXRvcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVy
cmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVj
ay5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBpbnNlcnRJbmZlcnJlZFR5
cGVDaGVjaygKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCi0gICAgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotewotICAgIGluc2VydGlvblNldC5ncmFwaCgpLnJl
Z2lzdGVySW5mZXJyZWRUeXBlKHR5cGUpOwotICAgIAotICAgIHN3aXRjaCAodHlwZS5raW5kKCkp
IHsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgotICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3Jp
Z2luLCBFZGdlKGJhc2VOb2RlLCBCb29sZWFuVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT3Ro
ZXJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMy
OgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBD
aGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBJbnQzMlVzZSkpOwotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VO
b2RlLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5
cGU6OlN0cmluZzoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBT
cGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgU3RyaW5nVXNlKSk7Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTeW1ib2w6Ci0gICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4s
IEVkZ2UoYmFzZU5vZGUsIFN5bWJvbFVzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBCaWdJbnRV
c2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmU6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKLSAgICAgICAg
ICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpLAotICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOwotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKLSAgICAgICAgICAgIE9w
SW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUo
KSkpLAotICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwg
RWRnZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBP
YmplY3RPck90aGVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpUb3A6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERkdfQ1JBU0goaW5zZXJ0
aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLX0KLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNr
LmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVk
ZSAiSW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQot
Ly8gSW5zZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRo
ZSBnaXZlbiBpbmZlcnJlZCB0eXBlLgotdm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKLSAg
ICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJh
c2VOb2RlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSw2IEBA
IHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLQotICAg
IC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMg
aXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgotICAgIC8vIHdoYXQgY2hl
Y2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndp
c2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcwotICAgIC8vIGd1YXJhbnRlZWQuCi0gICAg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0
aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTQsMTQgKzIyOTQsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdl
IGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0
eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdl
IGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShj
dXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1
cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOworICAg
ICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJy
ZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBo
LmFkZE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0MSwzMSArNTQxLDEwIEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZGF0YS5vZmZzZXQ7
Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBncmFwaC5pZGVudGlmaWVycygpW2Rh
dGEuaWRlbnRpZmllck51bWJlcl07Ci0KLSAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNh
c2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0g
ICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBkYXRhLmluZmVycmVkVHlwZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgLy8gUHV0QnlP
ZmZzZXQga25vd3MgYWJvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCdzIHRoZSBlbmZvcmNl
ciBvZiB0aGF0IHR5cGUgcmF0aGVyCi0gICAgICAgICAgICAvLyB0aGFuIHRoZSBjb25zdW1lciBv
ZiB0aGF0IHR5cGUuIFRoZXJlZm9yZSwgUHV0QnlPZmZzZXQgZXhwZWN0cyBUT1AgZm9yIHRoZSBw
dXJwb3NlIG9mCi0gICAgICAgICAgICAvLyBzYWZlLXRvLWV4ZWN1dGUgaW4gdGhlIHNlbnNlIHRo
YXQgaXQgd2lsbCBiZSBoYXBweSB3aXRoIGFueXRoaW5nIGFzIGdlbmVyYWwgYXMgVE9QCi0gICAg
ICAgICAgICAvLyAoc28gYW55IHR5cGUpLgotICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChncmFwaCwgbm9kZSwgIkJhZCBvcGNvZGUiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gR3JhcGg6OmlzU2FmZVRvTG9hZCgp
IGlzIGFsbCBhYm91dCBwcm9vZnMgZGVyaXZlZCBmcm9tIFByb3BlcnR5Q29uZGl0aW9ucy4gVGhv
c2UgZG9uJ3QKICAgICAgICAgLy8ga25vdyBhbnl0aGluZyBhYm91dCBpbmZlcnJlZCB0eXBlcy4g
QnV0IGlmIHdlIGhhdmUgYSBwcm9vZiBkZXJpdmVkIGZyb20gd2F0Y2hpbmcgYQogICAgICAgICAv
LyBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSB0eXBlIHByb29mLCB0aGVuIHRoZSBuZXh0IGNhc2UgYmVs
b3cgd2lsbCBkZWFsIHdpdGggaXQuCi0gICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZAotICAgICAgICAgICAgJiYgaW5mZXJyZWRU
eXBlLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBpZiAoc3RhdGUuc3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpIHsKICAgICAgICAg
ICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8SlNPYmplY3QqPihncmFwaC5tX3ZtKSkgewogICAgICAgICAgICAgICAgIGlmIChn
cmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTU3OSwxMiArNTU4LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAgICAgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJl
ID0gdmFsdWVbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXRoaXNTdHJ1Y3R1cmUtPmlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAoaW5mZXJyZWRUeXBlLmtpbmQoKSAhPSBJbmZlcnJlZFR5cGU6OlRvcCkgewotICAg
ICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzSW5mZXJyZWRUeXBlID0K
LSAgICAgICAgICAgICAgICAgICAgZ3JhcGguaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkodGhpc1N0
cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVHlwZS5zdWJzdW1l
cyh0aGlzSW5mZXJyZWRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyMCw4ICs2OTIwLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFy
aWFudHNbaV07CiAKLSAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+Y2hpbGQy
KCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKLSAgICAgICAgICAgIAogICAgICAg
ICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCkBAIC0xMTUzMCwxNDggKzExNTI4LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgcmVzdWx0cyk7CiAgICAgfQogCi0g
ICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBj
YW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2UgaXQgaXMgY2Fs
bGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKLSAgICAgICAgLy8KLSAgICAgICAgLy8gbWF5IGJl
IGxvd2VyZWQgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBzd2l0Y2ggKG9iamVjdC0+
c3RydWN0dXJlKSB7Ci0gICAgICAgIC8vICAgICBjYXNlIDQyOgotICAgICAgICAvLyAgICAgICAg
IGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOwotICAgICAgICAvLyAgICAgICAgIC4uLgot
ICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyAgICAgY2FzZSA0MzoKLSAgICAg
ICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKLSAgICAgICAgLy8g
ICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFyZSBkaWZmZXJl
bnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3b3VsZCBiZQot
ICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9mIHR5cGUxIHwg
dHlwZTIuCi0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7Ci0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVh
bjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3ROdW1iZXIo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6U3ltYm9sOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RTeW1ib2wodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCaWdJ
bnQodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZTogewotICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHR5cGUuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5
cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpIHsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjogewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBt
X291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBt
X291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
bV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2Fz
ZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1
YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpIHsKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVy
ZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAg
ICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsK
LQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6Ci0gICAg
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9i
amVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7Ci0gICAgICAgICAgICBM
QmFzaWNCbG9jayBjZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKLQotICAgICAg
ICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0KHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAg
ICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKLQot
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLSAgICB9Ci0gICAgCiAgICAgTFZhbHVlIGxvYWRQcm9w
ZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ2NChhZGRyZXNz
T2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgkod29ya2luZyBjb3B5KQpAQCAt
MTIzLDYgKzEyMyw4IEBAIG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeUlkTWV0YWRhdGEuaCIK
ICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUg
IlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJU
b1RoaXNTdGF0dXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRl
ICJIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJIZWFwVmVyaWZpZXIuaCIKICNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSW5mZXJyZWRWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIklzb0NlbGxTZXRJbmxpbmVzLmgiCkBAIC01ODYsNyArNTg1LDYgQEAgdm9p
ZCBIZWFwOjpmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaQogCiB2b2lkIEhlYXA6OmZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIGZpbmFsaXplTWFya2VkVW5jb25k
aXRpb25hbEZpbmFsaXplcnM8SW5mZXJyZWRUeXBlPih2bSgpLT5pbmZlcnJlZFR5cGVzV2l0aEZp
bmFsaXplcnMpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SW5m
ZXJyZWRWYWx1ZT4odm0oKS0+aW5mZXJyZWRWYWx1ZXNXaXRoRmluYWxpemVycyk7CiAgICAgdm0o
KS0+Zm9yRWFjaENvZGVCbG9ja1NwYWNlKAogICAgICAgICBbJl0gKGF1dG8mIHNwYWNlKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDg4ICs1MCw2IEBAIEV4ZWN1dGFibGVCYXNl
KiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEKICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAotQXNz
ZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgK
LSAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUpCi17Ci0gICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7Ci0KLSAgICBzd2l0Y2ggKGRlc2NyaXB0
b3Iua2luZCgpKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpCb29sZWFuOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihy
ZWdzLCB0ZW1wR1BSKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok90aGVyOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVt
cEdQUikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MsIG1vZGUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIsIG1vZGUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3RTeW1ib2wocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RCaWdJbnQocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBw
ZW5kKAotICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIE5vdEVx
dWFsLAotICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjogewotICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihy
ZWdzLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgYnJhbmNoU3Ry
dWN0dXJlKAotICAgICAgICAgICAgICAgIE5vdEVxdWFsLAotICAgICAgICAgICAgICAgIEFkZHJl
c3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBvay5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0OgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BS
KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JP
dGhlcjogewotICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7
Ci0gICAgICAgIG9rLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmRmFzdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpCiB7CiAgICAgcmV0dXJuIGJyYW5j
aDMyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDEwICsxMDUyLDYgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgfQogCi0gICAgSnVtcExpc3QgYnJhbmNoSWZOb3RUeXBlKAotICAgICAgICBK
U1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYsCi0gICAgICAgIFRhZ1JlZ2lzdGVyc01vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKTsKLQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3MCw4ICs0NzAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiTWFya2Vk
U3BhY2UuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNp
bmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA1
LDE4ICs5MDUsMTQgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGFpbik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBjb2RlQmxvY2ss
IGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLmZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwo
KSkucHV0QnlJZEZsYWdzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxh
Z3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KG1ldGFkYXRhLmZsYWdzKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQg
PSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
ZmxhZ3MgfAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2Ny
aXB0b3JGb3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CisgICAgICAgICAgICAgICAg
bWV0YWRhdGEuZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KG1ldGFkYXRhLmZsYWdz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQwOCw4MyArMTQwOCw2
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCiAgICAgIyBXZSB3aWxsIGxvc2UgY3VycmVudFN0cnVjdHVyZUlEIGluIHRo
ZSBzaGVuYW5pZ2FucyBiZWxvdy4KIAotICAgIGdldCh2YWx1ZSwgdDEpCi0gICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0
YWRhdGE6OmZsYWdzW3Q1XSwgdDEKLQotICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAg
ICAjIHQwIC0+IG9iamVjdCBiYXNlCi0gICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKLSAgICAj
IHQyIC0+IHZhbHVlIHRhZwotICAgICMgdDMgLT4gdmFsdWUgcGF5bG9hZAotCi0gICAgYnRpbnog
dDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcgotCi0gICAgIyBXZSBoYXZlIG9uZSBvZiB0aGUgbm9uLXN0cnVjdHVy
ZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25lLgotICAgIGFuZGkgUHV0QnlJZFNlY29u
ZGFyeVR5cGVNYXNrLCB0MQotICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5n
LCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmcKLQotICAgICMgV2UgYXJlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIFN5bWJvbCwgT2JqZWN0LCBPYmplY3RPck90aGVyLCBU
b3AKLSAgICBiaWx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIsIC5vcFB1
dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXIKLQotICAgICMgV2UgYXJlIGVpdGhl
ciBPYmplY3RPck90aGVyIG9yIFRvcC4KLSAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVRvcCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0KLSAgICAjIENoZWNrIGlmIHdlIGFy
ZSBPYmplY3RPck90aGVyLgotICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tPYmplY3QKLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcjoKLSAgICBiaWVxIHQyLCBOdWxsVGFn
LCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBiaWVxIHQyLCBVbmRlZmluZWRUYWcs
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0u
b3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyOgotICAgICMgV2UgYXJlIGVp
dGhlciBTdHJpbmcsIFN5bWJvbCBvciBPYmplY3QuCi0gICAgYmluZXEgdDIsIENlbGxUYWcsIC5v
cFB1dEJ5SWRTbG93Ci0gICAgYmllcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QsIC5v
cFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKLSAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVN5bWJvbCwgLm9wUHV0QnlJZFR5cGVDaGVja1N5bWJvbAotICAgIGJiZXEgSlNDZWxsOjptX3R5
cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAg
Lm9wUHV0QnlJZFNsb3cKLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3Q6Ci0gICAgYmJhZXEgSlND
ZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMK
LSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLS5vcFB1dEJ5SWRUeXBlQ2hlY2tTeW1ib2w6Ci0gICAg
YmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN5bWJvbFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrTGVz
c1RoYW5TdHJpbmc6Ci0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwg
Qm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIuCi0gICAgYmlsdCB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzIKLQotICAgICMg
V2UgYXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCi0gICAgYmllcSB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIKLQotICAgIGJpZXEgdDIs
IEludDMyVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoKLSAgICBiaWIgdDIsIExvd2VzdFRh
ZyArIDEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xv
dwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMjoKLSAgICAjIFdlIGFyZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlcgotICAgIGJpbmVxIHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90
aGVyCi0gICAgYmllcSB0MiwgQm9vbGVhblRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
Ci0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90
aGVyOgotICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tPdGhlcgotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNo
ZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgYmllcSB0MiwgQ2VsbFRhZywgLm9w
UHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKLSAgICBidGlueiB0MSwgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tPdGhlcgotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKLSAgICBhbmRpIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEK
LSAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cK
LQotLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0
YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCiAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90
VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzQ0LDkyICsxMzQ0LDExIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5
X2lkLCBPcFB1dEIKICAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9w
UHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQ1IC0+
IG1ldGFkYXRhCi0gICAgIyB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAogICAgICMgdDAgLT4g
b2JqZWN0IGJhc2UKLQotICAgIGdldCh2YWx1ZSwgdDEpCi0gICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MSwgdDMpCi0KLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpmbGFn
c1t0NV0sIHQxCi0KLSAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0MCAtPiBv
YmplY3QgYmFzZQotICAgICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdzCiAgICAgIyB0MiAtPiBjdXJy
ZW50IHN0cnVjdHVyZSBJRAotICAgICMgdDMgLT4gdmFsdWUgdG8gcHV0CiAgICAgIyB0NSAtPiBt
ZXRhZGF0YQogCi0gICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcgotCi0gICAgIyBXZSBoYXZlIG9u
ZSBvZiB0aGUgbm9uLXN0cnVjdHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25lLgot
ICAgIGFuZHAgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQotICAgIGJwbHQgdDEsIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmcK
LQotICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIFN5bWJvbCwgT2Jq
ZWN0LCBPYmplY3RPck90aGVyLCBUb3AKLSAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU9iamVjdE9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXIK
LQotICAgICMgV2UgYXJlIGVpdGhlciBPYmplY3RPck90aGVyIG9yIFRvcC4KLSAgICBicGVxIHQx
LCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0K
LSAgICAjIENoZWNrIGlmIHdlIGFyZSBPYmplY3RPck90aGVyLgotICAgIGJ0cXogdDMsIHRhZ01h
c2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcjoK
LSAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQzCi0gICAgYnFlcSB0MywgVmFsdWVOdWxsLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9w
UHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcjoKLSAgICAjIFdlIGFyZSBlaXRo
ZXIgU3RyaW5nLCBTeW1ib2wgb3IgT2JqZWN0LgotICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQ
dXRCeUlkU2xvdwotICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0LCAub3BQ
dXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0gICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVT
eW1ib2wsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tTeW1ib2wKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBl
W3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5v
cFB1dEJ5SWRTbG93Ci0ub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0OgotICAgIGJiYWVxIEpTQ2Vs
bDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0g
ICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0ub3BQdXRCeUlkVHlwZUNoZWNrU3ltYm9sOgotICAgIGJi
ZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTeW1ib2xUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5n
VHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NU
aGFuU3RyaW5nOgotICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJv
b2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyCi0gICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFy
eVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzIKLQotICAgICMgV2Ug
YXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCi0gICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFy
eVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIKLQotICAgIGJxYWVxIHQzLCB0
YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0
QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoKLSAgICBidHFueiB0MywgdGFn
VHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5
SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyOgotICAgICMgV2UgYXJl
IG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLgotICAgIGJwbmVx
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0
b21Pck90aGVyCi0gICAgeG9ycSBWYWx1ZUZhbHNlLCB0MwotICAgIGJ0cXogdDMsIH4xLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0
QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXI6Ci0gICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFy
eVR5cGVPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCi0gICAgam1wIC5vcFB1dEJ5SWRT
bG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAg
ICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVy
ZQotICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0K
LS5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlOgotICAgIHVyc2hpZnRwIDMs
IHQxCi0gICAgYmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRT
bG93Ci0KLS5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoKICAgICBsb2FkaSBPcFB1dEJ5SWQ6
Ok1ldGFkYXRhOjpuZXdTdHJ1Y3R1cmVbdDVdLCB0MQotICAgIAogICAgIGJ0aXogdDEsIC5vcFB1
dEJ5SWROb3RUcmFuc2l0aW9uCiAKICAgICAjIFRoaXMgaXMgdGhlIHRyYW5zaXRpb24gY2FzZS4g
dDEgaG9sZHMgdGhlIG5ldyBzdHJ1Y3R1cmVJRC4gdDIgaG9sZHMgdGhlIG9sZCBzdHJ1Y3R1cmUg
SUQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTIwNCwy
MyArMjA0LDYgQEAgZWxzZQogICAgIGNvbnN0IExvd2VzdFRhZyA9IGNvbnN0ZXhwciBKU1ZhbHVl
OjpMb3dlc3RUYWcKIGVuZAogCi0jIFB1dEJ5SWRGbGFncyBkYXRhCi1jb25zdCBQdXRCeUlkUHJp
bWFyeVR5cGVNYXNrID0gY29uc3RleHByIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sKLWNvbnN0IFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVT
ZWNvbmRhcnkKLWNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgPSBj
b25zdGV4cHIgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZQotY29uc3QgUHV0
QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSBjb25zdGV4cHIgUHV0
QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIKLWNvbnN0IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzayA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sKLWNv
bnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlQm90dG9tCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSBjb25zdGV4
cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU90aGVyID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIKLWNvbnN0IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlSW50MzIgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQz
MgotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSBjb25zdGV4cHIgUHV0QnlJZFNl
Y29uZGFyeVR5cGVOdW1iZXIKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gY29u
c3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZVN5bWJvbCA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN5bWJvbAotY29uc3Qg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9IGNvbnN0
ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIKLWNvbnN0IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlVG9wID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wCi0KIGNvbnN0
IENhbGxPcENvZGVTaXplID0gY29uc3RleHByIG9wX2NhbGxfbGVuZ3RoCiAKIGNvbnN0IG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gY29uc3RleHByIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5oIgot
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5m
ZXJyZWRTdHJ1Y3R1cmUpOwotCi1JbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUo
Vk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
OiBwYXJlbnQocGFyZW50KQotICAgICwgc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSkK
LXsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZ3YXRjaHBvaW50KTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyMzk5NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShub25l
eGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEluZmVycmVkVHlwZTsK
LWNsYXNzIFN0cnVjdHVyZTsKLQotY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwotcHVibGljOgotICAg
IEluZmVycmVkU3RydWN0dXJlKFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSop
OwotCi0gICAgSW5mZXJyZWRUeXBlKiBwYXJlbnQ7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlOwotICAgIAotICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCB3YXRj
aHBvaW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hw
b2ludC5oIgotCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci12b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2bSwg
Y29uc3QgRmlyZURldGFpbCYpCi17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3Ry
dWN0dXJlID0KLSAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAg
ICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVy
cmVkU3RydWN0dXJlLCB3YXRjaHBvaW50KSk7Ci0KLSAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IGluZmVycmVkU3RydWN0dXJlLT5wYXJlbnQ7Ci0gICAgCi0gICAgaWYgKCFpbmZlcnJl
ZFR5cGUtPmlzTGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaW5mZXJyZWRUeXBl
LT5yZW1vdmVTdHJ1Y3R1cmUodm0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oCShub25leGlzdGVu
dCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1Ymxp
YyBXYXRjaHBvaW50IHsKLXByb3RlY3RlZDoKLSAgICB2b2lkIGZpcmVJbnRlcm5hbChWTSYsIGNv
bnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJ
KHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKLQotI2luY2x1ZGUgIklzb0NlbGxTZXRJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgSW5mZXJyZWRUeXBlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1YmxpYzoK
LSAgICBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsKAotICAgICAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKLSAgICAgICAgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImIG5ld0Rlc2NyaXB0b3IsCi0gICAgICAgIEpTVmFsdWUgb2ZmZW5kaW5nVmFsdWUpCi0g
ICAgICAgIDogbV9pbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKQotICAgICAgICAsIG1fdWlkKHVp
ZCkKLSAgICAgICAgLCBtX29sZERlc2NyaXB0b3Iob2xkRGVzY3JpcHRvcikKLSAgICAgICAgLCBt
X25ld0Rlc2NyaXB0b3IobmV3RGVzY3JpcHRvcikKLSAgICAgICAgLCBtX29mZmVuZGluZ1ZhbHVl
KG9mZmVuZGluZ1ZhbHVlKQotICAgIHsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG91dC5w
cmludCgKLSAgICAgICAgICAgICJJbmZlcnJlZCB0eXBlIGNoYW5nZWQgb24gIiwgUmF3UG9pbnRl
cihtX2luZmVycmVkVHlwZSksICIgZm9yIHByb3BlcnR5ICIsIG1fdWlkLCAiOiAiCi0gICAgICAg
ICAgICAib2xkIHR5cGUgd2FzICIsIG1fb2xkRGVzY3JpcHRvciwgIiB3aGlsZSBkZXNpcmVkIHR5
cGUgaXMgIiwgbV9uZXdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKG1fb2ZmZW5kaW5nVmFsdWUp
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBkdWUgdG8gIiwgbV9vZmZlbmRpbmdWYWx1ZSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZSogbV9pbmZlcnJlZFR5cGU7Ci0gICAg
UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBtX3VpZDsKLSAgICBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3IgbV9vbGREZXNjcmlwdG9yOwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX25l
d0Rlc2NyaXB0b3I7Ci0gICAgSlNWYWx1ZSBtX29mZmVuZGluZ1ZhbHVlOwotfTsKLQotY29uc3Qg
Q2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlIiwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07
Ci0KLUluZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQotewotICAgIElu
ZmVycmVkVHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRU
eXBlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBz
dGF0aWNfY2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKLSAgICBpbmZlcnJlZFR5cGUtPkluZmVy
cmVkVHlwZTo6fkluZmVycmVkVHlwZSgpOwotfQotCi1TdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIGlmIChpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlKQot
ICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZl
cnJlZFR5cGUpOwotfQotCi1JbmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9y
RmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQotewotICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlk
UHJpbWFyeVR5cGVNYXNrKSB7Ci0gICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6
Ci0gICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKLSAg
ICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToKLSAgICAgICAgICAgIHJldHVy
biBCb3R0b207Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgotICAg
ICAgICAgICAgcmV0dXJuIEJvb2xlYW47Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVPdGhlcjoKLSAgICAgICAgICAgIHJldHVybiBPdGhlcjsKLSAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUludDMyOgotICAgICAgICAgICAgcmV0dXJuIEludDMyOwotICAgICAgICBj
YXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgotICAgICAgICAgICAgcmV0dXJuIE51bWJl
cjsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmc7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2w6
Ci0gICAgICAgICAgICByZXR1cm4gU3ltYm9sOwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlT2JqZWN0OgotICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsKLSAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0T3JPdGhlcjsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcDoKLSAgICAg
ICAgICAgIHJldHVybiBUb3A7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKLSAgICAg
ICAgfQotICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAg
ICAgICAgcmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmU7Ci0gICAgY2FzZSBQdXRCeUlkUHJpbWFy
eVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgcmV0dXJuIE9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBCb3R0b207Ci0gICAgfQotfQotCi1JbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZShK
U1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgcmV0
dXJuIEJvb2xlYW47Ci0gICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybiBPdGhlcjsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4g
SW50MzI7Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBOdW1iZXI7
Ci0gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVl
LmFzQ2VsbCgpOwotICAgICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmc7Ci0gICAgICAgIGlmIChjZWxsLT5pc1N5bWJvbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFN5bWJvbDsKLSAgICAgICAgaWYgKGNlbGwtPmlzQmlnSW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gQmlnSW50OwotICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKE9iamVjdFdpdGhT
dHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBPYmplY3Q7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFRvcDsKLX0KLQotSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yRmxhZ3MoVk0mIHZtLCBQdXRC
eUlkRmxhZ3MgZmxhZ3MpCi17Ci0gICAgS2luZCBraW5kID0ga2luZEZvckZsYWdzKGZsYWdzKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBpZiAoaGFzU3RydWN0dXJlKGtpbmQpKQot
ICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZGVjb2Rl
U3RydWN0dXJlSUQoZmxhZ3MpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IG51bGxw
dHI7Ci0gICAgcmV0dXJuIERlc2NyaXB0b3Ioa2luZCwgc3RydWN0dXJlKTsKLX0KLQotUHV0QnlJ
ZEZsYWdzIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cHV0QnlJZEZsYWdzKCkgY29uc3QKLXsK
LSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgQm90dG9tOgotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSk7Ci0gICAgY2FzZSBCb29sZWFuOgotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRh
cnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4pOwotICAgIGNhc2UgT3RoZXI6Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNl
Y29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIpOwotICAgIGNhc2UgSW50MzI6Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlw
ZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIpOwotICAgIGNhc2UgTnVtYmVy
OgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFy
eVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlcik7Ci0gICAgY2FzZSBT
dHJpbmc6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQ
cmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nKTsKLSAgICBj
YXNlIFN5bWJvbDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0
QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wpOwot
ICAgIGNhc2UgT2JqZWN0OgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdz
PihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVj
dCk7Ci0gICAgY2FzZSBCaWdJbnQ6Ci0gICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRh
cnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIpOwotICAgIGNhc2UgVG9wOgot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCk7Ci0gICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigK
LSAgICAgICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgfCBlbmNv
ZGVTdHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOwotICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KAotICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIgfCBlbmNvZGVTdHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOwotICAgIH0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQdXRCeUlkTm9uZTsKLX0K
LQotdm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3Im
IG90aGVyKQotewotICAgIC8vIEZpbHRlciBvdXQgY29tbW9uIHRoaW5ncyB0byBzaW1wbGlmeSB0
aGUgc3dpdGNoIHN0YXRlbWVudCBiZWxvdy4KLSAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob3RoZXIubV9raW5kID09IEJvdHRvbSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIEJvdHRvbToKLSAgICAgICAg
KnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQm9vbGVhbjoKLSAgICBj
YXNlIFN0cmluZzoKLSAgICBjYXNlIFN5bWJvbDoKLSAgICBjYXNlIEJpZ0ludDoKLSAgICAgICAg
KnRoaXMgPSBUb3A7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE90aGVyOgotICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6
Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgICAgICAq
dGhpcyA9IERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIG90aGVyLnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhl
cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0
aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBJbnQz
MjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBOdW1iZXI6
Ci0gICAgICAgICAgICAqdGhpcyA9IE51bWJlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgY2FzZSBOdW1iZXI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOiAvLyBJ
ZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgc3RydWN0dXJlcyBkaWRu
J3QgbWF0Y2guCi0gICAgICAgIGNhc2UgT2JqZWN0OgotICAgICAgICAgICAgKnRoaXMgPSBPYmpl
Y3Q7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6Ci0gICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmUpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIE90aGVyOgotICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgICAgIGlmICht
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNhc2UgT2JqZWN0OgotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgc3Ry
dWN0dXJlcyBkaWRuJ3QgbWF0Y2guCi0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyOgotICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90
aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
KnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9i
amVjdE9yT3RoZXI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKLSAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRv
cDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgVG9wOgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCi17Ci0g
ICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAg
ICAgICp0aGlzID0gT2JqZWN0OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAg
ICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotYm9v
bCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90
aGVyKSBjb25zdAotewotICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRoaXM7Ci0gICAgbWVyZ2Vk
Lm1lcmdlKG90aGVyKTsKLSAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2VkOwotfQotCi12b2lkIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQobV9raW5kKTsKLSAg
ICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgIG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9z
dHJ1Y3R1cmUsIGNvbnRleHQpKTsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwg
bnVsbHB0cik7Ci19Ci0KLUluZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKLSAgICA6
IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fd2F0Y2hw
b2ludFNldChDbGVhcldhdGNocG9pbnQpCi17Ci19Ci0KLUluZmVycmVkVHlwZTo6fkluZmVycmVk
VHlwZSgpCi17Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCi17Ci0gICAg
aWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVjdGVkOwotfQotCi1ib29sIElu
ZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCi17Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBjYW5XYXRjaChs
b2NrZXIsIGV4cGVjdGVkKTsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3Ap
OwotCi0gICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKLX0KLQotdm9pZCBJbmZl
cnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKLXsKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgYWRkV2F0Y2hwb2ludChsb2Nr
ZXIsIHdhdGNocG9pbnQpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRl
c2NyaXB0b3IoKSk7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3co
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IERlc2NyaXB0b3Igb2xkVHlwZTsKLSAgICBEZXNjcmlwdG9yIG15VHlwZTsKLSAgICBib29sIHJl
c3VsdDsKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAgICAgb2xkVHlwZSA9IGRlc2NyaXB0b3IobG9ja2VyKTsKLSAgICAgICAgbXlUeXBlID0g
RGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUpOwotCi0gICAgICAgIG15VHlwZS5tZXJnZShvbGRU
eXBlKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChvbGRUeXBlICE9IG15VHlwZSk7IC8vIFRo
ZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCi0KLSAg
ICAgICAgYm9vbCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKLSAgICAgICAg
cmVzdWx0ID0ga2luZChsb2NrZXIpICE9IFRvcDsKLSAgICAgICAgaWYgKCFzZXRSZXN1bHQpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBJbmZlcnJlZFR5cGVG
aXJlRGV0YWlsIGRldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUudWlkKCksIG9sZFR5cGUsIG15VHlw
ZSwgdmFsdWUpOwotICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgRGVzY3JpcHRvciBvbGRUeXBl
OwotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
ICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBpZiAoIXNldChsb2Nr
ZXIsIHZtLCBUb3ApKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEluZmVycmVk
VHlwZUZpcmVEZXRhaWwgZGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZS51aWQoKSwgb2xkVHlwZSwg
VG9wLCBKU1ZhbHVlKCkpOwotICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwp
OwotfQotCi1ib29sIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKLXsKLSAgICAvLyBCZSBk
ZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2Ug
ZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09
IG5ld0Rlc2NyaXB0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgc2hvdWxk
RmlyZVdhdGNocG9pbnRTZXQgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBUaGUgbmV3IGRlc2NyaXB0
b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgcHJldmlvdXMgb25lLgotICAgIEFTU0VS
VChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRlc2NyaXB0b3IobG9ja2VyKSkpOwotCi0gICAgLy8g
SWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0
IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlzIG51bGwuCi0gICAgaWYgKGRlc2NyaXB0b3IobG9j
a2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQotICAgICAgICBB
U1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7Ci0KLSAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ug
c3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQg
bm93LiBJZgotICAgIC8vIGFueW9uZSBpcyB3YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRv
IFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRoaXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KLSAgICBp
ZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBvaW50KSB7Ci0gICAgICAg
IC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRo
ZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4KLSAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNl
dC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOwotCi0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRv
IGRvIGV4cGVuc2l2ZSB0aGluZ3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVk
IHRvIHdhdGNoIHRoaXMgdHlwZSBhbmQKLSAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2Vk
LiBBc3N1bWUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBh
bnkgbW9yZSB0aGluZ3MgZm9yCi0gICAgICAgIC8vIGl0LgotICAgICAgICBuZXdEZXNjcmlwdG9y
ID0gVG9wOwotCi0gICAgICAgIHNob3VsZEZpcmVXYXRjaHBvaW50U2V0ID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCi0gICAgICAgIG1fc3RydWN0
dXJlID0gbnVsbHB0cjsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUt
PnN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3RydWN0dXJl
ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOwotICAgIH0KLQotICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVz
Y3JpcHRvciBraW5kLgotICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOwotCi0gICAg
Ly8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KLSAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2Nr
ZXIpID09IG5ld0Rlc2NyaXB0b3IpOwotCi0gICAgcmV0dXJuIHNob3VsZEZpcmVXYXRjaHBvaW50
U2V0OwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKFZNJiB2bSkKLXsK
LSAgICAvLyBGSVhNRTogRmluZCBhbiBlbGVnYW50IGFuZCBjaGVhcCB3YXkgdG8gdGhyZWFkIGlu
Zm9ybWF0aW9uIGFib3V0IHdoeSB3ZSBnb3QgaGVyZSBpbnRvIHRoZSBmaXJlCi0gICAgLy8gZGV0
YWlsIGluIHNldCgpLgotICAgIAotICAgIERlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsKLSAgICBE
ZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3I7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIG9sZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxv
Y2tlcik7Ci0gICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBvbGREZXNjcmlwdG9yOwotICAgICAgICBu
ZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFz
ZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwodGhpcywgbnVsbHB0ciwgb2xk
RGVzY3JpcHRvciwgbmV3RGVzY3JpcHRvciwgSlNWYWx1ZSgpKTsKLSAgICBtX3dhdGNocG9pbnRT
ZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVz
cGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi12b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNo
IChraW5kKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAgICAgICAgb3V0LnBy
aW50KCJCb3R0b20iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpC
b29sZWFuOgotICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgb3V0LnByaW50KCJPdGhlciIp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAgICAg
ICBvdXQucHJpbnQoIkludDMyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVk
VHlwZTo6TnVtYmVyOgotICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKLSAgICAgICAgb3V0LnByaW50KCJT
dHJpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTeW1ib2w6
Ci0gICAgICAgIG91dC5wcmludCgiU3ltYm9sIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICBvdXQucHJpbnQoIkJpZ0ludCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6
Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgot
ICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgotICAgICAgICBvdXQucHJp
bnQoIk9iamVjdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdE9yT3RoZXI6Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKLSAgICAgICAgb3V0LnByaW50
KCJUb3AiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMjM5OTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ29uY3VycmVudEpT
TG9jay5oIgotI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCi0jaW5jbHVkZSAiSXNvQ2Vs
bFNldC5oIgotI2luY2x1ZGUgIkpTQ2FzdC5oIgotI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgot
I2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8v
IFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVuY2Ugb2YgdGhlIHR5cGVzIG9m
IG9iamVjdCBwcm9wZXJ0aWVzLgotCi1jbGFzcyBJbmZlcnJlZFR5cGUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCi0gICAgewotICAgICAgICByZXR1cm4gJnZtLmluZmVycmVkVHlwZVNwYWNlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBJbmZlcnJlZFR5cGUqIGNyZWF0ZShWTSYpOwotCi0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLSAgICAK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIGVudW0g
S2luZCA6IHVpbnQ4X3QgewotICAgICAgICBCb3R0b20sCi0gICAgICAgIEJvb2xlYW4sCi0gICAg
ICAgIE90aGVyLAotICAgICAgICBJbnQzMiwKLSAgICAgICAgTnVtYmVyLAotICAgICAgICBTdHJp
bmcsCi0gICAgICAgIFN5bWJvbCwKLSAgICAgICAgQmlnSW50LAotICAgICAgICBPYmplY3RXaXRo
U3RydWN0dXJlLAotICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKLSAgICAgICAg
T2JqZWN0LAotICAgICAgICBPYmplY3RPck90aGVyLAotICAgICAgICBUb3AKLSAgICB9OwotCi0g
ICAgc3RhdGljIEtpbmQga2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgaGFzU3RydWN0dXJlKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
a2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGNsYXNzIERlc2NyaXB0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgRGVzY3Jp
cHRvcigpCi0gICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCi0gICAgICAgICAgICAsIG1fc3Ry
dWN0dXJlKG51bGxwdHIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIERlc2NyaXB0
b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCi0gICAgICAgICAg
ICA6IG1fa2luZChraW5kKQotICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgRGVz
Y3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKLQotICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBm
b3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7Ci0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tpbmQgIT0gQm90
dG9tIHx8IG1fc3RydWN0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KLQotICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJ
ZEZsYWdzKCkgY29uc3Q7Ci0KLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFs
dWUoSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKLSAgICAgICAgICAgIGNhc2UgQm90dG9tOgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNCb29sZWFuKCk7Ci0gICAgICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwotICAgICAgICAgICAgY2FzZSBJbnQz
MjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotICAgICAgICAgICAg
Y2FzZSBOdW1iZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7Ci0g
ICAgICAgICAgICBjYXNlIFN0cmluZzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNT
dHJpbmcoKTsKLSAgICAgICAgICAgIGNhc2UgU3ltYm9sOgotICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc1N5bWJvbCgpOwotICAgICAgICAgICAgY2FzZSBCaWdJbnQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzQmlnSW50KCk7Ci0gICAgICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKLSAgICAgICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlz
Q2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNP
YmplY3QoKTsKLSAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOwot
ICAgICAgICAgICAgY2FzZSBUb3A6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3Ro
ZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIu
bV9raW5kCi0gICAgICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRv
ciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNo
KG1fc3RydWN0dXJlKSBeIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOwotICAgICAgICB9
Ci0gICAgCi0gICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgRGVzY3JpcHRvciYpOwotICAgICAgICB2
b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGRlc2NyaXB0b3IgaXMgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KLSAgICAgICAg
Ym9vbCBzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLSAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBL
aW5kIG1fa2luZDsKLSAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKLSAgICB9OwotCi0g
ICAgQ29uY3VycmVudEpTTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQotCi0g
ICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSA6IG51bGxwdHIpOwotICAgIH0KLSAgICAKLSAgICBEZXNjcmlwdG9yIGRl
c2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOwotICAgIH0KLSAgICBEZXNjcmlwdG9yIGRl
c2NyaXB0b3IoKSBjb25zdAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgIH0KLSAg
ICAKLSAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpIGNvbnN0
IHsgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCk7IH0KLQotICAgIGJvb2wgaXNUb3Ao
KSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gVG9wOyB9Ci0gICAgYm9vbCBpc1JlbGV2YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kICE9IFRvcDsgfQotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBJbmZlcnJlZFR5cGUgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdz
IG5vdCByZWxldmFudCBpZiBpdCdzIFRvcC4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0
b3JlVmFsdWUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgRGVzY3JpcHRvciBjdXJyZW50RGVzY3JpcHRvciA9IGRlc2NyaXB0
b3JNYWluVGhyZWFkKCk7Ci0gICAgICAgIGlmIChjdXJyZW50RGVzY3JpcHRvci5pbmNsdWRlc1Zh
bHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGVzY3JpcHRvci5raW5kKCkg
IT0gVG9wOwotICAgICAgICByZXR1cm4gd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUg
aXJyZWxldmFudC4KLSAgICB2b2lkIG1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1ha2VUb3BTbG93KHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBpdCBjdXJyZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJ
bmZlcnJlZFR5cGUgZm9yIHRoaXMgZGVzY3JpcHRvci4gTm90ZSB0aGF0Ci0gICAgLy8gdGhpcyB3
aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFRvcC4KLSAgICBib29sIGNhbldhdGNoKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IERlc2NyaXB0b3ImKTsKLSAgICBib29sIGNhbldh
dGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKLSAgICAKLSAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgV2F0Y2hwb2ludCopOwotICAgIHZvaWQgYWRkV2F0Y2hw
b2ludChXYXRjaHBvaW50Kik7Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
LSAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6
Ci0gICAgSW5mZXJyZWRUeXBlKFZNJik7Ci0gICAgfkluZmVycmVkVHlwZSgpOwotCi0gICAgYm9v
bCB3aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwotICAgIHZv
aWQgbWFrZVRvcFNsb3coVk0mLCBQcm9wZXJ0eU5hbWUpOwotCi0gICAgLy8gSGVscGVyIGZvciB3
aWxsU3RvcmVWYWx1ZVNsb3coKSBhbmQgbWFrZVRvcFNsb3coKS4gVGhpcyByZXR1cm5zIHRydWUg
aWYgd2Ugc2hvdWxkIGZpcmUgdGhlCi0gICAgLy8gd2F0Y2hwb2ludCBzZXQuCi0gICAgYm9vbCBz
ZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKLSAgICAKLSAg
ICB2b2lkIHJlbW92ZVN0cnVjdHVyZShWTSYpOwotICAgIAotICAgIGZyaWVuZCBjbGFzcyBJbmZl
cnJlZFN0cnVjdHVyZTsKLSAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBv
aW50OwotCi0gICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKLSAgICAKLSAgICBL
aW5kIG1fa2luZCB7IEJvdHRvbSB9OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIFBv
aXNvbmVkLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODA3MTUKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OwotCi0gICAgLy8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0g
dG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKLSAgICAvLyBw
cm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXpl
ZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRwotICAgIC8vIHRocmVhZC4g
VGhlIERGRyB3aWxsIHVzZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdh
dGNoZXMuCi0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlSW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWlubGluZSB2b2lkIEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mIHZtKQotewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7Ci0gICAg
Ci0gICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIHJlbW92ZVN0cnVjdHVyZSh2bSk7Ci0gICAgfQotICAgIAotICAgIHZtLmluZmVy
cmVkVHlwZXNXaXRoRmluYWxpemVycy5yZW1vdmUodGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
ODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKLQot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNz
SW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlw
ZVRhYmxlKSB9OwotCi1JbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0
ZShWTSYgdm0pCi17Ci0gICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBl
VGFibGUodm0pOwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQotewotICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19j
YXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7Ci0gICAgaW5mZXJyZWRUeXBlVGFibGUtPklu
ZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKLX0KLQotU3RydWN0dXJlKiBJ
bmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5
cGVUYWJsZSo+KGNlbGwpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGluZmVycmVkVHlwZVRhYmxlLT5jZWxsTG9j
aygpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5mZXJyZWRUeXBlVGFibGUtPm1f
dGFibGUpIHsKLSAgICAgICAgYXV0byBlbnRyeVZhbHVlID0gZW50cnkudmFsdWU7Ci0KLSAgICAg
ICAgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChl
bnRyeVZhbHVlLT5pc1JlbGV2YW50KCkpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRy
eVZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsK
LSAgICB9Ci19Ci0KLUluZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBB
YnN0cmFjdExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgYXV0byBpdGVy
ID0gbV90YWJsZS5maW5kKHVpZCk7Ci0gICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbmZlcnJlZFR5cGUqIGVudHJ5VmFsdWUgPSBp
dGVyLT52YWx1ZS5nZXQoKTsKLSAgICBpZiAoIWVudHJ5VmFsdWUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRh
dGVkIHR5cGVzLgotICAgIGlmICghZW50cnlWYWx1ZS0+aXNSZWxldmFudCgpKSB7Ci0gICAgICAg
IGl0ZXItPnZhbHVlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIHJldHVybiBlbnRyeVZhbHVlOwotfQotCi1JbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRh
YmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGNlbGxMb2NrKCkpOwotICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOwotfQotCi1J
bmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKLXsKLSAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci19Ci0KLWJvb2wg
SW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAotICAgIFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQot
ewotICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5
IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgotICAgIAotICAgIGlmIChhZ2UgPT0g
U3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5KSB7Ci0gICAgICAgIFRhYmxlVHlwZTo6aXRl
cmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICBp
ZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBB
YnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgotCi0gICAgICAgIEluZmVycmVkVHlwZSogZW50cnlW
YWx1ZSA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIWVudHJ5VmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoZW50cnlWYWx1ZS0+
d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0
OwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAg
ICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJp
ZXI8SW5mZXJyZWRUeXBlPigpKTsKLSAgICB9Ci0gICAgSW5mZXJyZWRUeXBlKiBlbnRyeVZhbHVl
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlw
ZTo6Y3JlYXRlKHZtKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRoaXMsIGluZmVycmVkVHlwZSk7Ci0gICAg
ICAgIGVudHJ5VmFsdWUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgfSBlbHNlIGlmICghZW50cnlWYWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChlbnRyeVZhbHVlLT53aWxs
U3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCi17Ci0gICAgLy8g
VGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVh
ZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCi0gICAgaWYgKGFnZSA9PSBTdG9yZWRQcm9wZXJ0eUFn
ZTo6T2xkUHJvcGVydHkpIHsKLSAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90
YWJsZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fdGFi
bGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0
b3AuCi0KLSAgICAgICAgSW5mZXJyZWRUeXBlKiBlbnRyeVZhbHVlID0gaXRlci0+dmFsdWUuZ2V0
KCk7Ci0KLSAgICAgICAgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGVudHJ5VmFsdWUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGl0
ZXItPnZhbHVlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBUYWJsZVR5
cGU6OkFkZFJlc3VsdCByZXN1bHQ7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGNlbGxMb2NrKCkpOwotICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5h
bWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOwotICAgIH0KLSAgICBpZiAo
IXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKLX0KLQotSW5mZXJyZWRUeXBlVGFibGU6OkluZmVy
cmVkVHlwZVRhYmxlKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVRhYmxl
U3RydWN0dXJlLmdldCgpKQotewotfQotCi1JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlw
ZVRhYmxlKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFi
bGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0jaW5jbHVkZSAiSlNDYXN0Lmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBz
b21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0
aGUgU3RydWN0dXJlCi0vLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldGltZSBlYXNpZXIgdG8g
bWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlz
IHRoaW5nCi0vLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRo
aXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVz
Ci0vLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVz
IGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKLS8vIGFz
IGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBo
YXBwaWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KLS8vIGRpZmZlcmVu
dCBzdHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNl
dHMgb2Ygb2JqZWN0cy4KLQotY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotCi0gICAgc3RhdGlj
IEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKLQotICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0gICAgCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICAvLyBHZXQgdGhlIGN1cnJlbnQg
aW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBO
dWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKLSAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgcHJvcGVydHkuCi0gICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwotICAgIEluZmVycmVkVHlwZSogZ2V0
KFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci0gICAgSW5mZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlOYW1l
KTsKLQotICAgIGVudW0gY2xhc3MgU3RvcmVkUHJvcGVydHlBZ2UgeyBOZXdQcm9wZXJ0eSwgT2xk
UHJvcGVydHkgfTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlw
ZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0
J3Mgbm90Ci0gICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5vdGUgdGhhdCB0aGlzIHRhYmxl
IHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KLSAgICBib29sIHdpbGxTdG9yZVZh
bHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBTdG9yZWRQcm9wZXJ0eUFnZSk7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3BlcnR5LiBVc2VmdWwgaWYgd2Ug
ZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQuCi0gICAgdm9pZCBtYWtlVG9w
KFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSk7Ci0KLXByaXZhdGU6Ci0gICAg
SW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKLSAgICB+SW5mZXJyZWRUeXBlVGFibGUoKTsKLQotICAg
IC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgotICAgIC8vIFRvcDogbnVsbCB2YWx1ZSBp
biB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9yIGFic2VuY2UgZnJvbSB0YWJsZS4KLSAg
ICAvLwotICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVybWluZSBpZiBhYnNlbmNlIGZyb20gdGhl
IHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0gICAgLy8g
cHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5nIHN0cnVjdHVyZS4gSGVuY2UsIGRlcGVu
ZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1heSBoYXZlCi0gICAgLy8gZGlmZmVyZW50
IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFzcyBkZXRlcm1pbmVzIGlmIHRoZSBvd25p
bmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eQotICAgIC8vIGlzIHRoYXQgd2UgZGlm
ZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxhY2Ugb3IgdHJhbnNpdGlvbi4gSWYgd2Un
cmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5Ci0gICAgLy8gKHRyYW5zaXRpb24pLCB0aGVuIGFic2Vu
Y2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5nIHRvIGFuIGV4aXN0aW5nIHByb3BlcnR5
IChyZXBsYWNlKSwgdGhlbgotICAgIC8vIGFic2VuY2UgbWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMg
d29yaywgd2UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1
cmVzLCBTMSBhbmQKLSAgICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5mZXJyZWRUeXBlVGFibGUg
YW5kIG5laXRoZXIgb2YgdGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBt
YXkKLSAgICAvLyB3YW50IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGlsZSBTMiBtYXkgd2Fu
dCB0byBhZGQgUCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNlZCBhYnNlbmNlCi0g
ICAgLy8gdG8gaW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0IGFic2VuY2UgdG8g
bWVhbiBCb3R0b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5vbi1Ub3AKLSAgICAvLyBl
bnRyeSBpbiB0aGUgdGFibGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRv
cCwgYW5kIHdvdWxkIHVzZSBTMidzIHR5cGUuIENsZWFybHksCi0gICAgLy8gdGhhdCdzIGJhZC4g
V2UgYXZvaWQgc3VjaCBjb25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3
YXlzIGFkZHMgYW4gZW50cnkuIEhlbmNlLAotICAgIC8vIGFic2VuY2UtbWVhbnMtYm90dG9tIG9u
bHkgY29tZXMgaW50byBwbGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJy
ZWRUeXBlVGFibGUgd2FzCi0gICAgLy8gY3JlYXRlZC4KLSAgICB1c2luZyBUYWJsZVR5cGUgPSBI
YXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5
cGU+LCBJZGVudGlmaWVyUmVwSGFzaD47Ci0KLSAgICBUYWJsZVR5cGUgbV90YWJsZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUxvYWRlci5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIGNs
YXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OworY2xhc3MgSlNNb2R1bGVSZWNvcmQ7CiBjbGFz
cyBTb3VyY2VDb2RlOwogCiBjbGFzcyBKU01vZHVsZUxvYWRlciBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDgg
KzE4NSw2IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJl
SUQpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHByZXBhcmVUb1B1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHN0cnVjdHVyZUlELCBz
dHJ1Y3R1cmUpOwotICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKLSAgICBzdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2hvdWxkT3B0aW1pemUpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCiAgICAgICAg
IHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTI4MSw3ICsy
NzksNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIEFT
U0VSVCghaXNDb3B5T25Xcml0ZShpbmRleGluZ01vZGUoKSkpOwotICAgICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aGFzSW5mZXJyZWRUeXBlcygpKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVk
IGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CkBAIC0zMTgs
OSArMzE1LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlKAogICAgICAgICBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgb2Zmc2V0KTsKICAgICBpZiAobmV3U3RydWN0dXJlKSB7Ci0gICAgICAgIG5l
d1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRpb24oCi0gICAgICAg
ICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSh2bSkpOwpAQCAtMzQxLDE4ICszMzUsMTIgQEAgQUxX
QVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIH0KIAogICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOwotICAgIG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVz
LCBoYXNJbmZlcnJlZFR5cGUpOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7Ci0gICAgICAgICAgICBz
dHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKLSAgICAgICAgICAgICAgICB2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQ
dXRCeUlkKTsKLSAgICAgICAgfQotCiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7CiAKICAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vz
c29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ip
IHx8IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1
ZSkgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yT3JWYWx1ZSkpIHsKQEAgLTM3NCw4ICszNjIsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluCiAgICAgCiAgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oCiAgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hw
b2ludEZpcmUpOwotICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0
aW9uKAotICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0g
UHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZz
ZXQpOwogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlz
aW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSwxNSArMzcxLDExIEBAIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm8KICAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKICAgICAg
ICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCi0gICAgSW5mZXJyZWRUeXBl
VGFibGUqIHR5cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7Ci0KICAgICBmb3Ig
KHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJl
ID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlv
dXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRy
eShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQs
IHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7Ci0gICAgICAgIGlmICh0eXBlVGFi
bGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkK
LSAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3RO
b3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTUwMyw3ICs0OTksNiBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRl
c0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJs
ZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0cmFu
c2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNTM2LDEy
ICs1MzEsNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuCiAgICAg
Ly8gICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQg
YWxzbyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAogICAgIC8vICAgcmVtb3Zh
bHMuCiAgICAgLy8KLSAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFzc3VtZXMgdGhhdCByZW1v
dmFsIGhhcyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaWYgd2UgY291
bGQKLSAgICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJlLWFkZCBpdCBsYXRlciwg
dGhlbiB0aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24gd291bGRuJ3QKLSAgICAv
LyAgIHdvcmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRoZXIgcG9pc29uZWQgdHlw
ZSBpbmZlcmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCi0gICAgLy8gICBo
YXNCZWVuRGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0aGUgZW50cnkgYXMgVG9w
IGJ5IGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0Ci0gICAgLy8gICBpbnN0ZWFk
LCBoYXMgYSBudWxsIGVudHJ5LgotICAgIAogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5j
YWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKQEAgLTg5Miw0MyAr
ODgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFBybwogICAgIHNl
dERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6
d2lsbFN0b3JlVmFsdWVTbG93KAotICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwKLSAgICBJbmZlcnJlZFR5cGVU
YWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UgYWdlKQotewotICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsKLSAgICBBU1NFUlQoIWhhc0JlZW5EaWN0aW9uYXJ5KCkpOwotCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShWTTo6Y2FuVXNlSklUKCksICJXZSBkb24ndCB3YW50IHRvIHVzZSBtZW1vcnkg
Zm9yIGluZmVycmVkIHR5cGVzIHVubGVzcyB3ZSdyZSB1c2luZyB0aGUgSklULiIpOwotCi0gICAg
Ly8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBl
bHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQotICAgIC8vIGdy
YWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KLSAgICBJbmZlcnJlZFR5cGVU
YWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOwotICAgIGlmICghdGFibGUp
IHsKLSAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKLSAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5z
ZXQodm0sIHRoaXMsIHRhYmxlKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYg
d2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwotICAgIAotICAgIC8vIFdlIG11c3QgYmUg
Y2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBj
b25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAotICAgIC8vIGFscmVhZHksIHNvIHRoZSBwcm9w
ZXJ0eSBtdXN0IGJlIHByZXNlbnQuCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9w
ZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICBBU1NFUlQoZW50cnkpOwot
ICAgIAotICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKLSAgICAgICAgZW50cnktPmhhc0luZmVycmVk
VHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwg
YWdlKTsKLSAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICBwcm9wZXJ0eVRhYmxlLT51c2UoKTsgLy8gVGhpcyBtYWtlcyBpdCBzYWZlIHRvIHVz
ZSBlbnRyeSBhYm92ZS4KLX0KLQogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0x
MDk5LDggKzEwNTEsNiBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2Fm
ZSk7CiAgICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAg
ICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKLQotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29s
IFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2su
aCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJs
ZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNs
dWRlICJKU1R5cGUuaCIKQEAgLTc2LDEzICs3NSwxMSBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRy
eSB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CiAgICAgdWludDhfdCBhdHRyaWJ1dGVzOwotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOyAv
LyBUaGlzIGNhY2hlcyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5IGhhcyBhbiBpbmZlcnJlZCB0
eXBlIGluIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMgdXNlZCBmb3IgYSBmYXN0IGNo
ZWNrIGluIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgogCiAgICAgUHJvcGVydHlNYXBF
bnRyeSgpCiAgICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAgICwgb2Zmc2V0KGludmFsaWRP
ZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcygwKQotICAgICAgICAsIGhhc0luZmVycmVkVHlw
ZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTAsNyArODcsNiBAQCBzdHJ1Y3QgUHJv
cGVydHlNYXBFbnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zm
c2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgLCBoYXNJbmZl
cnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQodGhpcy0+YXR0cmlidXRlcyA9
PSBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC00MzUsNyArNDMxLDYgQEAgcHVibGljOgogCiAgICAg
UHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBi
b29sJiBoYXNJbmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IGludGVy
bmFsaXNoIG1ldGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3RvciB3aGlsZSBwb3NzaWJseSBo
b2xkaW5nIHRoZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRoZXJlIGlzIG5vIGd1YXJhbnRl
ZSB3aGV0aGVyIHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFueSBwYXJ0aWN1bGFyCkBAIC02
MDUsNTUgKzYwMCw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RhcnRXYXRjaGluZ0ludGVybmFsUHJv
cGVydGllcyh2bSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOwotICAgIH0K
LQotICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCi0gICAgewotICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZl
cnJlZFR5cGVUYWJsZS5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci0gICAgewotICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5cGVG
b3IodWlkKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmRlc2NyaXB0b3IoKTsKLSAgICAg
ICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOwotICAgIH0KLQotICAgIC8vIENhbGwgdGhpcyB3
aGVuIHdlIGtub3cgdGhhdCB0aGlzIGlzIGEgYnJhbmQgbmV3IHByb3BlcnR5LiBOb3RlIHRoYXQg
aXQncyBub3QgZW5vdWdoIGZvciB0aGUKLSAgICAvLyBwcm9wZXJ0eSB0byBiZSBicmFuZCBuZXcg
dG8gc29tZSBvYmplY3QuIEl0IGhhcyB0byBiZSBicmFuZCBuZXcgdG8gdGhlIFN0cnVjdHVyZS4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKAot
ICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkT3B0aW1pemUpCi0gICAgewotICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25h
cnkoKSB8fCAoIXNob3VsZE9wdGltaXplICYmICFtX2luZmVycmVkVHlwZVRhYmxlKSB8fCAhVk06
OmNhblVzZUpJVCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aWxsU3RvcmVWYWx1
ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5
cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2U6Ok5ld1Byb3BlcnR5KTsKLSAgICB9Ci0KLSAgICAv
LyBDYWxsIHRoaXMgd2hlbiB3ZSBrbm93IHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSBmb3Ig
dGhlIG9iamVjdCwgYnV0IG5vdCBuZXcgZm9yIHRoZQotICAgIC8vIHN0cnVjdHVyZS4gVGhlcmVm
b3JlLCB1bmRlciB0aGUgSW5mZXJyZWRUeXBlVGFibGUncyBydWxlcywgYWJzZW5jZSBvZiB0aGUg
cHJvcGVydHkgZnJvbSB0aGUKLSAgICAvLyB0YWJsZSBtZWFucyBUb3AgcmF0aGVyIHRoYW4gQm90
dG9tLgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJh
bnNpdGlvbigKLSAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQotICAgIHsKLSAgICAgICAgaWYgKGhhc0Jl
ZW5EaWN0aW9uYXJ5KCkgfHwgIW1faW5mZXJyZWRUeXBlVGFibGUgfHwgIVZNOjpjYW5Vc2VKSVQo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6OlN0
b3JlZFByb3BlcnR5QWdlOjpOZXdQcm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGlz
IHdoZW4gd2Uga25vdyB0aGF0IHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGV4aXN0cyBhbmQgaGFz
IGFuIGVudHJ5IGZvciB0aGlzIHByb3BlcnR5LgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxs
U3RvcmVWYWx1ZUZvclJlcGxhY2UoCi0gICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICFWTTo6Y2FuVXNlSklUKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0
eUFnZTo6T2xkUHJvcGVydHkpOwotICAgIH0KLQogICAgIFJlZjxTdHJ1Y3R1cmVTaGFwZT4gdG9T
dHJ1Y3R1cmVTaGFwZShKU1ZhbHVlLCBib29sJiBzYXdQb2x5UHJvdG9TdHJ1Y3R1cmUpOwogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODAwLDkgKzc0Niw2IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVz
KFZNJik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdygK
LSAgICAgICAgVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wsIEluZmVycmVkVHlwZVRh
YmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSk7Ci0KICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJh
bnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9u
TGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKQEAgLTgzMyw4ICs3NzYsNiBAQCBwcml2
YXRlOgogICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3QgR0Mgd2UgYXZvaWQgY2xlYXJpbmcg
dGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0
eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKLSAgICBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRUeXBlVGFibGU+IG1faW5mZXJyZWRUeXBlVGFibGU7Ci0KICAgICBtdXRhYmxlIElubGluZVdh
dGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNT
RVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE4ICsxMjAsMTEg
QEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcgogQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBib29sIGhhc0luZmVy
cmVkVHlwZTsKLSAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhh
c0luZmVycmVkVHlwZSk7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cykKIHsKLSAgICBib29sIGhhc0luZmVycmVkVHlwZTsKLSAgICByZXR1cm4gZ2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKQot
ewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0
dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTQ0LDcgKzEzNyw2IEBAIEFM
V0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJuIGlu
dmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAg
aGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4gZW50
cnktPm9mZnNldDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2IEBACiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1ZGUgIkluZGlyZWN0RXZh
bEV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUg
IkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIklu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmgiCkBAIC0zMDMsNyArMzAyLDYgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNlbGxEYW5nZXJvdXNCaXRzSGVhcENl
bGxUeXBlLmdldCgpLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKQogICAgICwgZnVuY3Rpb25T
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhlYXBDZWxsVHlwZS5n
ZXQoKSwgSlNGdW5jdGlvbikKICAgICAsIGdlbmVyYXRvckZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTR2VuZXJh
dG9yRnVuY3Rpb24pCi0gICAgLCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJlZFR5cGUpCiAg
ICAgLCBpbmZlcnJlZFZhbHVlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3Rp
YmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRWYWx1ZSkKICAgICAsIGludGVybmFs
RnVuY3Rpb25TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEludGVybmFsRnVuY3Rpb24pCiAjaWYgRU5BQkxFKElOVEwpCkBA
IC0zMzQsNyArMzMyLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogI2VuZGlmCiAgICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50
cyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCiAgICAgLCBleGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSkK
LSAgICAsIGluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyhpbmZlcnJlZFR5cGVTcGFjZSkKICAg
ICAsIGluZmVycmVkVmFsdWVzV2l0aEZpbmFsaXplcnMoaW5mZXJyZWRWYWx1ZVNwYWNlKQogICAg
ICwgZXZhbENvZGVCbG9ja1NwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEV2YWxDb2RlQmxvY2spCiAgICAgLCBmdW5jdGlvbkNv
ZGVCbG9ja1NwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEZ1bmN0aW9uQ29kZUJsb2NrKQpAQCAtNDI3LDggKzQyNCw2IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgaW5mZXJyZWRUeXBlU3RydWN0dXJl
LnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7Ci0gICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJl
ZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGlu
ZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw2IEBAIHB1Ymxp
YzoKICAgICBJc29TdWJzcGFjZSBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7CiAgICAg
SXNvU3Vic3BhY2UgZnVuY3Rpb25TcGFjZTsKICAgICBJc29TdWJzcGFjZSBnZW5lcmF0b3JGdW5j
dGlvblNwYWNlOwotICAgIElzb1N1YnNwYWNlIGluZmVycmVkVHlwZVNwYWNlOwogICAgIElzb1N1
YnNwYWNlIGluZmVycmVkVmFsdWVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbnRlcm5hbEZ1bmN0
aW9uU3BhY2U7CiAjaWYgRU5BQkxFKElOVEwpCkBAIC00MDksNyArNDA4LDYgQEAgcHVibGljOgog
ICAgIAogICAgIElzb0NlbGxTZXQgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3Ry
YWludHM7CiAgICAgSXNvQ2VsbFNldCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5h
bGl6ZXJzOwotICAgIElzb0NlbGxTZXQgaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzOwogICAg
IElzb0NlbGxTZXQgaW5mZXJyZWRWYWx1ZXNXaXRoRmluYWxpemVyczsKICAgICAKICAgICBzdHJ1
Y3QgU3BhY2VBbmRGaW5hbGl6ZXJTZXQgewpAQCAtNTUxLDggKzU0OSw2IEBAIHB1YmxpYzoKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9u
UmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0
dXJlOwo=
</data>
<flag name="review"
          id="375987"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359196</attachid>
            <date>2019-01-15 13:08:44 -0800</date>
            <delta_ts>2019-01-15 16:59:03 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>178270</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5OTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxOS0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBUcnkgcmlwcGluZyBvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCBtaWdodCBiZSBhIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtp
LgorCQorICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgaW5mZXJyZWQgdHlwZXMgZnJvbSBKU0Mu
IEluaXRpYWwgZXZpZGVuY2Ugc2hvd3MgdGhhdAorICAgICAgICB0aGlzIG1pZ2h0IGJlIGFyb3Vu
ZCBhIH4xJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvRml0
cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHA6CisgICAgICAgIChXVEY6
OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIpOgorICAgICAgICAoSlND
OjpQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnJlcXVpcmVkVHlwZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNUeXBlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxs
eUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6
OmFkZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmR1bXBJbkNv
bnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckluZmVycmVkVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmluZmVycmVkVHlwZUZvclByb3Bl
cnR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2hlY2tJbmZlcnJlZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGdlbmVyYXRvci9EU0wu
cmI6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAq
IGxsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wp
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmg6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
T2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp3aWxs
U3RvcmVWYWx1ZVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgICogcnVu
dGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorCiAyMDE5LTAxLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBvcHRpb24gdG8gSlNDIHRvIGR1bXAgbWVtb3J5IGZvb3RwcmludCBvbiBz
Y3JpcHQgY29tcGxldGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC03OTMsMTAgKzc5Myw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKICAgICBy
dW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lcy5oCiAgICAgcnVudGltZS9JbmRleGluZ1R5cGUu
aAotICAgIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAotICAgIHJ1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50LmgKLSAgICBydW50aW1lL0luZmVycmVkVHlwZS5oCi0gICAgcnVu
dGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCiAgICAgcnVudGltZS9JbmZlcnJlZFZhbHVlLmgKICAg
ICBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaAogICAgIHJ1bnRpbWUvSW50MTZBcnJheS5o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw3
ICszNDQsNiBAQCBkZmcvREZHR3JhcGguY3BwCiBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiBk
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAot
ZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAogZGZnL0RGR0luc2VydGlvblNldC5jcHAKIGRm
Zy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKIGRmZy9ERkdJbnRlZ2VyUmFuZ2VP
cHRpbWl6YXRpb25QaGFzZS5jcHAKQEAgLTc2OCwxMCArNzY3LDYgQEAgcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAKIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNw
cAogcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAotcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZS5jcHAKLXJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAotcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCi1ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAogcnVu
dGltZS9JbmZlcnJlZFZhbHVlLmNwcAogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAog
cnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1VuaWZpZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNiBAQCAk
KFNSQ1JPT1QpL2RmZy9ERkdHcmFwaC5jcHAKICQoU1JDUk9PVCkvZGZnL0RGR0dyYXBoU2FmZXBv
aW50LmNwcAogJChTUkNST09UKS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAogJChTUkNST09UKS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCi0kKFNSQ1JPT1QpL2RmZy9ERkdJbmZlcnJl
ZFR5cGVDaGVjay5jcHAKICQoU1JDUk9PVCkvZGZnL0RGR0luc2VydGlvblNldC5jcHAKICQoU1JD
Uk9PVCkvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogJChTUkNST09UKS9k
ZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC03MzIsMTAgKzczMSw2
IEBAICQoU1JDUk9PVCkvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKICQoU1JDUk9PVCkvcnVudGlt
ZS9JZGVudGlmaWVyLmNwcAogJChTUkNST09UKS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICQo
U1JDUk9PVCkvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAotJChTUkNST09UKS9y
dW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAotJChTUkNST09UKS9ydW50aW1lL0luZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKLSQoU1JDUk9PVCkvcnVudGltZS9JbmZlcnJlZFR5cGUu
Y3BwCi0kKFNSQ1JPT1QpL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCiAkKFNSQ1JPT1Qp
L3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAKICQoU1JDUk9PVCkvcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcAogJChTUkNST09UKS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
Mzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBACiAJCTBG
MDcwQTQ5MUQ1NDNBOTMwMDZFNzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDcwQTQ0MUQ1NDNBODkwMDZFNzIz
MiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjA3MEE0QjFENTQzQTk4MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3
MEE0NjFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAy
MzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGls
YXRpb25FZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBBNzUyMTFCOTRCRkE5
MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1By
aXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MEIyODZBMUVCOEU2Q0QwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjI4NkQxRUI4RTZENTAwMEVC
NUQyIC8qIEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCMjg2ODFFQjhFNkNEMDAwRUI1RDIgLyogSlNN
YXJraW5nQ29uc3RyYWludFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4
Mzk4MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MDgsNyArNTA3LDYgQEAKIAkJMEZCNDY3
N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRv
bUluZGljZXMuaCAqLzsgfTsKIAkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxT
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2
NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8q
IElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMu
aCAqLzsgfTsKLQkJMEZCNDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2
Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBG
QjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVB
NkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJy
YWxDb250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5s
aW5lcy5oICovOyB9OwogCQkwRkI0RkI3NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQ
YXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC01MzQs
OCArNTMyLDYgQEAKIAkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5oICovOyB9OwogCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLzsgfTsK
IAkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1OEIxOUI3QTUz
MTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oICovOyB9OwotCQkwRkJGOTJCOTFGRDc2
RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkY5MkI4MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZl
cnJlZFN0cnVjdHVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkY5MkI3MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkMw
OTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERG
R09TUkV4aXQuaCAqLzsgfTsKIAkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQyIC8qIERGR1RodW5r
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3
QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovOyB9OwogCQkwRkMyMENCNjE4NTJF
MkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMjBDQjQxODUyRTJDNjAwQzlFOTU0
IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCAqLzsgfTsKQEAgLTU0OCw3ICs1NDQsNiBA
QAogCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3
MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDNzEyRTMx
N0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3
Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUw
QTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oICov
OyB9OwogCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Qzk3RjM4MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBo
YXNlLmggKi87IH07CiAJCTBGQzk3RjQwMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFj
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Qzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAg
LTczNiw4ICs3MzEsNiBAQAogCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU5ODdGMkMxNjdGRTg0QjAwM0MyRjhEIC8qIERGR09TUkV4aXRDb21waWxhdGlv
bkluZm8uaCAqLzsgfTsKIAkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsg
fTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVC
MUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkZDOTIx
NDFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTMxQjk0RTgzRTAwNzFE
RDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLzsgfTsKIAkJMEZGQzkyMTYxQjk0RkIz
RTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovOyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29u
c3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFC
IC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDUwLDggKzIwNDMsNiBAQAogCQkwRjA3
MEE0NTFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhcmdlQWxsb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMDcwQTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9j
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFyZ2VBbGxvY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDc3NkJEMTRGRjAwMjgwMDEwMjMz
MiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRDb21waWxhdGlvbkVmZm9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEIyODY3MUVCOEU2Q0QwMDBFQjVEMiAvKiBK
U01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMEIyODY4MUVCOEU2Q0QwMDBFQjVEMiAvKiBKU01hcmtpbmdDb25z
dHJhaW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hcmtp
bmdDb25zdHJhaW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBC
Mjg2OTFFQjhFNkNEMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYWtQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI3MDYsNyArMjY5Nyw2IEBACiAJCTBGQjQ2NzdDMUZEREE2RDkwMDNG
Q0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IElzb0NlbGxTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc3
RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJc29DZWxsU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdG9tSW5kaWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGVJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBH
Q0RlZmVycmFsQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0Rl
ZmVycmFsQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3RDFE
OTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWlu
aWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElE
Lmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjc0NiwxMCArMjczNiw2IEBACiAJCTBGQkUwRjcwMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdVbmlmaWNhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1VuaWZpY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkYxNThBMTlCN0E1MzEwMDY5NUREMCAvKiBE
RkdCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdC
bG9ja1NldC5jcHA7IHBhdGggPSBkZmcvREZHQmxvY2tTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkJGMTU4QjE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrU2V0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkJGOTJCNTFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVy
cmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQkY5MkI2MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFN0cnVjdHVyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQkY5MkI3MUZENzZGRkMwMEFDMjhBOCAvKiBJ
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGQkY5MkI4MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFN0cnVjdHVyZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyog
REZHT1NSRXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbi5oOyBwYXRoID0gZGZnL0RGR0NvbW1vbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyog
REZHT1NSRXhpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdP
U1JFeGl0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI3NzIsOCArMjc1OCw2IEBACiAJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkz
QyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJp
ZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MDkxNDA0
M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwOyBwYXRoID0gZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0lu
ZmVycmVkVHlwZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
ZmVycmVkVHlwZUNoZWNrLmg7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMwODksOSArMzA3Myw2IEBACiAJCTBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5
cGVvZlR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNzFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlb2ZUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI4MEJC
MjBBNzk0NzAwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRDb2RlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYg
LyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZGQzky
MTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0g
ZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9
IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJh
eUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjc0NywxNSArNjcyOCw2IEBACiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oICovLAogCQkJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRp
cmVjdEV2YWxFeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkxNDM4NkE3NzFERDY5ODlDMDA4NjUyQzQg
LyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovLAotCQkJCTBGQkY5MkI2MUZENzZGRkMwMEFD
MjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5jcHAgKi8sCi0JCQkJMEZCRjkyQjgxRkQ3NkZGQzAw
QUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmggKi8sCi0JCQkJMEZCRjkyQjUxRkQ3NkZGQzAw
QUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCi0JCQkJMEZCRjky
QjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oICovLAot
CQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAotCQkJ
CTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKLQkJCQkwRkI0
Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5saW5lcy5oICovLAotCQkJCTBG
RkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi8sCi0JCQkJ
MEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8sCiAJCQkJ
MEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovLAogCQkJCTBG
RjhCREU5MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8sCiAJCQkJMEY0QUUw
NDIxRkUwRDI1NDAwRTIwODM5IC8qIEluZmVycmVkVmFsdWVJbmxpbmVzLmggKi8sCkBAIC03Mzc0
LDcgKzczNDYsNiBAQAogCQkJCUUzQkZBNUNEMjFFODUzQTEwMDlDMEVCQSAvKiBERkdEZXNpcmVk
R2xvYmFsUHJvcGVydHkuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCi0JCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFE
RDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVC
MDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3
QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC03
NDE5LDggKzczOTAsNiBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFw
aFNhZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uaCAqLywKLQkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suY3BwICovLAotCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBE
RkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQg
LyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC04NzYxLDcg
Kzg3MzAsNiBAQAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2ly
ZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNp
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyOTgxRkQ5MTdCQUVF
NEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLApA
QCAtODc4OSw3ICs4NzU3LDYgQEAKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZBMThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdHcmFwaFNhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjExOTZCOEY5RTAw
OTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDODQxNjkx
QkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkIxNEUyMTE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5l
Q2FjaGVXcmFwcGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDYxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAg
LTkwOTEsMTEgKzkwNTgsNiBAQAogCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlCMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Mzg2QTc5MURE
Njk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQjQ2Nzg1MUZERkI0
NTQwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjRBRTA0MzFGRTBEMjU3MDBFMjA4MzkgLyogSW5mZXJyZWRWYWx1
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIzOTk2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxOSwxNCArMTAxOSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgaWYg
KEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQu
aW1wbCgpKSkgewotICAgICAgICAgICAgaWYgKEFjY2Vzc0Nhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3Io
KSwgIlxuIik7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCi0gICAg
ICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5
cGUtPmRlc2NyaXB0b3IoKSkpOwotICAgICAgICB9IGVsc2UgaWYgKEFjY2Vzc0Nhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOwot
CiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTEwNDksMTQgKzEw
NDEsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAg
IC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGlm
IHRoaXMgd2Fzbid0IHRydWUuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKIAotICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3
U3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKLSAgICAgICAgICAg
IHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
SWZOb3RUeXBlKHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7Ci0KICAgICAgICAgLy8gTk9URTogVGhp
cyBsb2dpYyBpcyBkdXBsaWNhdGVkIGluIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscygpLiBJdCdzIGlt
cG9ydGFudCB0aGF0IGRvZXNDYWxscygpIGtub3dzCiAgICAgICAgIC8vIGV4YWN0bHkgd2hlbiB0
aGlzIHdvdWxkIG1ha2UgY2FsbHMuCiAgICAgICAgIGJvb2wgYWxsb2NhdGluZyA9IG5ld1N0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsMTEgKzQ3NCw3IEBA
IG9wIDpwdXRfYnlfaWQsCiAgICAgICAgIG9sZFN0cnVjdHVyZTogU3RydWN0dXJlSUQsCiAgICAg
ICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIG5ld1N0cnVjdHVyZTogU3RydWN0dXJlSUQs
Ci0gICAgICAgIGZsYWdzOiBQdXRCeUlkRmxhZ3MsCiAgICAgICAgIHN0cnVjdHVyZUNoYWluOiBX
cml0ZUJhcnJpZXJCYXNlW1N0cnVjdHVyZUNoYWluXSwKLSAgICB9LAotICAgIG1ldGFkYXRhX2lu
aXRpYWxpemVyczogewotICAgICAgICBmbGFnczogOmZsYWdzCiAgICAgfQogCiBvcCA6cHV0X2J5
X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GaXRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ZpdHMuaAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ZpdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkxhYmVsLmgiCiAj
aW5jbHVkZSAiT3Bjb2RlU2l6ZS5oIgogI2luY2x1ZGUgIlByb2ZpbGVUeXBlQnl0ZWNvZGVGbGFn
LmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgog
I2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdz
LmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKIAotI2luY2x1ZGUgIklu
ZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAg
LTM5LDExICszOCw2IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQdXQK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQdXRCeUlkSXNE
aXJlY3QpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7Ci0KLSAgICBJbmZl
cnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKGZsYWdzKTsK
LSAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOwotICAgIGlmIChJbmZlcnJlZFR5cGU6Omhhc1N0
cnVjdHVyZShraW5kKSkKLSAgICAgICAgb3V0LnByaW50KCI6IiwgYml0d2lzZV9jYXN0PGludDMy
X3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJ
KHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNjAgKzM2LDggQEAgZW51bSBQdXRCeUlk
RmxhZ3MgOiBpbnQzMl90IHsKICAgICAvLyBjaGVja2luZyBpZiB0aGUgcHJvdG90eXBlIGNoYWlu
IGhhcyBhIHNldHRlci4KICAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEsCiAgICAgUHV0QnlJZFBl
cnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCi0KLSAgICAvLyBOT1RFOiBUaGUgdmFsdWVzIGJlbG93
IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJbnRlcnByZXRlci5hc20u
Ci0KLSAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJyZWQgdHlwZSBpbnZvbHZl
cyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFuZCB0aGVuCi0gICAgLy8g
dXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBzZWNvbmRhcnkgbWFz
azoKLSAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgewotICAg
IC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgotICAgIC8vICAgICBzd2l0Y2gg
KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7Ci0gICAgLy8gICAgIC4uLgotICAg
IC8vICAgICB9Ci0gICAgLy8gICAgIGJyZWFrOwotICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgIC8vICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKLSAgICAvLyAgICAgYnJlYWs7Ci0gICAg
Ly8gfQotICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCi0gICAgUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRoZSBzZWNvbmRhcnkgdHlw
ZSBtYXNrIGZvciB0aGUgdHlwZS4KLSAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3Ry
dWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgotICAgIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyID0gMHg0LCAvLyBTZWNv
bmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgotCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVN
YXNrID0gLTB4OCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9IDB4MCwKLSAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPdGhlciA9IDB4MTAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgsCi0g
ICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAotICAgIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlU3RyaW5nID0gMHgyOCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN5bWJvbCA9IDB4
MzAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSAweDM4LAotICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9IDB4NDAsCi0gICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVUb3AgPSAweDQ4CiB9OwogCi1pbmxpbmUgUHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlE
KFN0cnVjdHVyZUlEIGlkKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7
Ci0jZWxzZQotICAgIFB1dEJ5SWRGbGFncyByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZs
YWdzPihpZCk7Ci0gICAgQVNTRVJUKCEocmVzdWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFz
aykpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZW5kaWYKLX0KLQotaW5saW5lIFN0cnVjdHVyZUlE
IGRlY29kZVN0cnVjdHVyZUlEKFB1dEJ5SWRGbGFncyBmbGFncykKLXsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7Ci0j
ZWxzZQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrKTsKLSNlbmRpZgotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
bmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAg
IFZNJiB2bSA9ICpwcm9maWxlZEJsb2NrLT52bSgpOwogICAgIAogICAgIGF1dG8gaW5zdHJ1Y3Rp
b24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCkubWV0YWRhdGEo
cHJvZmlsZWRCbG9jayk7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxl
ZEJsb2NrKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEub2xkU3Ry
dWN0dXJlOwogICAgIGlmICghc3RydWN0dXJlSUQpCkBAIC02Niw3ICs2Nyw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKQEAgLTc4LDcgKzc5LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEobWV0YWRhdGEuZmxhZ3MgJiBQdXRC
eUlkSXNEaXJlY3QpKSB7CisgICAgaWYgKCEoYnl0ZWNvZGUuZmxhZ3MgJiBQdXRCeUlkSXNEaXJl
Y3QpKSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAg
dm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CkBAIC04
Nyw3ICs4OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAg
ICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsIG5ld1N0cnVj
dHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgc3RydWN0dXJl
LCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKIH0KIAogI2lmIEVOQUJMRShK
SVQpCkBAIC0xNDIsNyArMTQzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAg
ICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgICAgICAgICBzdHViSW5m
by0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwogICAgIH0KQEAgLTE2OSw3ICsxNzAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVj
dHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTgyLDggKzE4Myw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CiAgICAgICAgICAg
ICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUo
KS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwg
b2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTMxNSw3ICszMTUsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50
IHZhcmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7
CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZz
ZXQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMzUwLDggKzM1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCgKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcih1aWQpKSk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25k
aXRpb25TZXQsIG9mZnNldCkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBQdXRCeUlkVmFyaWFu
dCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5t
X25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0
OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgbV9yZXF1aXJlZFR5cGUgPSBv
dGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+
KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNlCkBAIC01NCwyMCArNTMsMTggQEAg
UHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogfQogCiBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImIHJlcXVpcmVkVHlwZSkKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAg
ICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3Jl
cXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBl
KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAg
cmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03NSw3ICs3Miw2IEBAIFB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUg
PSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9yZXF1aXJlZFR5
cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAsNyArODYs
NiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIHJlc3VsdC5t
X2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVz
KTsKLSAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTksOSArMTU0LDYgQEAgYm9vbCBQdXRCeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fcmVxdWlyZWRUeXBlICE9IG90
aGVyLm1fcmVxdWlyZWRUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgc3dp
dGNoIChtX2tpbmQpIHsKICAgICBjYXNlIE5vdFNldDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTMwNSwxNiArMjk3LDE0IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6
OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLAotICAgICAgICAg
ICAgaW5Db250ZXh0KHJlcXVpcmVkVHlwZSgpLCBjb250ZXh0KSwgIj4iKTsKKyAgICAgICAgICAg
ICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRy
YW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwK
ICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0
KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQp
LCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCi0gICAgICAgICAgICBpbkNvbnRleHQo
cmVxdWlyZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1f
Y29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAi
PiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJl
dmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTEgQEAgcHVibGljOgogICAg
IFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlh
bnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAg
ICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRW
YXJpYW50IHNldHRlcigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZz
ZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKQEAgLTEwNSwxMSArMTA1LDYg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNz
YXJ5KCk7CiAKLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKLSAgICB9Ci0KICAgICBi
b29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFn
ZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTUwLDcgKzE0NSw2
IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsK
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1
aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5r
U3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjM5OTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTE4LDggKzI5MTgsOSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJv
cGVydHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVzW2ld
Lm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9zdGF0ZS5zdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkgPSByZXN1bHQ7CkBAIC0zMjkyLDcgKzMyOTMsNiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsK
ICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0
YSgpOwotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW2RhdGEuaWRlbnRpZmllck51bWJlcl07CiAKICAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0
IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBB
SSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJv
YmFibHkgbm90IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGlt
aXphdGlvbiAodXN1YWxseQpAQCAtMzMwMCwxMiArMzMwMCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIEdl
dEJ5T2Zmc2V0IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGhhdmUg
dG8gcmVseSBlbnRpcmVseQogICAgICAgICAvLyBvbiB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFy
c2VyIHdhcyBhYmxlIHRvIHByb3ZlLgogICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9n
cmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSk7Ci0KLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRoYXQgQnl0
ZUNvZGVQYXJzZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4KLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0eXBlRnJvbVBhcnNpbmc7Ci0gICAgICAgIHR5cGVGcm9tUGFyc2luZy5zZXQobV9ncmFwaCwg
ZGF0YS5pbmZlcnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAg
ICAgICB2YWx1ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdGhlcmUgZG9lcyBub3QgZXhp
c3QgYW55IHZhbHVlIHRoYXQgdGhpcyBjYW4gcmV0dXJuLCB0aGVuIGl0J3MgcHJvYmFibHkKICAg
ICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcGlsYXRpb24gd2FzIGFscmVhZHkgaW52YWxpZGF0ZWQu
CkBAIC0zMzQ0LDggKzMzMzksNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRpbWVz
LCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOwogICAgICAgICAKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50
aWZpZXJOdW1iZXJdOwotCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAg
ICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwpAQCAtMzM2NywxMyArMzM2MCw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZDogewotICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzZXQsIHVpZCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBkZWZhdWx0OiB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zNDE0LDcgKzM0MDAsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKLSAgICAgICAgICAgIHRoaXNW
YWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgICAg
ICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYyICsxMjYsNiBAQCB2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldFR5cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogfQogCi12b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0
b3Iua2luZCgpKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAgICAgICAgY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgot
ICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjQm9vbGVhbik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Ci0gICAgICAgIHNldE5vbkNlbGxUeXBlKFNwZWNP
dGhlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6Ci0g
ICAgICAgIHNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpTdHJpbmc6Ci0gICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoK
LSAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN5bWJvbFN0cnVjdHVyZS5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICBz
ZXQoZ3JhcGgsIGdyYXBoLm1fdm0uYmlnSW50U3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICBtZXJnZShTcGVj
T3RoZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoK
LSAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKLSAgICAgICAgc2V0VHlwZShncmFw
aCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElu
ZmVycmVkVHlwZTo6VG9wOgotICAgICAgICBtYWtlSGVhcFRvcCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoCi0gICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3Rh
dGUpCi17Ci0gICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKLSAgICBpZiAoY2xvYmJlclN0YXRl
ID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCi0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7
Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBo
JiBncmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlm
IChyZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0yNTMsMTcgKzE5Nyw2
IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICByZXR1cm4g
b2xkTWUgIT0gKnRoaXM7CiB9CiAKLWJvb2wgQWJzdHJhY3RWYWx1ZTo6aXNUeXBlKEdyYXBoJiBn
cmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUpIGNvbnN0
Ci17Ci0gICAgQWJzdHJhY3RWYWx1ZSB0eXBlVmFsdWU7Ci0gICAgdHlwZVZhbHVlLnNldChncmFw
aCwgaW5mZXJyZWRUeXBlKTsKLQotICAgIEFic3RyYWN0VmFsdWUgbWVyZ2VkVmFsdWUgPSAqdGhp
czsKLSAgICBtZXJnZWRWYWx1ZS5tZXJnZSh0eXBlVmFsdWUpOwotCi0gICAgcmV0dXJuIG1lcmdl
ZFZhbHVlID09IHR5cGVWYWx1ZTsKLX0KLQogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVl
OjpmaWx0ZXIoCiAgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0
JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsKQEAgLTQwMiwxMyArMzM1
LDYgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoYwogICAgIHJldHVy
biBDb250cmFkaWN0aW9uOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZp
bHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKLXsKLSAgICBBYnN0cmFjdFZhbHVlIGZpbHRlclZhbHVlOwotICAgIGZpbHRlclZhbHVl
LnNldChncmFwaCwgZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIGZpbHRlcihmaWx0ZXJWYWx1ZSk7
Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAgIC8v
IFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNiBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIK
LSNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRl
ICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKQEAgLTI0OSw5ICsy
NDgsNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYpOwotICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKLQogICAgIHZvaWQgZml4VHlwZUZvclJl
cHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51
bGxwdHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSop
OwogICAgIApAQCAtMzE4LDggKzMxNCw2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CiAKLSAgICBib29sIGlz
VHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OwotCiAg
ICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElm
IHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKICAgICAvLyBp
bXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBz
ZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCiAgICAgLy8gU3BlY0NlbGwuIEhlbmNl
LCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24t
Y2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KQEAgLTM1NCw4ICszNDgsNiBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoY29uc3QgQWJzdHJhY3RW
YWx1ZSYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQ2xhc3NJbmZvKEdyYXBoJiwgY29u
c3QgQ2xhc3NJbmZvKik7CiAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwotICAgIAogICAgIEFMV0FZU19JTkxJTkUg
RmlsdHJhdGlvblJlc3VsdCBmYXN0Rm9yd2FyZFRvQW5kRmlsdGVyVW5wcm92ZW4oQWJzdHJhY3RW
YWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7CiAg
ICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg1LDggKzE4NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFy
cmF5Q29uc3RydWN0b3IoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSW50ZXJuYWxGdW5jdGlvbios
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBl
ZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRl
cm5hbEZ1bmN0aW9uKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFNwZWN1bGF0ZWRUeXBlLCBj
b25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRsZVB1dEJ5
T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9m
ZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAgICAgYm9vbCBoYW5kbGVET01KSVRHZXR0ZXIoVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgY29uc3QgR2V0QnlJZFZhcmlhbnQmLCBOb2RlKiB0aGlzTm9kZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAg
ICAgYm9vbCBoYW5kbGVNb2R1bGVOYW1lc3BhY2VMb2FkKFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBHZXRCeUlkU3RhdHVzKTsKIApAQCAtMzc3Miw4
ICszNzcyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogfQog
CiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlLCBOb2RlVHlwZSBvcCkKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIE5vZGVUeXBlIG9wKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTM3ODQsOCArMzc4Myw2IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5v
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJO
dW1iZXI7Ci0gICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgIG1fZ3Jh
cGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBOb2RlKiBn
ZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCkBAIC0zNzkzLDcgKzM3OTAsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiB9CiAKIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKLSAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBw
cm9wZXJ0eVN0b3JhZ2U7CkBAIC0zODA1LDggKzM4MDIsNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0
OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOwotICAgIGRhdGEtPmlu
ZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRU
eXBlKGluZmVycmVkVHlwZSk7CiAgICAgCiAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChQ
dXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsK
ICAgICAKQEAgLTM5NzksNyArMzk3NCw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAog
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAg
IE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLnBy
b3RvdHlwZSgpKSk7CiAgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAg
ICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0
KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CisgICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNl
Tm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7CiAgICAgfQogICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2Vl
IHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAtNDE3MiwxNyArNDE2Nyw4IEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChj
b25zdGFudCk7CiAgICAgICAgIH0KIAotICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
aW5mZXJyZWRUeXBlOwotICAgICAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7Ci0gICAgICAg
ICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkg
ewotICAgICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzVHlwZSA9IG1f
Z3JhcGguaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpOwotICAgICAgICAg
ICAgICAgIGluZmVycmVkVHlwZS5tZXJnZSh0aGlzVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7
Ci0gICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAg
ICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCksIGluZmVycmVkVHlwZSwgbG9hZE9wKTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0
aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBsb2FkT3ApOwog
ICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTQxOTMsNyArNDE3OSw3IEBAIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVj
a1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZh
cmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5kbGVQ
dXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnJl
cXVpcmVkVHlwZSgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2Us
IGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTQ0MjgsNyArNDQxNCw2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CiAK
ICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKSkgewotICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlw
ZSh2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKQEAgLTQ0OTQsOCArNDQ3OSw2
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAg
ICAgICBkYXRhLT5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOwogICAgICAgICBkYXRhLT5pZGVu
dGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAgICAgICAgZGF0YS0+aW5mZXJyZWRU
eXBlID0gdmFyaWFudC5yZXF1aXJlZFR5cGUoKTsKLSAgICAgICAgbV9ncmFwaC5yZWdpc3Rlcklu
ZmVycmVkVHlwZShkYXRhLT5pbmZlcnJlZFR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gTk9U
RTogV2UgY291bGQgR0MgYXQgdGhpcyBwb2ludCBiZWNhdXNlIHNvbWVvbmUgY291bGQgaW5zZXJ0
IGFuIG9wZXJhdGlvbiB0aGF0IEdDcy4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZToK
QEAgLTQ4MDcsOSArNDc5MCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPm9mZnNldCA9IGtub3duUG9seVByb3RvT2Zmc2V0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0g
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShtX2dyYXBoLm1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGUgPSBJ
bmZlcnJlZFR5cGU6OlRvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+
aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc0lubGluZU9mZnNldChrbm93blBvbHlQ
cm90b09mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIG9iamVjdCwgb2JqZWN0LCB3ZWFrSlNDb25zdGFu
dChwcm90b3R5cGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTUwLDcg
KzU1MzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS52YWx1ZSk7CiAgICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVj
b2RlLnByb3BlcnR5XTsKLSAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKKyAgICAgICAgICAgIGJvb2wg
ZGlyZWN0ID0gISEoYnl0ZWNvZGUuZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNiBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
REZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgotI2luY2x1
ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC00
NzcsOCArNDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlh
bnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTcyNywxMCArNzI1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBrbm93blBvbHlQcm90b09mZnNldDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0g
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShtX2dyYXBoLm1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVk
VHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBl
KGluZmVycmVkVHlwZSk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcm90b3R5cGVOb2Rl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIG9yaWdpbiwgbV9ncmFwaC5m
cmVlemUocHJvdG90eXBlKSk7CkBAIC0xMDc0LDcgKzEwNjgsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KAogICAgICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2ss
IE5vZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3ApCisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKICAgICB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CiAgICAgICAgIApAQCAtMTA5MCw3ICsxMDg0LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LmFkZCgpOwogICAgICAgICBkYXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVu
dGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAgICAgICAgZGF0YS5pbmZlcnJlZFR5
cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRC
eU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgfQpAQCAtMTEw
MSw4ICsxMDk0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5j
aGlsZDEoKTsKIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNl
VmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwotICAgICAgICBpbnNlcnRJbmZlcnJlZFR5
cGVDaGVjaygKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdp
biwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNo
aWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBl
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlzIGRvY3VtZW50
cyB0aGUgREZHJ3MgZXhwZWN0YXRpb24gZm9yIGFuIEluZmVycmVkVHlwZTogc3BlY2lmaWNhbGx5
LCB0aGF0IHdlIHdhbnQgaXQgdG8gaGF2ZSBhIGxpdmUKLS8vIEluZmVycmVkVHlwZSBvYmplY3Qg
YW5kIHRoYXQgdGhpcyBvYmplY3QgaGFzIHRoZSB0eXBlIHRoYXQgd2Ugb3JpZ2luYWxseSBzYXcu
Ci0KLWNsYXNzIERlc2lyZWRJbmZlcnJlZFR5cGUgewotcHVibGljOgotICAgIERlc2lyZWRJbmZl
cnJlZFR5cGUoKQotICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKEluZmVycmVkVHlwZSogb2JqZWN0LCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGV4cGVjdGVkKQotICAgICAgICA6IG1fb2JqZWN0KG9i
amVjdCkKLSAgICAgICAgLCBtX2V4cGVjdGVkKGV4cGVjdGVkKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBEZXNpcmVkSW5mZXJyZWRUeXBlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAg
ICAgICAgOiBtX29iamVjdChudWxscHRyKQotICAgICAgICAsIG1fZXhwZWN0ZWQoSW5mZXJyZWRU
eXBlOjpUb3ApCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVjdGVkOyB9Ci0KLSAgICBJbmZlcnJlZFR5
cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9Ci0gICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZDsgfQotCi0g
ICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZChXYXRjaHBv
aW50KiB3YXRjaHBvaW50KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9vYmplY3QtPmFkZFdhdGNo
cG9pbnQod2F0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
b2JqZWN0ID09IG90aGVyLm1fb2JqZWN0Ci0gICAgICAgICAgICAmJiBtX2V4cGVjdGVkID09IG90
aGVyLm1fZXhwZWN0ZWQ7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwotICAgIH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2V4cGVjdGVkID09
IEluZmVycmVkVHlwZTo6VG9wOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6aGFzaCht
X29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAot
ICAgIHsKLSAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250ZXh0KSwg
IiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJbmZlcnJlZFR5cGUqIG1fb2JqZWN0
OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4cGVjdGVkOwotfTsKLQotc3RydWN0
IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KLSAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25zdCBEZXNp
cmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19OwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4gewotICAgIHR5cGVkZWYgSlNDOjpERkc6OkRl
c2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6
OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpE
ZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDExICs2OSw2IEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcjoKICAgICB9CiB9CiAKLXZvaWQgSW5mZXJyZWRUeXBlQWRhcHRvcjo6YWRkKENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIENvbW1vbkRh
dGEmIGNvbW1vbikKLXsKLSAgICBrZXkuYWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJs
b2NrKSk7Ci19Ci0KIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9
CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtMTAy
LDExICs5Nyw2IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QKICAg
ICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKIH0KIAotdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkp
Ci17Ci0gICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkpOwotfQotCiBib29sIERlc2ly
ZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYg
KCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMjIsNyArMTEyLDYgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5mZXJyZWRWYWx1ZXMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFs
bHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0
cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX2luZmVycmVkVHlwZXMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTEzMSw4ICsxMjAsNyBAQCBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0
cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZh
bGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAg
JiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1f
aW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0CkBAIC0xNDMsNyArMTMxLDYgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNv
bnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0
KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBC
dWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7
CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29u
dGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwotICAgIG91dC5w
cmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFR5cGVzLCBj
b250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgotI2luY2x1ZGUgIkRGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIgpAQCAtOTMsMTggKzkyLDYgQEAgc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dEFkYXB0bwogICAgIH0KIH07CiAKLXN0cnVjdCBJbmZlcnJlZFR5cGVBZGFwdG9yIHsKLSAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYsIENv
bW1vbkRhdGEmKTsKLSAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuICFrZXkuaXNTdGls
bFZhbGlkKCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBEdW1wQ29udGV4dCogY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7
Ci0gICAgfQotfTsKLQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVu
YW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFz
cyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0x
NzMsMTAgKzE2MCw2IEBAIHB1YmxpYzoKICAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91
IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3
aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBv
dGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYpOwotCi0gICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBj
YWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKCksIHdoaWNoIGRv
ZXMKLSAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCi0gICAgdm9pZCBhZGRMYXppbHkoY29u
c3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0
dXJlKik7CiAgICAgCkBAIC0yMDQsMTEgKzE4Nyw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9Ci0g
ICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKLSAgICB9Ci0K
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApAQCAtMjE4LDcgKzE5
Niw2IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZh
bHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dh
dGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOwotICAgIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZl
cnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMzk5NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIK
ICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCkBAIC0xNjMzLDEwICsxNjMy
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3Jh
Z2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JDaGVja3MoKTsKLSAg
ICAgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAotICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LCBpbmRleCwgb3JpZ2luRm9yQ2hlY2soaW5kZXgpLCBub2RlLT5jaGlsZDMoKS5u
b2RlKCksCi0gICAgICAgICAgICAgICAgbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pbmZlcnJl
ZFR5cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9yQmFycmllcihub2RlLT5jaGlsZDMoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDYgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgp
OwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50
aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlm
aWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7Ci0gICAgICAgIG91dC5wcmludCgi
LCBpbmZlcnJlZFR5cGUgPSAiLCBpbkNvbnRleHQoc3RvcmFnZUFjY2Vzc0RhdGEuaW5mZXJyZWRU
eXBlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKTsKQEAgLTEwNTksMzggKzEwNTgsNiBAQCBib29sIEdyYXBoOjpp
c1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250
YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0KIAotSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBr
ZXkpCi17Ci0gICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1Y3R1cmUoKSk7Ci0gICAgCi0g
ICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlciAh
PSBtX2luZmVycmVkVHlwZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKLQot
ICAgIEluZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGtleS51aWQoKSk7Ci0gICAgaWYgKCF0eXBlT2JqZWN0KSB7Ci0gICAgICAgIG1faW5m
ZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7Ci0gICAgICAgIHJldHVybiBJ
bmZlcnJlZFR5cGU6OlRvcDsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
dHlwZURlc2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7Ci0gICAgaWYgKHR5cGVE
ZXNjcmlwdG9yLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgewotICAgICAgICBtX2luZmVy
cmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOwotICAgICAgICByZXR1cm4gSW5m
ZXJyZWRUeXBlOjpUb3A7Ci0gICAgfQotICAgIAotICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5
LCB0eXBlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXpp
bHkodHlwZU9iamVjdCk7Ci0gICAgcmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZURlc2NyaXB0b3Ip
OwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVz
aXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5Ci0gICAg
Ly8gcG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgotICAgIG1fcGxhbi53
YXRjaHBvaW50cygpLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5
cGVEZXNjcmlwdG9yKSk7Ci0KLSAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Ci19Ci0KIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVC
bG9jayk7CkBAIC0xMzIwLDIyICsxMjg3LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShjbwogfQogCiBBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCi0gICAgY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKLXsK
LSAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKLSAgICBiYXNlLmZvckVhY2goCi0gICAgICAgIFsm
XSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVkVHlwZUZv
clByb3BlcnR5KHN0cnVjdHVyZS5nZXQoKSwgdWlkKSk7Ci0gICAgICAgICAgICByZXN1bHQubWVy
Z2UodmFsdWUpOwotICAgICAgICB9KTsKLSAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVy
ZXNBcmVDbG9iYmVyZWQpCi0gICAgICAgIHJlc3VsdC5jbG9iYmVyU3RydWN0dXJlcygpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUFic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKLSAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgQWJzdHJhY3RWYWx1
ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSBjbG9iYmVyU3RhdGUpCiB7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0cnlHZXRDb25zdGFu
dFByb3BlcnR5KGJhc2UsIG9mZnNldCkpIHsKQEAgLTEzNDQsOSArMTI5Niw2IEBAIEFic3RyYWN0
VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm8KICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKLSAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICBy
ZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVp
ZCwgY2xvYmJlclN0YXRlKTsKLQogICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNzk3LDI2ICs3OTcsMTAgQEAgcHVibGljOgogICAgIC8vIGNvbXB1dGVkIGJ5IHRy
YWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgog
ICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CiAK
LSAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBlKGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlLnN0cnVjdHVyZSgpKQotICAgICAg
ICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5zdHJ1Y3R1cmUoKSk7Ci0gICAgfQotCi0gICAg
Ly8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBw
cm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KLSAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYpOwotICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7Ci0g
ICAgfQotCi0gICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKLQog
ICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHBy
b3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJhY3QKICAgICAvLyB2
YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2
YWx1ZSBiYXNlLgogICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAot
ICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKyAgICAgICAgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9j
ayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJh
bWUqKTsKQEAgLTEwNjUsNyArMTA0OSw2IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9j
ayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZl
bmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtp
bGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0Kiwg
UHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7Ci0gICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVL
ZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIFZlY3Rv
cjxSZWY8U25pcHBldD4+IG1fZG9tSklUU25pcHBldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENQ
U0RvbWluYXRvcnM+IG1fY3BzRG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBRG9t
aW5hdG9ycz4gbV9zc2FEb21pbmF0b3JzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCShub25l
eGlzdGVudCkKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgaW5zZXJ0
SW5mZXJyZWRUeXBlQ2hlY2soCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2ln
bmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIGJhc2VOb2RlLAotICAgIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKLXsKLSAgICBpbnNlcnRpb25TZXQu
Z3JhcGgoKS5yZWdpc3RlckluZmVycmVkVHlwZSh0eXBlKTsKLSAgICAKLSAgICBzd2l0Y2ggKHR5
cGUua2luZCgpKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBv
cmlnaW4pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVh
bjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwg
Q2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVhblVzZSkpOwotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Ci0gICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFz
ZU5vZGUsIE90aGVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpJbnQzMjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBT
cGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgSW50MzJVc2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwg
RWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIFN0cmluZ1Vz
ZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgot
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVj
aywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTeW1ib2xVc2UpKTsKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9k
ZSwgQmlnSW50VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4s
Ci0gICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0
KHR5cGUuc3RydWN0dXJlKCkpKSwKLSAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxVc2Up
KTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCi0gICAg
ICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUu
c3RydWN0dXJlKCkpKSwKLSAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxPck90aGVyVXNl
KSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6Ci0g
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNr
LCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE9iamVjdFVzZSkpOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKLSAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShi
YXNlTm9kZSwgT2JqZWN0T3JPdGhlclVzZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6VG9wOgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgREZHX0NS
QVNIKGluc2VydGlvblNldC5ncmFwaCgpLCBiYXNlTm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7
Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJl
ZFR5cGVDaGVjay5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5o
IgotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7Ci0KLS8vIEluc2VydHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VO
b2RlIGhhcyB0aGUgZ2l2ZW4gaW5mZXJyZWQgdHlwZS4KLXZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBl
Q2hlY2soCi0gICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
LCBOb2RlKiBiYXNlTm9kZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwx
MSArODEsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXI7Ci0KLSAgICAvLyBUaGlzIG5lZWRzIHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZvciBw
dXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKLSAgICAv
LyB3aGF0IGNoZWNrIGlzIG5lZWRlZC4gRm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2Ugb3RoZXJ3aXNlIEFJIG1pZ2h0IGZvcmdldCB3aGF0IHR5cGUgaXMKLSAgICAvLyBndWFyYW50
ZWVkLgotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9OwogCiBz
dHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjk0LDE0
ICsyMjk0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlz
IHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0
aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0
cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJy
ZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVh
cigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
ZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpU
b3ApKTsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC5hZGROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsMzEgKzU0
MSwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2Fz
ZSBQdXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGRh
dGEub2Zmc2V0OwotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gZ3JhcGguaWRlbnRp
ZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOwotCi0gICAgICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewot
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5
T2Zmc2V0OgotICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gZGF0YS5pbmZlcnJlZFR5cGU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAg
IC8vIFB1dEJ5T2Zmc2V0IGtub3dzIGFib3V0IGluZmVycmVkIHR5cGVzIGJlY2F1c2UgaXQncyB0
aGUgZW5mb3JjZXIgb2YgdGhhdCB0eXBlIHJhdGhlcgotICAgICAgICAgICAgLy8gdGhhbiB0aGUg
Y29uc3VtZXIgb2YgdGhhdCB0eXBlLiBUaGVyZWZvcmUsIFB1dEJ5T2Zmc2V0IGV4cGVjdHMgVE9Q
IGZvciB0aGUgcHVycG9zZSBvZgotICAgICAgICAgICAgLy8gc2FmZS10by1leGVjdXRlIGluIHRo
ZSBzZW5zZSB0aGF0IGl0IHdpbGwgYmUgaGFwcHkgd2l0aCBhbnl0aGluZyBhcyBnZW5lcmFsIGFz
IFRPUAotICAgICAgICAgICAgLy8gKHNvIGFueSB0eXBlKS4KLSAgICAgICAgICAgIGluZmVycmVk
VHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsICJCYWQgb3Bjb2RlIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIC8vIEdyYXBoOjppc1Nh
ZmVUb0xvYWQoKSBpcyBhbGwgYWJvdXQgcHJvb2ZzIGRlcml2ZWQgZnJvbSBQcm9wZXJ0eUNvbmRp
dGlvbnMuIFRob3NlIGRvbid0CiAgICAgICAgIC8vIGtub3cgYW55dGhpbmcgYWJvdXQgaW5mZXJy
ZWQgdHlwZXMuIEJ1dCBpZiB3ZSBoYXZlIGEgcHJvb2YgZGVyaXZlZCBmcm9tIHdhdGNoaW5nIGEK
ICAgICAgICAgLy8gc3RydWN0dXJlIHRoYXQgaGFzIGEgdHlwZSBwcm9vZiwgdGhlbiB0aGUgbmV4
dCBjYXNlIGJlbG93IHdpbGwgZGVhbCB3aXRoIGl0LgotICAgICAgICBpZiAoc3RhdGUuc3RydWN0
dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQKLSAgICAgICAgICAgICYm
IGluZmVycmVkVHlwZS5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAgaWYg
KHN0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKSB7
CiAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IG5vZGUtPmNoaWxkMSgpLT5k
eW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4oZ3JhcGgubV92bSkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoZ3JhcGguaXNTYWZlVG9Mb2FkKGtub3duQmFzZSwgb2Zmc2V0KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NzksMTIgKzU1OCw2IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgICAgIFN0cnVjdHVyZSogdGhp
c1N0cnVjdHVyZSA9IHZhbHVlW2ldLmdldCgpOwogICAgICAgICAgICAgaWYgKCF0aGlzU3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKGluZmVycmVkVHlwZS5raW5kKCkgIT0gSW5mZXJyZWRUeXBlOjpU
b3ApIHsKLSAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdGhpc0luZmVy
cmVkVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmluZmVycmVkVHlwZUZvclByb3Bl
cnR5KHRoaXNTdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZlcnJlZFR5
cGUuc3Vic3VtZXModGhpc0luZmVycmVkVHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MjAsOCArNjkyMCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQg
PSBkYXRhLnZhcmlhbnRzW2ldOwogCi0gICAgICAgICAgICBjaGVja0luZmVycmVkVHlwZShtX25v
ZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7Ci0gICAgICAgICAg
ICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQpAQCAtMTE1MzAsMTQ4ICsxMTUyOCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIHJlc3VsdHMpOwog
ICAgIH0KIAotICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFs
dWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAg
IC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNl
IGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgotICAgICAgICAvLwot
ICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIG1heSBiZSBsb3dlcmVkIHRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgc3dpdGNo
IChvYmplY3QtPnN0cnVjdHVyZSkgewotICAgICAgICAvLyAgICAgY2FzZSA0MjoKLSAgICAgICAg
Ly8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKLSAgICAgICAgLy8gICAg
ICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgLy8gICAgIGNhc2Ug
NDM6Ci0gICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7Ci0g
ICAgICAgIC8vICAgICAgICAgLi4uCi0gICAgICAgIC8vICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IC8vICAgICB9Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBh
cmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ug
d291bGQgYmUKLSAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBv
ZiB0eXBlMSB8IHR5cGUyLgotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkg
ewotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29s
ZWFuVHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OkJvb2xlYW46Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
dGhlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3ltYm9sKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0lu
dDoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90QmlnSW50KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6IHsK
LSAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh0eXBlLnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRn
ZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0dXJlU2V0KHN0cnVjdHVy
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNl
bGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENl
bGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwotCi0gICAgICAgICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5z
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKSB7Ci0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUs
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdl
YWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwK
LSAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNw
ZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0OgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogewotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7
Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBpc05vdE9iamVj
dCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAg
ICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWND
ZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Ci0gICAgfQotICAgIAogICAgIExWYWx1
ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5sb2Fk
NjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw2ICsxMjMsOCBAQCBtb2R1bGUgRFNMCiAjaW5jbHVkZSAiR2V0QnlJZE1l
dGFkYXRhLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJPcGNvZGUuaCIK
KyNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAj
aW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBA
CiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAj
aW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgpAQCAtNTg2LDcgKzU4
NSw2IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmkKIAogdm9pZCBI
ZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZU1h
cmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRU
eXBlc1dpdGhGaW5hbGl6ZXJzKTsKICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzPEluZmVycmVkVmFsdWU+KHZtKCktPmluZmVycmVkVmFsdWVzV2l0aEZpbmFsaXplcnMp
OwogICAgIHZtKCktPmZvckVhY2hDb2RlQmxvY2tTcGFjZSgKICAgICAgICAgWyZdIChhdXRvJiBz
cGFjZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4OCArNTAsNiBAQCBFeGVj
dXRhYmxlQmFzZSogQXNzZW1ibHlIZWxwZXJzOjpleGVjdXRhCiAgICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7
CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUoCi0gICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVGFnUmVnaXN0ZXJzTW9kZSBtb2Rl
KQotewotICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVzdWx0OwotCi0gICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgewotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5v
dEJvb2xlYW4ocmVncywgdGVtcEdQUikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE90aGVy
KHJlZ3MsIHRlbXBHUFIpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6SW50MzI6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdzLCBt
b2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0ZW1wR1BSLCBt
b2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigpKSk7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3ltYm9sKHJlZ3MucGF5bG9hZEdQUigpKSk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90QmlnSW50KHJlZ3MucGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgKLSAgICAgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAg
ICAgICBOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBBZGRyZXNzKHJlZ3MucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAgICAgICAgSnVtcCBvayA9IGJyYW5j
aElmT3RoZXIocmVncywgdGVtcEdQUik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MsIG1vZGUpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgKLSAgICAgICAgICAg
IGJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBOb3RFcXVhbCwKLSAgICAgICAgICAg
ICAgICBBZGRyZXNzKHJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKLSAgICAgICAg
b2subGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3Mu
cGF5bG9hZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdE9yT3RoZXI6IHsKLSAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywg
dGVtcEdQUik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1v
ZGUpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBheWxv
YWRHUFIoKSkpOwotICAgICAgICBvay5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlI
ZWxwZXJzOjpicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJlZyBiYXNlR1BSKQogewogICAgIHJl
dHVybiBicmFuY2gzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1MiwxMCArMTA1Miw2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZSgK
LSAgICAgICAgSlNWYWx1ZVJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImLAotICAgICAgICBUYWdSZWdpc3RlcnNNb2RlID0gSGF2ZVRhZ1JlZ2lzdGVy
cyk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJl
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjEsMTAgKzY2MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBh
cmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KICAgICAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGJh
c2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwogICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZh
bHVlLm9mZnNldCgpOwotICAgIGludCBkaXJlY3QgPSBtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJ
c0RpcmVjdDsKKyAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLmZsYWdzICYgUHV0QnlJZElz
RGlyZWN0KTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwg
cmVnVDMsIHJlZ1QyKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU5LDEwICs2NTksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsK
ICAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgdW5zaWdu
ZWQgZGlyZWN0ID0gbWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CisgICAgYm9vbCBk
aXJlY3QgPSAhIShieXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJ
biBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBv
YmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVy
IHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJl
Z2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDggKzQ3MCw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAgICAg
JiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9w
ZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9y
LmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiU2hh
ZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMzk5NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDYsNyArODQ2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1dF9ieV9pZAogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhi
eXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0
KCkpOwotICAgIGlmIChtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKKyAgICBpZiAo
Ynl0ZWNvZGUuZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpCiAgICAgICAgIENvbW1vblNsb3dQYXRo
czo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVu
dCwgTExJTlRfT1BfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKICAgICBlbHNl
CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIExMSU5UX09QX0MoYnl0
ZWNvZGUudmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CkBAIC04NzYsNyArODc2LDYgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICBtZXRhZGF0YS5vZmZz
ZXQgPSAwOwogICAgICAgICBtZXRhZGF0YS5uZXdTdHJ1Y3R1cmUgPSAwOwogICAgICAgICBtZXRh
ZGF0YS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4obWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVu
dEZsYWdzTWFzayk7CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUodm0pOwpAQCAtOTAwLDIzICs4OTksMTcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEub2xk
U3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCktPmlkKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubmV3U3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlk
SXNEaXJlY3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShieXRlY29kZS5mbGFn
cyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMsIGFzT2Jq
ZWN0KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYWlu
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5zdHJ1Y3R1cmVDaGFpbi5z
ZXQodm0sIGNvZGVCbG9jaywgY2hhaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlk
RmxhZ3M+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0
b3JGb3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPmlkKCk7CiAgICAgICAgICAgICAgICAgbWV0YWRhdGEub2Zmc2V0ID0gc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzIHwKLSAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlk
ZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDA4LDgzICsxNDA4LDYgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRf
YnlfaWQsIE9wUHV0QgogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKICAgICAjIFdlIHdpbGwgbG9z
ZSBjdXJyZW50U3RydWN0dXJlSUQgaW4gdGhlIHNoZW5hbmlnYW5zIGJlbG93LgogCi0gICAgZ2V0
KHZhbHVlLCB0MSkKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMp
Ci0gICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6ZmxhZ3NbdDVdLCB0MQotCi0gICAgIyBB
dCB0aGlzIHBvaW50LCB3ZSBoYXZlOgotICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKLSAgICAjIHQx
IC0+IHB1dCBieSBpZCBmbGFncwotICAgICMgdDIgLT4gdmFsdWUgdGFnCi0gICAgIyB0MyAtPiB2
YWx1ZSBwYXlsb2FkCi0KLSAgICBidGlueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlTWFzaywgLm9w
UHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyCi0KLSAgICAjIFdlIGhh
dmUgb25lIG9mIHRoZSBub24tc3RydWN0dXJlIHR5cGUgY2hlY2tzLiBGaW5kIG91dCB3aGljaCBv
bmUuCi0gICAgYW5kaSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCi0gICAgYmlsdCB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0
cmluZwotCi0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFN0cmluZywgU3ltYm9s
LCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAotICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JP
dGhlcgotCi0gICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3RoZXIgb3IgVG9wLgotICAgIGJp
ZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKLQotICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3RoZXIuCi0gICAgYmllcSB0Miwg
Q2VsbFRhZywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAotLm9wUHV0QnlJZFR5cGVDaGVja090
aGVyOgotICAgIGJpZXEgdDIsIE51bGxUYWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwot
ICAgIGJpZXEgdDIsIFVuZGVmaW5lZFRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0g
ICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVj
dE9yT3RoZXI6Ci0gICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZywgU3ltYm9sIG9yIE9iamVjdC4K
LSAgICBiaW5lcSB0MiwgQ2VsbFRhZywgLm9wUHV0QnlJZFNsb3cKLSAgICBiaWVxIHQxLCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAotICAgIGJp
ZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sLCAub3BQdXRCeUlkVHlwZUNoZWNrU3lt
Ym9sCi0gICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWRE
b25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9wUHV0QnlJZFR5cGVD
aGVja09iamVjdDoKLSAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9wUHV0
QnlJZFR5cGVDaGVja1N5bWJvbDoKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3ltYm9s
VHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93
Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKLSAgICAjIFdlIGFyZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlci4K
LSAgICBiaWx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrTGVzc1RoYW5JbnQzMgotCi0gICAgIyBXZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4K
LSAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVD
aGVja051bWJlcgotCi0gICAgYmllcSB0MiwgSW50MzJUYWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrTnVt
YmVyOgotICAgIGJpYiB0MiwgTG93ZXN0VGFnICsgMSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5
cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhh
bkludDMyOgotICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xl
YW4sIE90aGVyCi0gICAgYmluZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9w
UHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKLSAgICBiaWVxIHQyLCBCb29sZWFuVGFnLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9w
UHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXI6Ci0gICAgYmllcSB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCi0gICAgam1wIC5vcFB1dEJ5
SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
LSAgICBiaWVxIHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVj
dHVyZQotICAgIGJ0aW56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93
Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlOgotICAgIGFuZGkgUHV0
QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQotICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3RydWN0
dXJlSURbdDNdLCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXM6
CiAgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0dXJlW3Q1XSwgdDEKIAog
ICAgIGJ0aXogdDEsIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEzNDQsOTIgKzEzNDQsMTEgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogICAgIGJpbmVxIHQyLCBKU0Nl
bGw6Om1fc3RydWN0dXJlSURbdDBdLCAub3BQdXRCeUlkU2xvdwogCiAgICAgIyBBdCB0aGlzIHBv
aW50LCB3ZSBoYXZlOgotICAgICMgdDUgLT4gbWV0YWRhdGEKLSAgICAjIHQyIC0+IGN1cnJlbnQg
c3RydWN0dXJlIElECiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQotCi0gICAgZ2V0KHZhbHVlLCB0
MSkKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MykKLQotICAgIGxvYWRp
IE9wUHV0QnlJZDo6TWV0YWRhdGE6OmZsYWdzW3Q1XSwgdDEKLQotICAgICMgQXQgdGhpcyBwb2lu
dCwgd2UgaGF2ZToKLSAgICAjIHQwIC0+IG9iamVjdCBiYXNlCi0gICAgIyB0MSAtPiBwdXQgYnkg
aWQgZmxhZ3MKICAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECi0gICAgIyB0MyAtPiB2
YWx1ZSB0byBwdXQKICAgICAjIHQ1IC0+IG1ldGFkYXRhCiAKLSAgICBidHBueiB0MSwgUHV0QnlJ
ZFByaW1hcnlUeXBlTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyCi0KLSAgICAjIFdlIGhhdmUgb25lIG9mIHRoZSBub24tc3RydWN0dXJlIHR5cGUgY2hl
Y2tzLiBGaW5kIG91dCB3aGljaCBvbmUuCi0gICAgYW5kcCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1h
c2ssIHQxCi0gICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZwotCi0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xs
b3dpbmc6IFN0cmluZywgU3ltYm9sLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAotICAgIGJw
bHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVD
aGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcgotCi0gICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9y
T3RoZXIgb3IgVG9wLgotICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLQotICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9y
T3RoZXIuCi0gICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAot
Lm9wUHV0QnlJZFR5cGVDaGVja090aGVyOgotICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMK
LSAgICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAg
IGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RP
ck90aGVyOgotICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcsIFN5bWJvbCBvciBPYmplY3QuCi0g
ICAgYnRxbnogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRTbG93Ci0gICAgYnBlcSB0MSwgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVPYmplY3QsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKLSAgICBicGVx
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN5bWJvbCwgLm9wUHV0QnlJZFR5cGVDaGVja1N5bWJv
bAotICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9u
ZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLS5vcFB1dEJ5SWRUeXBlQ2hl
Y2tPYmplY3Q6Ci0gICAgYmJhZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLS5vcFB1dEJ5
SWRUeXBlQ2hlY2tTeW1ib2w6Ci0gICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN5bWJvbFR5
cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwot
Ci0ub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmc6Ci0gICAgIyBXZSBhcmUgb25lIG9m
IHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIKLSAg
ICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNr
TGVzc1RoYW5JbnQzMgotCi0gICAgIyBXZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4KLSAg
ICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVj
a051bWJlcgotCi0gICAgYnFhZXEgdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hl
Y2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNr
TnVtYmVyOgotICAgIGJ0cW56IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNr
aW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xl
c3NUaGFuSW50MzI6Ci0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwg
Qm9vbGVhbiwgT3RoZXIuCi0gICAgYnBuZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVh
biwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKLSAgICB4b3JxIFZhbHVlRmFsc2Us
IHQzCi0gICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGpt
cCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKLSAg
ICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNr
T3RoZXIKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlCi0gICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5
VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIK
LSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhT
dHJ1Y3R1cmU6Ci0gICAgdXJzaGlmdHAgMywgdDEKLSAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0
cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5
cGVzOgogICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQx
Ci0gICAgCiAgICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KIAogICAgICMgVGhp
cyBpcyB0aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUgbmV3IHN0cnVjdHVyZUlELiB0
MiBob2xkcyB0aGUgb2xkIHN0cnVjdHVyZSBJRC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIzOTk2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDIzICsyMDQsNiBAQCBlbHNlCiAgICAgY29uc3QgTG93
ZXN0VGFnID0gY29uc3RleHByIEpTVmFsdWU6Okxvd2VzdFRhZwogZW5kCiAKLSMgUHV0QnlJZEZs
YWdzIGRhdGEKLWNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSBjb25zdGV4cHIgUHV0QnlJ
ZFByaW1hcnlUeXBlTWFzawotY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gY29u
c3RleHByIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeQotY29uc3QgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVPYmpl
Y3RXaXRoU3RydWN0dXJlCi1jb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlciA9IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcgotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrID0gY29uc3RleHByIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlTWFzawotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20g
PSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20KLWNvbnN0IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm9vbGVhbiA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4K
LWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPdGhlcgotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IGNvbnN0ZXhw
ciBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51
bWJlciA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlcgotY29uc3QgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVTdHJpbmcgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJp
bmcKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sID0gY29uc3RleHByIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlU3ltYm9sCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IGNv
bnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdAotY29uc3QgUHV0QnlJZFNlY29uZGFy
eVR5cGVPYmplY3RPck90aGVyID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0
T3JPdGhlcgotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSBjb25zdGV4cHIgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVUb3AKLQogY29uc3QgQ2FsbE9wQ29kZVNpemUgPSBjb25zdGV4cHIgb3Bf
Y2FsbF9sZW5ndGgKIAogY29uc3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSBjb25z
dGV4cHIgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0
dXJlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChJbmZlcnJlZFN0cnVjdHVyZSk7Ci0KLUluZmVycmVkU3Ry
dWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IHBhcmVudChwYXJlbnQpCi0gICAgLCBzdHJ1Y3R1
cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQotewotICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQoJndhdGNocG9pbnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0
dXJlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkU3RydWN0dXJlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgSW5mZXJyZWRUeXBlOwotY2xhc3MgU3RydWN0dXJlOwotCi1jbGFzcyBJbmZl
cnJlZFN0cnVjdHVyZSBmaW5hbCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmZlcnJl
ZFN0cnVjdHVyZSk7Ci1wdWJsaWM6Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJl
ZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7Ci0KLSAgICBJbmZlcnJlZFR5cGUqIHBhcmVudDsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgCi0gICAgSW5mZXJy
ZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IHdhdGNocG9pbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0KLSNpbmNsdWRlICJJbmZlcnJlZFR5
cGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBv
aW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikKLXsKLSAgICBJbmZl
cnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQotICAgICAgICBiaXR3aXNlX2Nhc3Q8
SW5mZXJyZWRTdHJ1Y3R1cmUqPigKLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKLQot
ICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRTdHJ1Y3R1cmUtPnBhcmVu
dDsKLSAgICAKLSAgICBpZiAoIWluZmVycmVkVHlwZS0+aXNMaXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBpbmZlcnJlZFR5cGUtPnJlbW92ZVN0cnVjdHVyZSh2bSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaAkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgewotcHJvdGVjdGVkOgotICAg
IHZvaWQgZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDU2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgot
Ci0jaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsIDogcHVi
bGljIEZpcmVEZXRhaWwgewotcHVibGljOgotICAgIEluZmVycmVkVHlwZUZpcmVEZXRhaWwoCi0g
ICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LAotICAgICAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3Is
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgbmV3RGVzY3JpcHRvciwKLSAgICAgICAg
SlNWYWx1ZSBvZmZlbmRpbmdWYWx1ZSkKLSAgICAgICAgOiBtX2luZmVycmVkVHlwZShpbmZlcnJl
ZFR5cGUpCi0gICAgICAgICwgbV91aWQodWlkKQotICAgICAgICAsIG1fb2xkRGVzY3JpcHRvcihv
bGREZXNjcmlwdG9yKQotICAgICAgICAsIG1fbmV3RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yKQot
ICAgICAgICAsIG1fb2ZmZW5kaW5nVmFsdWUob2ZmZW5kaW5nVmFsdWUpCi0gICAgewotICAgIH0K
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIkluZmVycmVkIHR5
cGUgY2hhbmdlZCBvbiAiLCBSYXdQb2ludGVyKG1faW5mZXJyZWRUeXBlKSwgIiBmb3IgcHJvcGVy
dHkgIiwgbV91aWQsICI6ICIKLSAgICAgICAgICAgICJvbGQgdHlwZSB3YXMgIiwgbV9vbGREZXNj
cmlwdG9yLCAiIHdoaWxlIGRlc2lyZWQgdHlwZSBpcyAiLCBtX25ld0Rlc2NyaXB0b3IpOwotICAg
ICAgICBpZiAobV9vZmZlbmRpbmdWYWx1ZSkKLSAgICAgICAgICAgIG91dC5wcmludCgiIGR1ZSB0
byAiLCBtX29mZmVuZGluZ1ZhbHVlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSW5mZXJyZWRU
eXBlKiBtX2luZmVycmVkVHlwZTsKLSAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdWlk
OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX29sZERlc2NyaXB0b3I7Ci0gICAgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fbmV3RGVzY3JpcHRvcjsKLSAgICBKU1ZhbHVlIG1fb2Zm
ZW5kaW5nVmFsdWU7Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8g
PSB7ICJJbmZlcnJlZFR5cGUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKLQotSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6
OmNyZWF0ZShWTSYgdm0pCi17Ci0gICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0p
OwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZl
cnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwp
OwotICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Ci19Ci0K
LVN0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkVHlw
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNl
bGwpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgaWYgKGlu
ZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCi0gICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5
cGVzV2l0aEZpbmFsaXplcnMuYWRkKGluZmVycmVkVHlwZSk7Ci19Ci0KLUluZmVycmVkVHlwZTo6
S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCi17Ci0g
ICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2spIHsKLSAgICBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKLSAgICAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlTWFzaykgewotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
Qm90dG9tOgotICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKLSAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gQm9vbGVhbjsKLSAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgotICAgICAgICAgICAgcmV0dXJuIE90
aGVyOwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzI6Ci0gICAgICAgICAg
ICByZXR1cm4gSW50MzI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXI6
Ci0gICAgICAgICAgICByZXR1cm4gTnVtYmVyOwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlU3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKLSAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN5bWJvbDoKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2w7Ci0g
ICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6Ci0gICAgICAgICAgICByZXR1
cm4gT2JqZWN0OwotICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhl
cjoKLSAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOwotICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlVG9wOgotICAgICAgICAgICAgcmV0dXJuIFRvcDsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gQm90dG9tOwotICAgICAgICB9Ci0gICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVy
ZTsKLSAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgotICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IEJvdHRvbTsKLSAgICB9Ci19Ci0KLUluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzQm9vbGVhbigpKQotICAgICAgICByZXR1cm4gQm9vbGVhbjsKLSAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIE90aGVyOwotICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCi0gICAgICAgIHJldHVybiBJbnQzMjsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuIE51bWJlcjsKLSAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAg
ICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmIChjZWxsLT5p
c1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKLSAgICAgICAgaWYgKGNlbGwt
PmlzU3ltYm9sKCkpCi0gICAgICAgICAgICByZXR1cm4gU3ltYm9sOwotICAgICAgICBpZiAoY2Vs
bC0+aXNCaWdJbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBCaWdJbnQ7Ci0gICAgICAgIGlmIChj
ZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
VG9wOwotfQotCi1JbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yOjpmb3JGbGFncyhWTSYgdm0sIFB1dEJ5SWRGbGFncyBmbGFncykKLXsKLSAgICBLaW5kIGtp
bmQgPSBraW5kRm9yRmxhZ3MoZmxhZ3MpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAg
IGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCi0gICAgICAgIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpOwotICAgIGVsc2UK
LSAgICAgICAgc3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICByZXR1cm4gRGVzY3JpcHRvcihraW5k
LCBzdHJ1Y3R1cmUpOwotfQotCi1QdXRCeUlkRmxhZ3MgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjpwdXRCeUlkRmxhZ3MoKSBjb25zdAotewotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2Fz
ZSBCb3R0b206Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5
SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tKTsKLSAg
ICBjYXNlIEJvb2xlYW46Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVh
bik7Ci0gICAgY2FzZSBPdGhlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVP
dGhlcik7Ci0gICAgY2FzZSBJbnQzMjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5
SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5
cGVJbnQzMik7Ci0gICAgY2FzZSBOdW1iZXI6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
dXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTnVtYmVyKTsKLSAgICBjYXNlIFN0cmluZzoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVTdHJpbmcpOwotICAgIGNhc2UgU3ltYm9sOgotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN5bWJvbCk7Ci0gICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsKLSAgICBjYXNlIEJpZ0ludDoKLSAgICBjYXNl
IE9iamVjdE9yT3RoZXI6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0
T3JPdGhlcik7Ci0gICAgY2FzZSBUb3A6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlVG9wKTsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAotICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgp
KSk7Ci0gICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0
dXJlLT5pZCgpKSk7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIFB1dEJ5SWROb25lOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
cjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCi17Ci0gICAgLy8gRmlsdGVyIG91dCBj
b21tb24gdGhpbmdzIHRvIHNpbXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlbG93LgotICAg
IGlmICgqdGhpcyA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvdGhlci5tX2tp
bmQgPT0gQm90dG9tKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkgewot
ICAgIGNhc2UgQm90dG9tOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBCb29sZWFuOgotICAgIGNhc2UgU3RyaW5nOgotICAgIGNhc2UgU3ltYm9sOgot
ICAgIGNhc2UgQmlnSW50OgotICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKLSAgICAgICAgICAgICp0aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICBjYXNlIEludDMyOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2lu
ZCkgewotICAgICAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgICAgICp0aGlzID0gTnVtYmVyOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMg
PSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE51bWJlcjoK
LSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0g
VG9wOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25v
dyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KLSAgICAgICAgY2FzZSBPYmplY3Q6
Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgICAgIGlmIChtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICp0aGlzID0g
b3RoZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
YXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgICAgICBtX2tp
bmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlOgotICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJl
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JP
dGhlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUs
IHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KLSAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyOgotICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgotICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAg
ICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICBjYXNlIE9iamVjdDoK
LSAgICAgICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgY2FzZSBUb3A6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
cjo6cmVtb3ZlU3RydWN0dXJlKCkKLXsKLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgKnRoaXMgPSBPYmplY3Q7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAqdGhp
cyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotfQotCi1ib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vi
c3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgRGVzY3JpcHRvciBt
ZXJnZWQgPSAqdGhpczsKLSAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOwotICAgIHJldHVybiAqdGhp
cyA9PSBtZXJnZWQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewot
ICAgIG91dC5wcmludChtX2tpbmQpOwotICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgb3V0
LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotfQotCi12b2lk
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQotSW5mZXJyZWRUeXBlOjpJ
bmZlcnJlZFR5cGUoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0
dXJlLmdldCgpKQotICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKLXsKLX0K
LQotSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKLXsKLX0KLQotYm9vbCBJbmZlcnJlZFR5
cGU6OmNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNj
cmlwdG9yJiBleHBlY3RlZCkKLXsKLSAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikg
PT0gZXhwZWN0ZWQ7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBEZXNj
cmlwdG9yJiBleHBlY3RlZCkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgcmV0dXJuIGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOwotfQotCi12b2lkIElu
ZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlw
dG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7Ci0KLSAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdh
dGNocG9pbnQpOwotfQotCi12b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBhZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Ci19Ci0KLXZvaWQgSW5m
ZXJyZWRUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6IiwgZGVzY3JpcHRvcigpKTsKLX0KLQotYm9vbCBJbmZlcnJl
ZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgRGVzY3JpcHRvciBvbGRUeXBlOwotICAgIERlc2Ny
aXB0b3IgbXlUeXBlOwotICAgIGJvb2wgcmVzdWx0OwotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihs
b2NrZXIpOwotICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7Ci0K
LSAgICAgICAgbXlUeXBlLm1lcmdlKG9sZFR5cGUpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJU
KG9sZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2Un
cmUgb24gdGhlIHNsb3cgcGF0aC4KLQotICAgICAgICBib29sIHNldFJlc3VsdCA9IHNldChsb2Nr
ZXIsIHZtLCBteVR5cGUpOwotICAgICAgICByZXN1bHQgPSBraW5kKGxvY2tlcikgIT0gVG9wOwot
ICAgICAgICBpZiAoIXNldFJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIAotICAgIEluZmVycmVkVHlwZUZpcmVEZXRhaWwgZGV0YWlsKHRoaXMsIHByb3BlcnR5
TmFtZS51aWQoKSwgb2xkVHlwZSwgbXlUeXBlLCB2YWx1ZSk7Ci0gICAgbV93YXRjaHBvaW50U2V0
LmZpcmVBbGwodm0sIGRldGFpbCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbmZl
cnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
LXsKLSAgICBEZXNjcmlwdG9yIG9sZFR5cGU7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tl
cik7Ci0gICAgICAgIGlmICghc2V0KGxvY2tlciwgdm0sIFRvcCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwodGhpcywgcHJv
cGVydHlOYW1lLnVpZCgpLCBvbGRUeXBlLCBUb3AsIEpTVmFsdWUoKSk7Ci0gICAgbV93YXRjaHBv
aW50U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpzZXQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdE
ZXNjcmlwdG9yKQotewotICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBj
aGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgotICAg
IGlmIChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYm9vbCBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IGZhbHNlOwotICAg
IAotICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRo
ZSBwcmV2aW91cyBvbmUuCi0gICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3Jp
cHRvcihsb2NrZXIpKSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlm
ZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVs
bC4KLSAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpCi0gICAgICAgIEFTU0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVj
dHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLQotICAgIC8vIFdlIGFyZSBj
aGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGlu
ZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCi0gICAgLy8gYW55b25lIGlzIHdhdGNo
aW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBz
b3J0IG9mIHRoaW5nIGFnYWluLgotICAgIGlmIChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBD
bGVhcldhdGNocG9pbnQpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlk
YXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgotICAg
ICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7Ci0K
LSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNv
bWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAotICAgICAg
ICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMg
Y3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBmb3IKLSAgICAgICAgLy8g
aXQuCi0gICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7Ci0KLSAgICAgICAgc2hvdWxkRmlyZVdh
dGNocG9pbnRTZXQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSkKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3Ry
dWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgfQotCi0g
ICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCi0gICAgbV9raW5kID0gbmV3
RGVzY3JpcHRvci5raW5kKCk7Ci0KLSAgICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdzLgot
ICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Ci0KLSAgICBy
ZXR1cm4gc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpy
ZW1vdmVTdHJ1Y3R1cmUoVk0mIHZtKQotewotICAgIC8vIEZJWE1FOiBGaW5kIGFuIGVsZWdhbnQg
YW5kIGNoZWFwIHdheSB0byB0aHJlYWQgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHdlIGdvdCBoZXJl
IGludG8gdGhlIGZpcmUKLSAgICAvLyBkZXRhaWwgaW4gc2V0KCkuCi0gICAgCi0gICAgRGVzY3Jp
cHRvciBvbGREZXNjcmlwdG9yOwotICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcjsKLSAgICB7
Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgb2xk
RGVzY3JpcHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKLSAgICAgICAgbmV3RGVzY3JpcHRvciA9
IG9sZERlc2NyaXB0b3I7Ci0gICAgICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGVGaXJlRGV0YWls
IGRldGFpbCh0aGlzLCBudWxscHRyLCBvbGREZXNjcmlwdG9yLCBuZXdEZXNjcmlwdG9yLCBKU1Zh
bHVlKCkpOwotICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBK
U0M7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6
OktpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm90dG9tOgotICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgIG91dC5wcmludCgiQm9v
bGVhbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgot
ICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElu
ZmVycmVkVHlwZTo6SW50MzI6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIG91dC5wcmlu
dCgiTnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3Ry
aW5nOgotICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAgICAgb3V0LnByaW50KCJTeW1ib2wiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCaWdJbnQ6Ci0gICAgICAg
IG91dC5wcmludCgiQmlnSW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRo
U3RydWN0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6Ci0gICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKLSAgICAgICAgb3V0LnByaW50
KCJPYmplY3RPck90aGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlw
ZTo6VG9wOgotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRTdHJ1
Y3R1cmUuaCIKLSNpbmNsdWRlICJJc29DZWxsU2V0LmgiCi0jaW5jbHVkZSAiSlNDYXN0LmgiCi0j
aW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCi0jaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhl
IGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCi0KLWNsYXNzIElu
ZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAmdm0uaW5mZXJyZWRUeXBlU3BhY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEluZmVycmVkVHlw
ZSogY3JlYXRlKFZNJik7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsOwotICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotCi0gICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAg
REVDTEFSRV9JTkZPOwotCi0gICAgZW51bSBLaW5kIDogdWludDhfdCB7Ci0gICAgICAgIEJvdHRv
bSwKLSAgICAgICAgQm9vbGVhbiwKLSAgICAgICAgT3RoZXIsCi0gICAgICAgIEludDMyLAotICAg
ICAgICBOdW1iZXIsCi0gICAgICAgIFN0cmluZywKLSAgICAgICAgU3ltYm9sLAotICAgICAgICBC
aWdJbnQsCi0gICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmUsCi0gICAgICAgIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyLAotICAgICAgICBPYmplY3QsCi0gICAgICAgIE9iamVjdE9yT3RoZXIs
Ci0gICAgICAgIFRvcAotICAgIH07Ci0KLSAgICBzdGF0aWMgS2luZCBraW5kRm9yRmxhZ3MoUHV0
QnlJZEZsYWdzKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBoYXNTdHJ1Y3R1cmUoS2luZCBraW5k
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKLSAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRGVzY3JpcHRvciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgIDogbV9raW5kKEJv
dHRvbSkKLSAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgRGVzY3JpcHRvcihLaW5kIGtpbmQsIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogbV9raW5kKGtpbmQpCi0gICAgICAgICAgICAs
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGhhc1N0
cnVjdHVyZShraW5kKSkKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZvclZhbHVlKEpTVmFsdWUpOwotCi0g
ICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZvckZsYWdzKFZNJiwgUHV0QnlJZEZsYWdzKTsKLQot
ICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fa2luZCAhPSBCb3R0b20gfHwgbV9zdHJ1Y3R1cmU7Ci0gICAgICAgIH0K
LQotICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotCi0g
ICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3MoKSBjb25zdDsKLQotICAgICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgICAgICAgICAgY2FzZSBCb3R0b206Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuOgot
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKLSAgICAgICAgICAgIGNh
c2UgT3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCk7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5pc0ludDMyKCk7Ci0gICAgICAgICAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKLSAgICAgICAgICAgIGNhc2UgU3RyaW5nOgotICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOwotICAgICAgICAgICAgY2FzZSBTeW1i
b2w6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3ltYm9sKCk7Ci0gICAgICAgICAg
ICBjYXNlIEJpZ0ludDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCaWdJbnQoKTsK
LSAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1f
c3RydWN0dXJlOwotICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQotICAgICAg
ICAgICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpID09IG1fc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGNhc2UgT2JqZWN0OgotICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOwotICAgICAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7Ci0gICAgICAgICAgICBjYXNlIFRvcDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKLSAgICAgICAgICAgICAgICAmJiBtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6
OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fa2luZCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBEZXNjcmlwdG9yJik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7Ci0KLSAgICAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhh
biB0aGUgb3RoZXIgb25lLgotICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3Im
KSBjb25zdDsKLQotICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OwotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIEtpbmQgbV9raW5kOwotICAgICAgICBTdHJ1Y3R1cmUq
IG1fc3RydWN0dXJlOwotICAgIH07Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrJiBsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NrOyB9Ci0KLSAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhy
ZWFkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9z
dHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpIDogbnVsbHB0cik7Ci0gICAg
fQotICAgIAotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7
Ci0gICAgfQotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBkZXNj
cmlwdG9yKGxvY2tlcik7Ci0gICAgfQotICAgIAotICAgIEtpbmQga2luZChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpLmtp
bmQoKTsgfQotCi0gICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7
IH0KLSAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9
Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxl
dmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgotICAg
IEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBEZXNjcmlwdG9yIGN1
cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKLSAgICAgICAgaWYgKGN1
cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7Ci0gICAgICAgIHJldHVybiB3aWxsU3Rv
cmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgIH0KLQotICAgIC8vIElt
bWVkaWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgotICAgIHZvaWQgbWFrZVRvcChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi0gICAgewotICAgICAgICBpZiAoaXNU
b3AoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbWFrZVRvcFNsb3codm0sIHByb3Bl
cnR5TmFtZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBt
YWtlcyBzZW5zZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9y
LiBOb3RlIHRoYXQKLSAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9w
LgotICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRGVz
Y3JpcHRvciYpOwotICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYpOwotICAgIAot
ICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBXYXRjaHBv
aW50Kik7Ci0gICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKLQotICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKTsKLQotcHJpdmF0ZToKLSAgICBJbmZlcnJlZFR5cGUoVk0mKTsKLSAgICB+
SW5mZXJyZWRUeXBlKCk7Ci0KLSAgICBib29sIHdpbGxTdG9yZVZhbHVlU2xvdyhWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYsIFByb3BlcnR5TmFt
ZSk7Ci0KLSAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9yZVZhbHVlU2xvdygpIGFuZCBtYWtlVG9w
U2xvdygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZmlyZSB0aGUKLSAgICAvLyB3
YXRjaHBvaW50IHNldC4KLSAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
TSYsIERlc2NyaXB0b3IpOwotICAgIAotICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKFZNJik7Ci0g
ICAgCi0gICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlOwotICAgIGZyaWVuZCBjbGFz
cyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0KLSAgICBtdXRhYmxlIENvbmN1cnJlbnRK
U0xvY2sgbV9sb2NrOwotICAgIAotICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgUG9pc29uZWQuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDcxNQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZl
cnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0KLSAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJl
aW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhh
dCBpdCB3b3VsZG4ndCBiZQotICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFs
c28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0
byB0aGUgREZHCi0gICAgLy8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5
cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hlcy4KLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0
IG1fd2F0Y2hwb2ludFNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5
cGU6OktpbmQpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZUlubGlu
ZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHZvaWQgSW5mZXJy
ZWRUeXBlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCi17Ci0gICAgQVNTRVJUKEhl
YXA6OmlzTWFya2VkKHRoaXMpKTsKLSAgICAKLSAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgcmVtb3ZlU3RydWN0dXJlKHZtKTsK
LSAgICB9Ci0gICAgCi0gICAgdm0uaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzLnJlbW92ZSh0
aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbmZlcnJlZFR5cGVUYWJsZS5oIgotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8g
PSB7ICJJbmZlcnJlZFR5cGVUYWJsZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlVGFibGUpIH07Ci0KLUluZmVycmVkVHlwZVRhYmxl
KiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkKLXsKLSAgICBJbmZlcnJlZFR5cGVU
YWJsZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlVGFi
bGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7Ci0gICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGVU
YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSW5mZXJyZWRUeXBlVGFibGUqIGlu
ZmVycmVkVHlwZVRhYmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsK
LSAgICBpbmZlcnJlZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVU
YWJsZSgpOwotfQotCi1TdHJ1Y3R1cmUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQot
Ci12b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlw
ZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7Ci0gICAgQmFzZTo6dmlz
aXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
aW5mZXJyZWRUeXBlVGFibGUtPmNlbGxMb2NrKCkpOwotICAgIAotICAgIGZvciAoYXV0byYgZW50
cnkgOiBpbmZlcnJlZFR5cGVUYWJsZS0+bV90YWJsZSkgewotICAgICAgICBhdXRvIGVudHJ5VmFs
dWUgPSBlbnRyeS52YWx1ZTsKLQotICAgICAgICBpZiAoIWVudHJ5VmFsdWUpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5VmFsdWUtPmlzUmVsZXZhbnQoKSkKLSAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5VmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBlbnRyeS52YWx1ZS5jbGVhcigpOwotICAgIH0KLX0KLQotSW5mZXJyZWRUeXBlKiBJbmZl
cnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKLSAgICBpZiAo
aXRlciA9PSBtX3RhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIElu
ZmVycmVkVHlwZSogZW50cnlWYWx1ZSA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgIGlmICghZW50
cnlWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBUYWtlIHRoaXMgb3Bw
b3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxpZGF0ZWQgdHlwZXMuCi0gICAgaWYgKCFlbnRyeVZhbHVl
LT5pc1JlbGV2YW50KCkpIHsKLSAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VmFsdWU7Ci19Ci0KLUlu
ZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7Ci0gICAgcmV0dXJu
IGdldChsb2NrZXIsIHVpZCk7Ci19Ci0KLUluZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6
OmdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBnZXQocHJvcGVy
dHlOYW1lLnVpZCgpKTsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFs
dWUoCi0gICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCi17Ci0gICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJl
bGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBt
YXAuCi0gICAgCi0gICAgaWYgKGFnZSA9PSBTdG9yZWRQcm9wZXJ0eUFnZTo6T2xkUHJvcGVydHkp
IHsKLSAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3Bl
cnR5TmFtZS51aWQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCi0KLSAg
ICAgICAgSW5mZXJyZWRUeXBlKiBlbnRyeVZhbHVlID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAg
ICAgIGlmICghZW50cnlWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChlbnRyeVZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGl0
ZXItPnZhbHVlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBU
YWJsZVR5cGU6OkFkZFJlc3VsdCByZXN1bHQ7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9w
ZXJ0eU5hbWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOwotICAgIH0KLSAg
ICBJbmZlcnJlZFR5cGUqIGVudHJ5VmFsdWUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwotCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEluZmVycmVkVHlwZSog
aW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOwotICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwg
dGhpcywgaW5mZXJyZWRUeXBlKTsKLSAgICAgICAgZW50cnlWYWx1ZSA9IGluZmVycmVkVHlwZTsK
LSAgICB9IGVsc2UgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKGVudHJ5VmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5jbGVhcigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGVU
YWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFN0b3JlZFBy
b3BlcnR5QWdlIGFnZSkKLXsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRo
ZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KLSAgICBp
ZiAoYWdlID09IFN0b3JlZFByb3BlcnR5QWdlOjpPbGRQcm9wZXJ0eSkgewotICAgICAgICBUYWJs
ZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKTsK
LSAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybjsg
Ly8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KLQotICAgICAgICBJbmZlcnJlZFR5cGUqIGVu
dHJ5VmFsdWUgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLQotICAgICAgICBpZiAoIWVudHJ5VmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZW50cnlWYWx1ZS0+bWFrZVRvcCh2bSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFRhYmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKLSAgICB7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7Ci0gICAgICAgIHJlc3Vs
dCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVk
VHlwZT4oKSk7Ci0gICAgfQotICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3Aodm0s
IHByb3BlcnR5TmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOwotfQot
Ci1JbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0mIHZtKQotICAgIDogQmFz
ZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCi17Ci19Ci0KLUluZmVy
cmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShub25leGlzdGVudCkKQEAgLTEsOTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5
cGUuaCIKLSNpbmNsdWRlICJKU0Nhc3QuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vIEEgdGFi
bGUgb2YgaW5mZXJyZWQgdHlwZXMgZm9yIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIGEgSlNDZWxs
IGJlY2F1c2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBTdHJ1Y3R1cmUKLS8vIGRlc3RydWN0b3IgYW5k
IG1ha2VzIGxpZmV0aW1lIGVhc2llciB0byBtYW5hZ2UuIEZvciBleGFtcGxlLCBzaW5jZSBpdCdz
IGEgY2VsbCwgd2Uga25vdyB0aGF0IHRoaXMgdGhpbmcKLS8vIGNhbm5vdCBiZSBkZWxldGVkIHdo
aWxlIHRoZSBERkcgaXMgcnVubmluZy4gVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIFByb3BlcnR5VGFi
bGUgYmVjYXVzZSBtb3N0IHByb3BlcnRpZXMKLS8vIHdpbGwgbm90IGhhdmUgYW4gSW5mZXJyZWRU
eXBlLCBzaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGluIGRpY3Rpb25hcmllcyAoaWYgeW91IHRo
aW5rIG9mICJhIHByb3BlcnR5IgotLy8gYXMgYmVpbmcgImEgcHJvcGVydHkgaW4gc29tZSBTdHJ1
Y3R1cmUiKS4gQWxzbywgdGhpcyB3aWxsIGhhcHBpbHkgY29uZmxhdGUgdGhlIHR5cGVzIG9mIHBy
b3BlcnRpZXMgZnJvbQotLy8gZGlmZmVyZW50IHN0cnVjdHVyZXMgZXZlbiBpZiB0aGUgc3RydWN0
dXJlcyByZXByZXNlbnQgZGlzam9pbnQgc2V0cyBvZiBvYmplY3RzLgotCi1jbGFzcyBJbmZlcnJl
ZFR5cGVUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0KLSAgICBzdGF0aWMgSW5mZXJyZWRUeXBlVGFibGUqIGNyZWF0ZShWTSYp
OwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKLSAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKLQotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIERFQ0xBUkVfSU5GTzsK
LQotICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZlcnJlZCB0eXBlLiBSZXR1cm5zIG51bGxwdHIg
Zm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwgbWVhbnMgQm90dG9tIGlmIHRoZQotICAgIC8v
IG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93IGFib3V0IHRoZSBwcm9wZXJ0eS4KLSAgICBJ
bmZlcnJlZFR5cGUqIGdldChjb25zdCBBYnN0cmFjdExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7Ci0gICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKLSAgICBJbmZl
cnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOwotCi0gICAgZW51bSBjbGFzcyBTdG9yZWRQcm9w
ZXJ0eUFnZSB7IE5ld1Byb3BlcnR5LCBPbGRQcm9wZXJ0eSB9OwotICAgIAotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlzIHN0aWxsIHJl
bGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKLSAgICAvLyByZWxldmFudCBpZiBpdCdz
IFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5lIFRvcCBlbnRy
aWVzLgotICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFN0b3JlZFByb3BlcnR5QWdlKTsKLQotICAgIC8vIEludmFsaWRhdGVzIHRoZSB0eXBlIGZvciB0
aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJlZmxlY3RpdmUg
Y29udGV4dC4KLSAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3Bl
cnR5QWdlKTsKLQotcHJpdmF0ZToKLSAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYpOwotICAgIH5J
bmZlcnJlZFR5cGVUYWJsZSgpOwotCi0gICAgLy8gQm90dG9tOiBhYnNlbmNlIGZyb20gdGFibGUu
Ci0gICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlzUmVsZXZhbnQoKSwg
b3IgYWJzZW5jZSBmcm9tIHRhYmxlLgotICAgIC8vCi0gICAgLy8gV2Uga25vdyBob3cgdG8gZGV0
ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9yIHRvcCBkZXBlbmRp
bmcgb24gd2hldGhlciB0aGUKLSAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBvd25p
bmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUsIGFic2VuY2Ug
bWF5IGhhdmUKLSAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkgdGhhdCB0aGlzIGNs
YXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3Bl
cnR5Ci0gICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYWN0aW9uczogcmVw
bGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJvcGVydHkKLSAgICAv
LyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElmIHdlJ3JlIHN0b3Jp
bmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UpLCB0aGVuCi0gICAgLy8gYWJzZW5j
ZSBtZWFucyB0b3AuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3Ig
dGhlIGNhc2Ugd2hlcmUgdHdvIHN0cnVjdHVyZXMsIFMxIGFuZAotICAgIC8vIFMyLCBzaGFyZSB0
aGUgc2FtZSBJbmZlcnJlZFR5cGVUYWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBr
bm93IGFib3V0IHByb3BlcnR5IFAuIFMxIG1heQotICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91
dCBhIHR5cGUsIHdoaWxlIFMyIG1heSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBh
ZGRlZCBQIGFuZCB1c2VkIGFic2VuY2UKLSAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIg
d291bGQgdXNlIHRoYXQgYWJzZW5jZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNy
ZWF0aW5nIGEgbm9uLVRvcAotICAgIC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3Vs
ZCBmb3JnZXQgdGhhdCBpdCB3YW50ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xl
YXJseSwKLSAgICAvLyB0aGF0J3MgYmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1
cmluZyB0aGF0IGEgdHJhbnNpdGlvbiBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCi0gICAg
Ly8gYWJzZW5jZS1tZWFucy1ib3R0b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRp
ZXMgYWRkZWQgYmVmb3JlIHRoZSBJbmZlcnJlZFR5cGVUYWJsZSB3YXMKLSAgICAvLyBjcmVhdGVk
LgotICAgIHVzaW5nIFRhYmxlVHlwZSA9IEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
PiwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoPjsKLQotICAg
IFRhYmxlVHlwZSBtX3RhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHJldmlzaW9u
IDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTSW50ZXJuYWxQcm9taXNlOwogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q7Citj
bGFzcyBKU01vZHVsZVJlY29yZDsKIGNsYXNzIFNvdXJjZUNvZGU7CiAKIGNsYXNzIEpTTW9kdWxl
TG9hZGVyIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gdGhpcy0+
c3RydWN0dXJlSUQoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gcHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3RydWN0dXJlSUQsIHN0cnVjdHVyZSk7Ci0gICAgYm9vbCBzaG91bGRPcHRp
bWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0
aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CiAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSkKICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5
UHJvcGVydGllcygpOwpAQCAtMjgxLDcgKzI3OSw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKGluZGV4aW5nTW9k
ZSgpKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOwog
ICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1
cnJlbnRBdHRyaWJ1dGVzKTsKQEAgLTMxOCw5ICszMTUsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCiAgICAgICAg
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwogICAgIGlmIChu
ZXdTdHJ1Y3R1cmUpIHsKLSAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4
aXN0aW5nVHJhbnNpdGlvbigKLSAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgICAgICAKICAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYg
KGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKHZtKSk7
CkBAIC0zNDEsMTggKzMzNSwxMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluCiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgYm9v
bCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CisgICAgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwog
ICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0g
UHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5k
aWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVy
cmVkVHlwZSkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBs
YWNlKAotICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRl
eHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgICAgICB9Ci0KICAgICAgICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIAogICAgICAgICBpZiAoKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKSkgewpAQCAtMzc0LDggKzM2Miw2
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAKICAgICBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKICAgICAg
ICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3Qu
Y29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Ci0gICAgbmV3U3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAg
IAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDE1ICsz
NzEsMTEgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVBybwogICAgIGlm
IChzZXRQcm9wZXJ0eVRhYmxlKQogICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0
YWJsZSk7CiAKLSAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5
cGVUYWJsZS5nZXQoKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsg
aS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAo
IXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5n
ZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91
cygpKTsKLSAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUt
Pm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQotICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRU
eXBlID0gdHJ1ZTsKICAgICAgICAgdGFibGUtPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNTAz
LDcgKzQ5OSw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW4KICAg
ICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0
TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUu
Z2V0KCkpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOwogCkBAIC01MzYsMTIgKzUzMSw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpyZW1vdmVQcm9wZXJ0eVRyYW4KICAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5l
ZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5k
bGUgY2FjaGVkCiAgICAgLy8gICByZW1vdmFscy4KICAgICAvLwotICAgIC8vIC0gSW5mZXJyZWRU
eXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlz
IGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3VsZAotICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkg
YW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9w
dGltaXphdGlvbiB3b3VsZG4ndAotICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3Zh
bCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5n
IGVxdWl2YWxlbnQgdG8KLSAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmds
eSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJz
ZW50LCBidXQKLSAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCi0gICAgCiAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUpOwpAQCAtODkyLDQzICs4ODEsNiBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRX
YXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1
ZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCi0gICAgVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9w
dGltaXplLAotICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCi17
Ci0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1
cmUodm0pLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIEFTU0VSVCghaGFzQmVlbkRpY3Rp
b25hcnkoKSk7Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKFZNOjpjYW5Vc2VKSVQoKSwgIldl
IGRvbid0IHdhbnQgdG8gdXNlIG1lbW9yeSBmb3IgaW5mZXJyZWQgdHlwZXMgdW5sZXNzIHdlJ3Jl
IHVzaW5nIHRoZSBKSVQuIik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFi
bGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIg
d2UgaGF2ZSBhbHJlYWR5Ci0gICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVy
dHkgbWFwLgotICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFi
bGUuZ2V0KCk7Ci0gICAgaWYgKCF0YWJsZSkgewotICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGUodm0pOwotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAg
ICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOwotICAgIH0KLQot
ICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KLSAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7
Ci0gICAgCi0gICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0
ZWQgdGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50Ci0g
ICAgLy8gYWxyZWFkeSwgc28gdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KLSAgICBQcm9w
ZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlk
KCkpOwotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgCi0gICAgaWYgKHNob3VsZE9wdGltaXplKQot
ICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOwotICAgIGVsc2UgewotICAgICAgICB0YWJsZS0+
bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBhZ2UpOwotICAgICAgICBlbnRyeS0+aGFzSW5mZXJy
ZWRUeXBlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHByb3BlcnR5VGFibGUtPnVzZSgpOyAv
LyBUaGlzIG1ha2VzIGl0IHNhZmUgdG8gdXNlIGVudHJ5IGFib3ZlLgotfQotCiAjaWYgRFVNUF9Q
Uk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwOTksOCArMTA1MSw2IEBAIHZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZS5jbGVhcigpOwotCi0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbmZl
cnJlZFR5cGVUYWJsZSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAj
aW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgot
I2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
I2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtNzYsMTMgKzc1LDEx
IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5
OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7Ci0g
ICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEg
cHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUs
IGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikK
ICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDAp
Ci0gICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBA
IC05MCw3ICs4Nyw2IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXko
a2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRy
aWJ1dGVzKQotICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTQzNSw3
ICs0MzEsNiBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0
eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpOwotICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFt
ZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAv
LyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91
ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3Mg
bG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBu
b3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTYwNSw1NSArNjAwLDYgQEAgcHVibGljOgogICAgICAg
ICBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKHZtKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1f
aW5mZXJyZWRUeXBlVGFibGU7Ci0gICAgfQotCi0gICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5
cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmZlcnJl
ZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRhYmxlLT5nZXQodWlkKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmZlcnJlZFR5
cGUqIHJlc3VsdCA9IGluZmVycmVkVHlwZUZvcih1aWQpKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC0+ZGVzY3JpcHRvcigpOwotICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7Ci0g
ICAgfQotCi0gICAgLy8gQ2FsbCB0aGlzIHdoZW4gd2Uga25vdyB0aGF0IHRoaXMgaXMgYSBicmFu
ZCBuZXcgcHJvcGVydHkuIE5vdGUgdGhhdCBpdCdzIG5vdCBlbm91Z2ggZm9yIHRoZQotICAgIC8v
IHByb3BlcnR5IHRvIGJlIGJyYW5kIG5ldyB0byBzb21lIG9iamVjdC4gSXQgaGFzIHRvIGJlIGJy
YW5kIG5ldyB0byB0aGUgU3RydWN0dXJlLgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3Rv
cmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1f
aW5mZXJyZWRUeXBlVGFibGUpIHx8ICFWTTo6Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZTo6TmV3
UHJvcGVydHkpOwotICAgIH0KLQotICAgIC8vIENhbGwgdGhpcyB3aGVuIHdlIGtub3cgdGhhdCB0
aGlzIGlzIGEgbmV3IHByb3BlcnR5IGZvciB0aGUgb2JqZWN0LCBidXQgbm90IG5ldyBmb3IgdGhl
Ci0gICAgLy8gc3RydWN0dXJlLiBUaGVyZWZvcmUsIHVuZGVyIHRoZSBJbmZlcnJlZFR5cGVUYWJs
ZSdzIHJ1bGVzLCBhYnNlbmNlIG9mIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZQotICAgIC8vIHRhYmxl
IG1lYW5zIFRvcCByYXRoZXIgdGhhbiBCb3R0b20uCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHdp
bGxTdG9yZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0aW9uKAotICAgICAgICBWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUp
Ci0gICAgewotICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAhbV9pbmZlcnJlZFR5
cGVUYWJsZSB8fCAhVk06OmNhblVzZUpJVCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGlt
aXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2U6Ok5ld1Byb3BlcnR5KTsK
LSAgICB9Ci0KLSAgICAvLyBDYWxsIHRoaXMgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGluZmVycmVk
IHR5cGUgdGFibGUgZXhpc3RzIGFuZCBoYXMgYW4gZW50cnkgZm9yIHRoaXMgcHJvcGVydHkuCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKLSAgICAgICAg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZE9wdGltaXplKQotICAgIHsKLSAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwg
IVZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2lsbFN0b3Jl
VmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJy
ZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlOjpPbGRQcm9wZXJ0eSk7Ci0gICAgfQotCiAg
ICAgUmVmPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUsIGJvb2wmIHNh
d1BvbHlQcm90b1N0cnVjdHVyZSk7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkBAIC04MDAsOSArNzQ2LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0
V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KAotICAgICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKLQogICAg
IHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGlj
IGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsK
IApAQCAtODMzLDggKzc3Niw2IEBAIHByaXZhdGU6CiAgICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFw
c2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2Uu
CiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsK
IAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9pbmZlcnJlZFR5cGVUYWJs
ZTsKLQogICAgIG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBv
aW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYs
IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjM5OTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsMTggKzEyMCwxMSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpzdG9yCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOwotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOwotICAgIHJldHVybiBnZXQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICByZXR1cm4gZ2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewotICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBl
OwotICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJy
ZWRUeXBlKTsKLX0KLQotQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6Omdl
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVz
LCBib29sJiBoYXNJbmZlcnJlZFR5cGUpCi17CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OwogCkBAIC0xNDQsNyArMTM3LDYgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMg
PSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5m
ZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYg
QEAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVy
LmgiCiAjaW5jbHVkZSAiSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oIgotI2luY2x1ZGUgIkluZmVy
cmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSW50bENvbGxhdG9yQ29uc3RydWN0b3IuaCIKQEAgLTMw
Myw3ICszMDIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgY2VsbERhbmdlcm91c0JpdHNIZWFwQ2VsbFR5cGUuZ2V0KCksIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UpCiAgICAgLCBmdW5jdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNl
bGxKU1ZhbHVlT09CSGVhcENlbGxUeXBlLmdldCgpLCBKU0Z1bmN0aW9uKQogICAgICwgZ2VuZXJh
dG9yRnVuY3Rpb25TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhl
YXBDZWxsVHlwZS5nZXQoKSwgSlNHZW5lcmF0b3JGdW5jdGlvbikKLSAgICAsIGluZmVycmVkVHlw
ZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5
cGUuZ2V0KCksIEluZmVycmVkVHlwZSkKICAgICAsIGluZmVycmVkVmFsdWVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZl
cnJlZFZhbHVlKQogICAgICwgaW50ZXJuYWxGdW5jdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSW50ZXJuYWxGdW5j
dGlvbikKICNpZiBFTkFCTEUoSU5UTCkKQEAgLTMzNCw3ICszMzIsNiBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIGV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFj
ZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMoZXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQotICAgICwgaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6
ZXJzKGluZmVycmVkVHlwZVNwYWNlKQogICAgICwgaW5mZXJyZWRWYWx1ZXNXaXRoRmluYWxpemVy
cyhpbmZlcnJlZFZhbHVlU3BhY2UpCiAgICAgLCBldmFsQ29kZUJsb2NrU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRXZhbENv
ZGVCbG9jaykKICAgICAsIGZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRnVuY3Rpb25Db2RlQmxv
Y2spCkBAIC00MjcsOCArNDI0LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBpbmZlcnJlZFR5cGVUYWJsZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGV4Y2VwdGlvblN0cnVj
dHVyZS5zZXQoKnRoaXMsIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMzk5
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzcsNyArMzc3LDYgQEAgcHVibGljOgogICAgIElzb1N1YnNwYWNlIGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvblNwYWNlOwogICAg
IElzb1N1YnNwYWNlIGdlbmVyYXRvckZ1bmN0aW9uU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgaW5m
ZXJyZWRUeXBlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgaW5mZXJyZWRWYWx1ZVNwYWNlOwogICAg
IElzb1N1YnNwYWNlIGludGVybmFsRnVuY3Rpb25TcGFjZTsKICNpZiBFTkFCTEUoSU5UTCkKQEAg
LTQwOSw3ICs0MDgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSXNvQ2VsbFNldCBleGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50czsKICAgICBJc29DZWxsU2V0IGV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnM7Ci0gICAgSXNvQ2VsbFNldCBpbmZlcnJl
ZFR5cGVzV2l0aEZpbmFsaXplcnM7CiAgICAgSXNvQ2VsbFNldCBpbmZlcnJlZFZhbHVlc1dpdGhG
aW5hbGl6ZXJzOwogICAgIAogICAgIHN0cnVjdCBTcGFjZUFuZEZpbmFsaXplclNldCB7CkBAIC01
NTEsOCArNTQ5LDYgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHBy
b3BlcnR5VGFibGVTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBl
U3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7Cg==
</data>
<flag name="commit-queue"
          id="376017"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359228</attachid>
            <date>2019-01-15 16:59:03 -0800</date>
            <delta_ts>2019-01-15 17:41:49 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>178269</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5OTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxOS0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBUcnkgcmlwcGluZyBvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCBtaWdodCBiZSBhIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTA5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBpbmZlcnJlZCB0eXBlcyBmcm9tIEpTQy4g
SW5pdGlhbCBldmlkZW5jZSBzaG93cyB0aGF0CisgICAgICAgIHRoaXMgbWlnaHQgYmUgYXJvdW5k
IGEgfjElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyIGFuZCBKZXRTdHJlYW0yLgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBT
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9GaXRz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcDoKKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6cmVxdWlyZWRUeXBlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1R5cGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzdG9yZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJl
ZEluZmVycmVkVHlwZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5
QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6
YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6ZHVtcEluQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmluZmVycmVkVHlwZUZvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlZ2lzdGVySW5mZXJyZWRUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW5mZXJyZWRUeXBlRm9yUHJvcGVy
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg6IFJlbW92ZWQuCisg
ICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpjaGVja0luZmVycmVkVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdFR5cGUpOiBE
ZWxldGVkLgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQv
UmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgICog
bGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaDoKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OndpbGxT
dG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlN
YXBFbnRyeTo6UHJvcGVydHlNYXBFbnRyeSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKiBydW50
aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisKIDIwMTktMDEtMTQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIG9wdGlvbiB0byBKU0MgdG8gZHVtcCBtZW1vcnkgZm9vdHByaW50IG9uIHNj
cmlwdCBjb21wbGV0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTc5MywxMCArNzkzLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAogICAgIHJ1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5o
Ci0gICAgcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCi0gICAgcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZVdhdGNocG9pbnQuaAotICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmgKLSAgICBydW50
aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKICAgICBydW50aW1lL0luZmVycmVkVmFsdWUuaAogICAg
IHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oCiAgICAgcnVudGltZS9JbnQxNkFycmF5LmgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzOTk2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDcg
KzM0NCw2IEBAIGRmZy9ERkdHcmFwaC5jcHAKIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKIGRm
Zy9ERkdIZWFwTG9jYXRpb24uY3BwCiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCi1k
ZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCiBkZmcvREZHSW5zZXJ0aW9uU2V0LmNwcAogZGZn
L0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcApAQCAtNzY4LDEwICs3NjcsNiBAQCBydW50aW1lL0hhc2hNYXBJ
bXBsLmNwcAogcnVudGltZS9JZGVudGlmaWVyLmNwcAogcnVudGltZS9JbmRleGluZ1R5cGUuY3Bw
CiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwCi1ydW50aW1lL0luZmVycmVkU3Ry
dWN0dXJlLmNwcAotcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCi1ydW50
aW1lL0luZmVycmVkVHlwZS5jcHAKLXJ1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCiBydW50
aW1lL0luZmVycmVkVmFsdWUuY3BwCiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCiBy
dW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9VbmlmaWVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9VbmlmaWVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVW5pZmllZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw2IEBAICQo
U1JDUk9PVCkvZGZnL0RGR0dyYXBoLmNwcAogJChTUkNST09UKS9kZmcvREZHR3JhcGhTYWZlcG9p
bnQuY3BwCiAkKFNSQ1JPT1QpL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCiAkKFNSQ1JPT1QpL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKLSQoU1JDUk9PVCkvZGZnL0RGR0luZmVycmVk
VHlwZUNoZWNrLmNwcAogJChTUkNST09UKS9kZmcvREZHSW5zZXJ0aW9uU2V0LmNwcAogJChTUkNS
T09UKS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiAkKFNSQ1JPT1QpL2Rm
Zy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKQEAgLTczMiwxMCArNzMxLDYg
QEAgJChTUkNST09UKS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogJChTUkNST09UKS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCiAkKFNSQ1JPT1QpL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAogJChT
UkNST09UKS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwCi0kKFNSQ1JPT1QpL3J1
bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCi0kKFNSQ1JPT1QpL3J1bnRpbWUvSW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAotJChTUkNST09UKS9ydW50aW1lL0luZmVycmVkVHlwZS5j
cHAKLSQoU1JDUk9PVCkvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKICQoU1JDUk9PVCkv
cnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAogJChTUkNST09UKS9ydW50aW1lL0luaXRpYWxpemVU
aHJlYWRpbmcuY3BwCiAkKFNSQ1JPT1QpL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIz
OTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAKIAkJMEYw
NzBBNDkxRDU0M0E5MzAwNkU3MjMyIC8qIEhlYXBDZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNzBBNDQxRDU0M0E4OTAwNkU3MjMy
IC8qIEhlYXBDZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMDcwQTRCMUQ1NDNBOTgwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDcw
QTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIz
MzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxh
dGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkw
MDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
QjI4NkExRUI4RTZDRDAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBCMjg2RDFFQjhFNkQ1MDAwRUI1
RDIgLyogSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEIyODY4MUVCOEU2Q0QwMDBFQjVEMiAvKiBKU01h
cmtpbmdDb25zdHJhaW50UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5r
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTgxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUwOCw3ICs1MDcsNiBAQAogCQkwRkI0Njc3
RjFGRERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9t
SW5kaWNlcy5oICovOyB9OwogCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyog
SXNvQ2VsbFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5o
ICovOyB9OwotCQkwRkI0Njc4NTFGREZCNDU0MDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3
ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAqLzsgfTsKIAkJMEZC
NDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3QzFEOTlBRUE3MDA4RUE2
Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NEZWZlcnJh
bENvbnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxp
bmVzLmggKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1Bh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRG
QjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsKQEAgLTUzNCw4
ICs1MzIsNiBAQAogCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi87IH07CiAJCTBGQkUwRjc3MTZDMURCMTIwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oICovOyB9Owog
CQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJGMTU4QjE5QjdBNTMx
MDA2OTVERDAgLyogREZHQmxvY2tTZXRJbmxpbmVzLmggKi87IH07Ci0JCTBGQkY5MkI5MUZENzZG
RkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjkyQjgxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVy
cmVkU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5
NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovOyB9OwogCQkwRkMwOTdBMjE0NkIyOENDMDBDRjI0NDIgLyogREZHVGh1bmtz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTdB
MDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi87IH07CiAJCTBGQzIwQ0I2MTg1MkUy
QzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQg
LyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oICovOyB9OwpAQCAtNTQ4LDcgKzU0NCw2IEBA
CiAJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMzE3
Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkUxMTdD
RDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTBB
MTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGQzg0MTY5MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggKi87
IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM5N0YzRTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
OTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
OTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oICovOyB9OwpAQCAt
NzM2LDggKzczMSw2IEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9u
SW5mby5oICovOyB9OwogCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovOyB9
OwogCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwREFEMDMwRkIxRUIx
QTAwODJEMjA1IC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRkM5MjE0
MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxMzFCOTRFODNFMDA3MURE
NjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovOyB9OwogCQkwRkZDOTIxNjFCOTRGQjNF
MDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJv
cGVydHlUeXBlS2V5LmggKi87IH07CiAJCTBGRkM5OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25z
dGFudE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlENTE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIg
LyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwNTAsOCArMjA0Myw2IEBACiAJCTBGMDcw
QTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFyZ2VBbGxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNzBBNDYxRDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXJnZUFsbG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMy
IC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpJVENvbXBpbGF0aW9uRWZmb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjI4NjcxRUI4RTZDRDAwMEVCNUQyIC8qIEpT
TWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYwQjI4NjgxRUI4RTZDRDAwMEVCNUQyIC8qIEpTTWFya2luZ0NvbnN0
cmFpbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFya2lu
Z0NvbnN0cmFpbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEIy
ODY5MUVCOEU2Q0QwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vha1ByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjcwNiw3ICsyNjk3LDYgQEAKIAkJMEZCNDY3N0MxRkREQTZEOTAwM0ZD
QjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2NzdE
MUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
NDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdD
RGVmZXJyYWxDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVm
ZXJyYWxDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdEMUQ5
OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5p
ZmllZElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkSUQu
aDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNzQ2LDEwICsyNzM2LDYgQEAKIAkJMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VW5pZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRjE1OEExOUI3QTUzMTAwNjk1REQwIC8qIERG
R0Jsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Js
b2NrU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tTZXRJbmxpbmVz
Lmg7IHBhdGggPSBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGQkY5MkI1MUZENzZGRkMwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJy
ZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZCRjkyQjYxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkU3RydWN0dXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIElu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZCRjkyQjgxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkU3RydWN0dXJlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQu
aDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHQ29tbW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09T
UkV4aXQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjc3Miw4ICsyNzU4LDYgQEAKIAkJMEZDNzEyRTExN0NEODc4RjAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmll
clN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbmZlcnJlZFR5
cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkM4NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3MDAyQzlCMjYgLyogQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzA4OSw5ICszMDczLDYgQEAKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhE
REMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjgwQkIy
MEE3OTQ3MDAwMDZBQUY2IC8qIEpJVENvZGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVENvZGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGVUYWJsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAv
KiBJbmZlcnJlZFR5cGVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmZlcnJlZFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkZDOTIx
MzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHBhdGggPSBk
ZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BlcnR5VHlwZUtleS5oOyBwYXRoID0g
ZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NzQ3LDE1ICs2NzI4LDYgQEAKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJMTQzODZBNzYxREQ2OTg5QzAwODY1MkM0IC8qIEluZGly
ZWN0RXZhbEV4ZWN1dGFibGUuY3BwICovLAogCQkJCTE0Mzg2QTc3MURENjk4OUMwMDg2NTJDNCAv
KiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8sCi0JCQkJMEZCRjkyQjYxRkQ3NkZGQzAwQUMy
OEE4IC8qIEluZmVycmVkU3RydWN0dXJlLmNwcCAqLywKLQkJCQkwRkJGOTJCODFGRDc2RkZDMDBB
QzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCAqLywKLQkJCQkwRkJGOTJCNTFGRDc2RkZDMDBB
QzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKLQkJCQkwRkJGOTJC
NzFGRDc2RkZDMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCi0J
CQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8sCi0JCQkJ
MEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovLAotCQkJCTBGQjQ2
Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJbmZlcnJlZFR5cGVJbmxpbmVzLmggKi8sCi0JCQkJMEZG
QzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLywKLQkJCQkw
RkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJCQkw
RkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZG
OEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLywKIAkJCQkwRjRBRTA0
MjFGRTBEMjU0MDBFMjA4MzkgLyogSW5mZXJyZWRWYWx1ZUlubGluZXMuaCAqLywKQEAgLTczNzQs
NyArNzM0Niw2IEBACiAJCQkJRTNCRkE1Q0QyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRH
bG9iYWxQcm9wZXJ0eS5oICovLAogCQkJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdE
ZXNpcmVkSWRlbnRpZmllcnMuY3BwICovLAogCQkJCTBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLywKLQkJCQkwRkZDOTIxMzFCOTRFODNFMDA3MURE
NjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovLAogCQkJCUMyQzBGN0NCMTdCQkZDNUIw
MDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwICovLAogCQkJCUMyQzBGN0NDMTdC
QkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCAqLywKIAkJCQkwRkU4NTM0
OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLywKQEAgLTc0
MTksOCArNzM5MCw2IEBACiAJCQkJMEYyRkNDRjMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBo
U2FmZXBvaW50LmggKi8sCiAJCQkJMEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBM
b2NhdGlvbi5jcHAgKi8sCiAJCQkJMEZCMTc2NUQxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBM
b2NhdGlvbi5oICovLAotCQkJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5jcHAgKi8sCi0JCQkJMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0lu
ZmVycmVkVHlwZUNoZWNrLmggKi8sCiAJCQkJMEZCMTRFMjAxODEyNTcwQjAwOUI2QjREIC8qIERG
R0lubGluZUNhY2hlV3JhcHBlci5oICovLAogCQkJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAv
KiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8sCiAJCQkJQTcwNEQ5MDAxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKQEAgLTg3NjEsNyAr
ODczMCw2IEBACiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QTE3MkYwNTAxMDA3
REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkZD
OTIxNDFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI5ODFGRDkxN0JBRUU0
QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC04Nzg5LDcgKzg3NTcsNiBAQAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkExOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R0dyYXBoU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MTE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkM4NDE2OTFC
QThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVD
YWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNjE3QTBCQUE4
MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
OTA5MSwxMSArOTA1OCw2IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2
OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGQkY5MkI5MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0
dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEw
NjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZCNDY3ODUxRkRGQjQ1
NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNEFFMDQzMUZFMEQyNTcwMEUyMDgzOSAvKiBJbmZlcnJlZFZhbHVl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjM5OTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDE5LDE0ICsxMDE5LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBpZiAo
SW5mZXJyZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5p
bXBsKCkpKSB7Ci0gICAgICAgICAgICBpZiAoQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigp
LCAiXG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlw
ZS0+ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoQWNjZXNzQ2FzZUludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7Ci0K
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAgaml0
LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtMTA0OSwxNCArMTA0
MSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAg
Ly8gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwgaWYg
dGhpcyB3YXNuJ3QgdHJ1ZS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogCi0gICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBuZXdT
dHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKLSAgICAgICAgICAg
IGlmIChBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOwotICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFuY2hJ
Zk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKLQogICAgICAgICAvLyBOT1RFOiBUaGlz
IGxvZ2ljIGlzIGR1cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKCkuIEl0J3MgaW1w
b3J0YW50IHRoYXQgZG9lc0NhbGxzKCkga25vd3MKICAgICAgICAgLy8gZXhhY3RseSB3aGVuIHRo
aXMgd291bGQgbWFrZSBjYWxscy4KICAgICAgICAgYm9vbCBhbGxvY2F0aW5nID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTQ3NCwxMSArNDc0LDcgQEAg
b3AgOnB1dF9ieV9pZCwKICAgICAgICAgb2xkU3RydWN0dXJlOiBTdHJ1Y3R1cmVJRCwKICAgICAg
ICAgb2Zmc2V0OiB1bnNpZ25lZCwKICAgICAgICAgbmV3U3RydWN0dXJlOiBTdHJ1Y3R1cmVJRCwK
LSAgICAgICAgZmxhZ3M6IFB1dEJ5SWRGbGFncywKICAgICAgICAgc3RydWN0dXJlQ2hhaW46IFdy
aXRlQmFycmllckJhc2VbU3RydWN0dXJlQ2hhaW5dLAotICAgIH0sCi0gICAgbWV0YWRhdGFfaW5p
dGlhbGl6ZXJzOiB7Ci0gICAgICAgIGZsYWdzOiA6ZmxhZ3MKICAgICB9CiAKIG9wIDpwdXRfYnlf
aWRfd2l0aF90aGlzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ZpdHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRml0cy5oCShy
ZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRml0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTGFiZWwuaCIKICNp
bmNsdWRlICJPcGNvZGVTaXplLmgiCiAjaW5jbHVkZSAiUHJvZmlsZVR5cGVCeXRlY29kZUZsYWcu
aCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAj
aW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
Y3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogCi0jaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAt
MzksMTEgKzM4LDYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFB1dAog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgifCIpOwogICAgIGlmIChmbGFncyAmIFB1dEJ5SWRJc0Rp
cmVjdCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKLQotICAgIEluZmVy
cmVkVHlwZTo6S2luZCBraW5kID0gSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoZmxhZ3MpOwot
ICAgIG91dC5wcmludChjb21tYSwga2luZCk7Ci0gICAgaWYgKEluZmVycmVkVHlwZTo6aGFzU3Ry
dWN0dXJlKGtpbmQpKQotICAgICAgICBvdXQucHJpbnQoIjoiLCBiaXR3aXNlX2Nhc3Q8aW50MzJf
dD4oZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAko
cmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2MCArMzYsOCBAQCBlbnVtIFB1dEJ5SWRG
bGFncyA6IGludDMyX3QgewogICAgIC8vIGNoZWNraW5nIGlmIHRoZSBwcm90b3R5cGUgY2hhaW4g
aGFzIGEgc2V0dGVyLgogICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDB4MSwKICAgICBQdXRCeUlkUGVy
c2lzdGVudEZsYWdzTWFzayA9IDB4MSwKLQotICAgIC8vIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cg
bXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBMb3dMZXZlbEludGVycHJldGVyLmFzbS4K
LQotICAgIC8vIERldGVybWluaW5nIHRoZSByZXF1aXJlZCBpbmZlcnJlZCB0eXBlIGludm9sdmVz
IGZpcnN0IGNoZWNraW5nIHRoZSBwcmltYXJ5IHR5cGUgbWFzaywgYW5kIHRoZW4KLSAgICAvLyB1
c2luZyB0aGF0IHRvIGZpZ3VyZSBvdXQgdGhlIG1lYW5pbmcgb2YgdGhlIHNlY29uZGFyeSBtYXNr
OgotICAgIC8vIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7Ci0gICAg
Ly8gY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6Ci0gICAgLy8gICAgIHN3aXRjaCAo
ZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKLSAgICAvLyAgICAgLi4uCi0gICAg
Ly8gICAgIH0KLSAgICAvLyAgICAgYnJlYWs7Ci0gICAgLy8gY2FzZSBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlOgotICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgLy8gICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpOwotICAgIC8vICAgICBicmVhazsKLSAgICAv
LyB9Ci0gICAgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IDB4NiwKLSAgICBQdXRCeUlkUHJpbWFy
eVR5cGVTZWNvbmRhcnkgPSAweDAsIC8vIE5lZWQgdG8gY2hlY2sgdGhlIHNlY29uZGFyeSB0eXBl
IG1hc2sgZm9yIHRoZSB0eXBlLgotICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1
Y3R1cmUgPSAweDIsIC8vIFNlY29uZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCi0gICAgUHV0
QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQsIC8vIFNlY29u
ZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCi0KLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1h
c2sgPSAtMHg4LAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwLAotICAgIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4OCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU90aGVyID0gMHgxMCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOCwKLSAg
ICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciA9IDB4MjAsCi0gICAgUHV0QnlJZFNlY29uZGFy
eVR5cGVTdHJpbmcgPSAweDI4LAotICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sID0gMHgz
MCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4MzgsCi0gICAgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHg0MCwKLSAgICBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVRvcCA9IDB4NDgKIH07CiAKLWlubGluZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQo
U3RydWN0dXJlSUQgaWQpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsK
LSNlbHNlCi0gICAgUHV0QnlJZEZsYWdzIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxh
Z3M+KGlkKTsKLSAgICBBU1NFUlQoIShyZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNr
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbmRpZgotfQotCi1pbmxpbmUgU3RydWN0dXJlSUQg
ZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJZEZsYWdzIGZsYWdzKQotewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU1hc2spOwotI2VuZGlmCi19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAg
Vk0mIHZtID0gKnByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCiAgICAgYXV0byBpbnN0cnVjdGlv
biA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVk
QmxvY2spOwogCiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5vbGRTdHJ1
Y3R1cmU7CiAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKQEAgLTY2LDcgKzY3LDcgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0
cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlk
KSk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9m
ZnNldCk7CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtNzgsNyArNzksNyBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShtZXRhZGF0YS5mbGFncyAmIFB1dEJ5
SWRJc0RpcmVjdCkpIHsKKyAgICBpZiAoIShieXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVj
dCkpIHsKICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKICAgICAgICAgICAgICAgICB2
bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKQEAgLTg3
LDcgKzg4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAg
IH0KICAgICAKICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAg
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3U3RydWN0
dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogfQogCiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTE0Miw3ICsxNDMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7CiAgICAgfQpAQCAtMTY5LDcgKzE3MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0
dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xODIsOCArMTgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKICAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAg
ICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRp
b25TZXQsIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApAQCAtMzE1LDcgKzMxNSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQg
dmFyaWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsK
KyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNl
dCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0zNTAsOCArMzUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3Vs
dC5hcHBlbmRWYXJpYW50KAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9m
ZnNldCwKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9y
Rm9yKHVpZCkpKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRp
dGlvblNldCwgb2Zmc2V0KSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZp
c2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIFB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1f
bmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBtX3JlcXVpcmVkVHlwZSA9IG90
aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
Km90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTU0LDIwICs1MywxOCBAQCBQ
dXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiB9CiAKIFB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgcmVxdWlyZWRUeXBlKQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fcmVx
dWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5
SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsCi0gICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUp
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICBy
ZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTc1LDcgKzcyLDYgQEAgUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9
IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlw
ZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05MCw3ICs4Niw2
IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMp
OwotICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTE1OSw5ICsxNTQsNiBAQCBib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3Ro
ZXIubV9yZXF1aXJlZFR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBzd2l0
Y2ggKG1fa2luZCkgewogICAgIGNhc2UgTm90U2V0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzA1LDE2ICsyOTcsMTQgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCi0gICAgICAgICAg
ICBpbkNvbnRleHQocmVxdWlyZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOworICAgICAgICAgICAg
IjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJh
bnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAog
ICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQp
LCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCks
ICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4dChy
ZXF1aXJlZFR5cGUoKSwgY29udGV4dCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+
Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1MiwxMSBAQCBwdWJsaWM6CiAgICAg
UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFu
dCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwogICAgIAogICAg
IHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNl
dCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtMTA1LDExICsxMDUsNiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nh
cnkoKTsKIAotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUeXBlOwotICAgIH0KLQogICAgIGJv
b2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdl
KCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CkBAIC0xNTAsNyArMTQ1LDYg
QEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9Owog
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX3JlcXVp
cmVkVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MTgsOCArMjkxOCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVy
Z2UoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9w
ZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0dXNbaV0u
b2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAg
ICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKSA9IHJlc3VsdDsKQEAgLTMyOTIsNyArMzI5Myw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewog
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXTsKIAogICAgICAgICAvLyBGSVhNRTogVGhlIHBhcnQg
b2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVzIG9uIEFJ
IGtub3dpbmcgdGhlIHN0cnVjdHVyZQogICAgICAgICAvLyByaWdodCBub3cuIFRoYXQncyBwcm9i
YWJseSBub3Qgb3B0aW1hbC4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4gb3B0aW1p
emF0aW9uICh1c3VhbGx5CkBAIC0zMzAwLDEyICszMzAwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0
QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgaGF2ZSB0
byByZWx5IGVudGlyZWx5CiAgICAgICAgIC8vIG9uIHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJz
ZXIgd2FzIGFibGUgdG8gcHJvdmUuCiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX2dy
YXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpKTsKLQotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHR5cGUgdGhhdCBCeXRl
Q29kZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgotICAgICAgICBBYnN0cmFjdFZhbHVl
IHR5cGVGcm9tUGFyc2luZzsKLSAgICAgICAgdHlwZUZyb21QYXJzaW5nLnNldChtX2dyYXBoLCBk
YXRhLmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAg
ICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpKTsKIAogICAgICAgICAvLyBJZiB3ZSBkZWNpZGUgdGhhdCB0aGVyZSBkb2VzIG5vdCBleGlz
dCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1cm4sIHRoZW4gaXQncyBwcm9iYWJseQogICAg
ICAgICAvLyBiZWNhdXNlIHRoZSBjb21waWxhdGlvbiB3YXMgYWxyZWFkeSBpbnZhbGlkYXRlZC4K
QEAgLTMzNDQsOCArMzMzOSw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMs
IGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRp
Zmllck51bWJlcl07Ci0KICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0zMzY3LDEzICszMzYwLDYgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpM
b2FkOiB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNldCwgdWlkLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6IHsK
ICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTM0MTQsNyArMzQwMCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwotICAgICAgICAgICAgdGhpc1Zh
bHVlLmZpbHRlcihtX2dyYXBoLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAg
IHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNjIgKzEyNiw2IEBAIHZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHN3aXRjaCAoZGVzY3JpcHRv
ci5raW5kKCkpIHsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICBjbGVh
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0g
ICAgICAgIHNldE5vbkNlbGxUeXBlKFNwZWNCb29sZWFuKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY090
aGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICBzZXROb25DZWxsVHlwZShTcGVj
Qnl0ZWNvZGVOdW1iZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlN0cmluZzoKLSAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgot
ICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3ltYm9sU3RydWN0dXJlLmdldCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCaWdJbnQ6Ci0gICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5iaWdJbnRTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1lcmdlKFNwZWNP
dGhlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogot
ICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgotICAgICAgICBzZXRUeXBlKGdyYXBo
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAgIG1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFi
c3RyYWN0VmFsdWU6OnNldCgKLSAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKLXsKLSAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOwotICAgIGlmIChjbG9iYmVyU3RhdGUg
PT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
LX0KLQogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgm
IGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3VibGUpIHsKQEAgLTI1MywxNyArMTk3LDYg
QEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBv
bGRNZSAhPSAqdGhpczsKIH0KIAotYm9vbCBBYnN0cmFjdFZhbHVlOjppc1R5cGUoR3JhcGgmIGdy
YXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSkgY29uc3QK
LXsKLSAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsKLSAgICB0eXBlVmFsdWUuc2V0KGdyYXBo
LCBpbmZlcnJlZFR5cGUpOwotCi0gICAgQWJzdHJhY3RWYWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlz
OwotICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gbWVyZ2Vk
VmFsdWUgPT0gdHlwZVZhbHVlOwotfQotCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6
OmZpbHRlcigKICAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQm
IG90aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogewpAQCAtNDAyLDEzICszMzUs
NiBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJu
IENvbnRyYWRpY3Rpb247CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQotewotICAgIEFic3RyYWN0VmFsdWUgZmlsdGVyVmFsdWU7Ci0gICAgZmlsdGVyVmFsdWUu
c2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKLSAgICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsK
LX0KLQogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8g
V2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgot
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUg
IlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtMjQ5LDkgKzI0
OCw2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJik7Ci0gICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwotCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVw
cmVzZW50YXRpb24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVs
bHB0cik7CiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7
CiAgICAgCkBAIC0zMTgsOCArMzE0LDYgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAg
ICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KIAotICAgIGJvb2wgaXNU
eXBlKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJikgY29uc3Q7Ci0KICAg
ICAvLyBGaWx0ZXJzIHRoZSB2YWx1ZSB1c2luZyB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYg
dGhlIGFkbWl0dGVkVHlwZXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCwgdGhpcwogICAgIC8vIGlt
cGxpY2l0bHkgZmlsdGVycyBieSB0aGUgdHlwZXMgaW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNl
dCwgd2hpY2ggYXJlIHVzdWFsbHkgYSBzdWJzZXQgb2YKICAgICAvLyBTcGVjQ2VsbC4gSGVuY2Us
IGFmdGVyIHRoaXMgY2FsbCwgdGhlIHZhbHVlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1j
ZWxsIG1lbWJlcnMuIEJ1dCwgeW91IGNhbgpAQCAtMzU0LDggKzM0OCw2IEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFjdFZh
bHVlJik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJDbGFzc0luZm8oR3JhcGgmLCBjb25z
dCBDbGFzc0luZm8qKTsKIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7Ci0gICAgCiAgICAgQUxXQVlTX0lOTElORSBG
aWx0cmF0aW9uUmVzdWx0IGZhc3RGb3J3YXJkVG9BbmRGaWx0ZXJVbnByb3ZlbihBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoIG5ld0Vwb2NoLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAg
ICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODUsOCArMTg1LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJy
YXlDb25zdHJ1Y3RvcihWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJbnRlcm5hbEZ1bmN0aW9uKiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVk
QXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVy
bmFsRnVuY3Rpb24oTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgU3BlY3VsYXRlZFR5cGUsIGNv
bnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlP
ZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zm
c2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2Rl
KiB2YWx1ZSk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2Rl
VHlwZSA9IEdldEJ5T2Zmc2V0KTsKICAgICBib29sIGhhbmRsZURPTUpJVEdldHRlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBHZXRCeUlkVmFyaWFudCYsIE5vZGUqIHRoaXNOb2RlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAg
ICBib29sIGhhbmRsZU1vZHVsZU5hbWVzcGFjZUxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
U3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIEdldEJ5SWRTdGF0dXMpOwogCkBAIC0zNzcyLDgg
KzM3NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiB9CiAK
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKLSAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBpbmZlcnJlZFR5cGUsIE5vZGVUeXBlIG9wKQorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMzc4NCw4ICszNzgzLDYgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9m
ZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKLSAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgbV9ncmFw
aC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIGdl
dEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CiAKQEAgLTM3OTMsNyArMzc5MCw3IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKIH0KIAogTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAotICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBpbmZlcnJlZFR5cGUsCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHBy
b3BlcnR5U3RvcmFnZTsKQEAgLTM4MDUsOCArMzgwMiw2IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7
CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7Ci0gICAgZGF0YS0+aW5m
ZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5
cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1
dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwog
ICAgIApAQCAtMzk3OSw3ICszOTc0LDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAg
ICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAg
Tm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJv
dG90eXBlKCkpKTsKICAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAg
ICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQo
KSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VO
b2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKICAgICB9CiAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUg
dGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC00MTcyLDE3ICs0MTY3LDggQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNv
bnN0YW50KTsKICAgICAgICAgfQogCi0gICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBp
bmZlcnJlZFR5cGU7Ci0gICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKLSAgICAgICAg
ICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7
Ci0gICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9n
cmFwaC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAg
ICAgICAgaW5mZXJyZWRUeXBlLm1lcmdlKHRoaXNUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsK
LSAgICAgICAgCiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAg
ICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3ApOworICAgICAgICAgICAgbG9hZFByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwpAQCAtNDE5Myw3ICs0MTc5LDcgQEAgTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJU
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNr
UHJlc2VuY2VMaWtlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFy
aWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1
dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVx
dWlyZWRUeXBlKCksIHZhbHVlKTsKKyAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwg
aWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtNDQyOCw3ICs0NDE0LDYgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlk
U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKIAog
ICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1
cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBl
KHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQpAQCAtNDQ5NCw4ICs0NDc5LDYg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAg
ICAgIGRhdGEtPm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CiAgICAgICAgIGRhdGEtPmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICBkYXRhLT5pbmZlcnJlZFR5
cGUgPSB2YXJpYW50LnJlcXVpcmVkVHlwZSgpOwotICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5m
ZXJyZWRUeXBlKGRhdGEtPmluZmVycmVkVHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBOT1RF
OiBXZSBjb3VsZCBHQyBhdCB0aGlzIHBvaW50IGJlY2F1c2Ugc29tZW9uZSBjb3VsZCBpbnNlcnQg
YW4gb3BlcmF0aW9uIHRoYXQgR0NzLgogICAgICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlOgpA
QCAtNDgwNyw5ICs0NzkwLDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+b2Zmc2V0ID0ga25vd25Qb2x5UHJvdG9PZmZzZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKG1fZ3JhcGgubV92bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZSA9IElu
ZmVycmVkVHlwZTo6VG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5p
bmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVBy
b3RvT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgb2JqZWN0LCBvYmplY3QsIHdlYWtKU0NvbnN0YW50
KHByb3RvdHlwZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU1NTAsNyAr
NTUzMCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNv
ZGUucHJvcGVydHldOwotICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0OworICAgICAgICAgICAgYm9vbCBk
aXJlY3QgPSAhIShieXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw2IEBACiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJE
RkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCi0jaW5jbHVk
ZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTQ3
Nyw4ICs0NzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNzI3LDEwICs3MjUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm9mZnNldCA9IGtub3duUG9seVByb3RvT2Zmc2V0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKG1fZ3JhcGgubV92bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRU
eXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUo
aW5mZXJyZWRUeXBlKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZU5vZGUg
PSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgb3JpZ2luLCBtX2dyYXBoLmZy
ZWV6ZShwcm90b3R5cGUpKTsKQEAgLTEwNzQsNyArMTA2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCi0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKICAgICAgICAgCkBAIC0xMDkwLDcgKzEwODQsNiBAQCBwcml2YXRlOgogICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
YWRkKCk7CiAgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBkYXRhLmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICBkYXRhLmluZmVycmVkVHlw
ZSA9IGluZmVycmVkVHlwZTsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5
T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CkBAIC0xMTAx
LDggKzEwOTQsNiBAQCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNo
aWxkMSgpOwogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGluc2VydEluZmVycmVkVHlw
ZUNoZWNrKAotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2lu
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hp
bGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAyMzk5
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIFRoaXMgZG9jdW1lbnRz
IHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHks
IHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2ZQotLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBh
bmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4K
LQotY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7Ci1wdWJsaWM6Ci0gICAgRGVzaXJlZEluZmVy
cmVkVHlwZSgpCi0gICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCi0gICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQotICAgICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCi0gICAgewotICAgIH0KLQotICAg
IERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAg
ICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCi0gICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5
cGU6OlRvcCkKLSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KLQotICAgIEluZmVycmVkVHlw
ZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9Ci0KLSAg
ICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOwotICAgIH0KLQotICAgIHZvaWQgYWRkKFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hw
b2ludCh3YXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9v
YmplY3QgPT0gb3RoZXIubV9vYmplY3QKLSAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3Ro
ZXIubV9leHBlY3RlZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0g
SW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1f
b2JqZWN0KSArIG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci0g
ICAgewotICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAi
IGZvciAiLCBSYXdQb2ludGVyKG1fb2JqZWN0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwg
bnVsbHB0cik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7
Ci0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Ci19OwotCi1zdHJ1Y3Qg
RGVzaXJlZEluZmVycmVkVHlwZUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQotICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7Ci0gICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVz
aXJlZEluZmVycmVkVHlwZUhhc2ggSGFzaDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6
RGVzaXJlZEluZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRl
c2lyZWRJbmZlcnJlZFR5cGU+IHsgfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksMTEgKzY5LDYgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOgogICAgIH0KIH0KIAotdm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0
YSYgY29tbW9uKQotewotICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxv
Y2spKTsKLX0KLQogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
IERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC0xMDIs
MTEgKzk3LDYgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAg
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCi12b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkK
LXsKLSAgICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7Ci19Ci0KIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAo
IXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEyMiw3ICsxMTIsNiBAQCB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1faW5mZXJyZWRUeXBlcy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTMxLDggKzEyMCw3IEBAIGJvb2wgRGVz
aXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRz
LmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFs
aWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9p
bmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKQEAgLTE0Myw3ICsxMzEsNiBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29u
dGV4dChQCiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1
ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsK
ICAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250
ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7Ci0gICAgb3V0LnBy
aW50KCIgICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNv
bnRleHQpLCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShy
ZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCi0jaW5jbHVkZSAiREZHRGVz
aXJlZEluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmgiCkBAIC05MywxOCArOTIsNiBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvCiAgICAgfQogfTsKIAotc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgewotICAgIHN0
YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29t
bW9uRGF0YSYpOwotICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNp
cmVkSW5mZXJyZWRUeXBlJiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxs
VmFsaWQoKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250
ZXh0KQotICAgIHsKLSAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsK
LSAgICB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5h
bWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNz
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE3
MywxMCArMTYwLDYgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdo
aWNoIGRvZXMKICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90
aGVyIGJvb2trZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7Ci0KLSAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNh
bGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9l
cwotICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KLSAgICB2b2lkIGFkZExhemlseShjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1
cmUqKTsKICAgICAKQEAgLTIwNCwxMSArMTg3LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KLSAg
ICBib29sIGlzV2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOwotICAgIH0KLQog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkBAIC0yMTgsNyArMTk2
LDYgQEAgcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFs
dWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0
Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7Ci0gICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVy
cmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIzOTk2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgog
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKQEAgLTE2MzMsMTAgKzE2MzIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFn
ZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvckNoZWNrcygpOwotICAg
ICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQsIGluZGV4LCBvcmlnaW5Gb3JDaGVjayhpbmRleCksIG5vZGUtPmNoaWxkMygpLm5v
ZGUoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmluZmVycmVk
VHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMygpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNiBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRp
Zmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygpW3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZp
ZXJOdW1iZXJdLCAifSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKTsKLSAgICAgICAgb3V0LnByaW50KCIs
IGluZmVycmVkVHlwZSA9ICIsIGluQ29udGV4dChzdG9yYWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5
cGUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXRE
YXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpOwpAQCAtMTA1OSwzOCArMTA1OCw2IEBAIGJvb2wgR3JhcGg6Omlz
U2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRh
aW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCi1JbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgR3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtl
eSkKLXsKLSAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgpKTsKLSAgICAKLSAg
ICBhdXRvIGl0ZXIgPSBtX2luZmVycmVkVHlwZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyICE9
IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwotCi0g
ICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVGb3Ioa2V5LnVpZCgpKTsKLSAgICBpZiAoIXR5cGVPYmplY3QpIHsKLSAgICAgICAgbV9pbmZl
cnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKLSAgICAgICAgcmV0dXJuIElu
ZmVycmVkVHlwZTo6VG9wOwotICAgIH0KLQotICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0
eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0b3IoKTsKLSAgICBpZiAodHlwZURl
c2NyaXB0b3Iua2luZCgpID09IEluZmVycmVkVHlwZTo6VG9wKSB7Ci0gICAgICAgIG1faW5mZXJy
ZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7Ci0gICAgICAgIHJldHVybiBJbmZl
cnJlZFR5cGU6OlRvcDsKLSAgICB9Ci0gICAgCi0gICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXks
IHR5cGVEZXNjcmlwdG9yKTsKLQotICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemls
eSh0eXBlT2JqZWN0KTsKLSAgICByZWdpc3RlckluZmVycmVkVHlwZSh0eXBlRGVzY3JpcHRvcik7
Ci0KLSAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNp
cmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKLSAgICAv
LyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCi0gICAgbV9wbGFuLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlw
ZURlc2NyaXB0b3IpKTsKLQotICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKLX0KLQogRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVM
aXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJs
b2NrKTsKQEAgLTEzMjAsMjIgKzEyODcsNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFu
dFByb3BlcnR5KGNvCiB9CiAKIEFic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQ
cm9wZXJ0eSgKLSAgICBjb25zdCBSZWdpc3RlcmVkU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQotewot
ICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgIGJhc2UuZm9yRWFjaCgKLSAgICAgICAgWyZd
IChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9y
UHJvcGVydHkoc3RydWN0dXJlLmdldCgpLCB1aWQpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJn
ZSh2YWx1ZSk7Ci0gICAgICAgIH0pOwotICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJl
c0FyZUNsb2JiZXJlZCkKLSAgICAgICAgcmVzdWx0LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotQWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZv
clByb3BlcnR5KAotICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRl
IGNsb2JiZXJTdGF0ZSkKIHsKICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgewpAQCAtMTM0NCw5ICsxMjk2LDYgQEAgQWJzdHJhY3RW
YWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclBybwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIGlmIChiYXNlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgIHJl
dHVybiBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoYmFzZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlk
LCBjbG9iYmVyU3RhdGUpOwotCiAgICAgcmV0dXJuIEFic3RyYWN0VmFsdWU6OmhlYXBUb3AoKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OTcsMjYgKzc5NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gY29tcHV0ZWQgYnkgdHJh
Y2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCiAg
ICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKIAot
ICAgIHZvaWQgcmVnaXN0ZXJJbmZlcnJlZFR5cGUoY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuc3RydWN0dXJlKCkpCi0gICAgICAg
ICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0cnVjdHVyZSgpKTsKLSAgICB9Ci0KLSAgICAv
LyBUZWxscyB1cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHBy
b3BlcnR5IHRvIGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgotICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7Ci0gICAg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGluZmVycmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKLSAg
ICB9Ci0KLSAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKLSAgICAg
ICAgY29uc3QgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJlc0FyZVdhdGNoZWQpOwotCiAg
ICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0eSBpbmZlcmVuY2Ugb3IgcHJv
cGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBhYnN0cmFjdAogICAgIC8vIHZh
bHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhlIGdpdmVuIGFic3RyYWN0IHZh
bHVlIGJhc2UuCiAgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCi0g
ICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgICAgICBjb25zdCBB
YnN0cmFjdFZhbHVlJiBiYXNlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRl
KTsKICAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2Nr
Kik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFt
ZSopOwpAQCAtMTA2NSw3ICsxMDQ5LDYgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2ls
bHM+PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQ
cm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKLSAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtl
eSwgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgVmVjdG9y
PFJlZjxTbmlwcGV0Pj4gbV9kb21KSVRTbmlwcGV0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1BT
RG9taW5hdG9ycz4gbV9jcHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FEb21p
bmF0b3JzPiBtX3NzYURvbWluYXRvcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdJbmZlcnJl
ZFR5cGVDaGVjay5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBpbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjaygKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCi0gICAgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotewotICAgIGluc2VydGlvblNldC5n
cmFwaCgpLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGUpOwotICAgIAotICAgIHN3aXRjaCAodHlw
ZS5raW5kKCkpIHsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgotICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9y
aWdpbik7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFu
OgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBD
aGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBCb29sZWFuVXNlKSk7Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNl
Tm9kZSwgT3RoZXJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5
cGU6OkludDMyOgotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBJbnQzMlVzZSkpOwotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgotICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBF
ZGdlKGJhc2VOb2RlLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlN0cmluZzoKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9k
ZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgU3RyaW5nVXNl
KSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTeW1ib2w6Ci0g
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNr
LCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIFN5bWJvbFVzZSkpOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBCaWdJbnRVc2UpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwK
LSAgICAgICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQo
dHlwZS5zdHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkp
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKLSAgICAg
ICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2Up
KTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ss
IG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgotICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJh
c2VOb2RlLCBPYmplY3RPck90aGVyVXNlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERkdfQ1JB
U0goaW5zZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsK
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVk
VHlwZUNoZWNrLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
Ci0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotLy8gSW5zZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5v
ZGUgaGFzIHRoZSBnaXZlbiBpbmZlcnJlZCB0eXBlLgotdm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVD
aGVjaygKLSAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4s
IE5vZGUqIGJhc2VOb2RlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEx
ICs4MSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cjsKLQotICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1
dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgotICAgIC8v
IHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcwotICAgIC8vIGd1YXJhbnRl
ZWQuCi0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0
cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTQsMTQg
KzIyOTQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMg
cG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRo
ZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3Ry
dWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlh
bnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRP
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNl
dC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRv
cCkpOworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVy
biBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0MSwzMSArNTQx
LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZGF0
YS5vZmZzZXQ7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBncmFwaC5pZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl07Ci0KLSAgICAgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0g
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6Ci0gICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBkYXRhLmluZmVycmVkVHlwZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAg
Ly8gUHV0QnlPZmZzZXQga25vd3MgYWJvdXQgaW5mZXJyZWQgdHlwZXMgYmVjYXVzZSBpdCdzIHRo
ZSBlbmZvcmNlciBvZiB0aGF0IHR5cGUgcmF0aGVyCi0gICAgICAgICAgICAvLyB0aGFuIHRoZSBj
b25zdW1lciBvZiB0aGF0IHR5cGUuIFRoZXJlZm9yZSwgUHV0QnlPZmZzZXQgZXhwZWN0cyBUT1Ag
Zm9yIHRoZSBwdXJwb3NlIG9mCi0gICAgICAgICAgICAvLyBzYWZlLXRvLWV4ZWN1dGUgaW4gdGhl
IHNlbnNlIHRoYXQgaXQgd2lsbCBiZSBoYXBweSB3aXRoIGFueXRoaW5nIGFzIGdlbmVyYWwgYXMg
VE9QCi0gICAgICAgICAgICAvLyAoc28gYW55IHR5cGUpLgotICAgICAgICAgICAgaW5mZXJyZWRU
eXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChncmFwaCwgbm9kZSwgIkJhZCBvcGNvZGUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gR3JhcGg6OmlzU2Fm
ZVRvTG9hZCgpIGlzIGFsbCBhYm91dCBwcm9vZnMgZGVyaXZlZCBmcm9tIFByb3BlcnR5Q29uZGl0
aW9ucy4gVGhvc2UgZG9uJ3QKICAgICAgICAgLy8ga25vdyBhbnl0aGluZyBhYm91dCBpbmZlcnJl
ZCB0eXBlcy4gQnV0IGlmIHdlIGhhdmUgYSBwcm9vZiBkZXJpdmVkIGZyb20gd2F0Y2hpbmcgYQog
ICAgICAgICAvLyBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSB0eXBlIHByb29mLCB0aGVuIHRoZSBuZXh0
IGNhc2UgYmVsb3cgd2lsbCBkZWFsIHdpdGggaXQuCi0gICAgICAgIGlmIChzdGF0ZS5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZAotICAgICAgICAgICAgJiYg
aW5mZXJyZWRUeXBlLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBpZiAo
c3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQpIHsK
ICAgICAgICAgICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gbm9kZS0+Y2hpbGQxKCktPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPihncmFwaC5tX3ZtKSkgewogICAgICAgICAgICAg
ICAgIGlmIChncmFwaC5pc1NhZmVUb0xvYWQoa25vd25CYXNlLCBvZmZzZXQpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3OSwxMiArNTU4LDYgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAgICAgU3RydWN0dXJlKiB0aGlz
U3RydWN0dXJlID0gdmFsdWVbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXRoaXNTdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoaW5mZXJyZWRUeXBlLmtpbmQoKSAhPSBJbmZlcnJlZFR5cGU6OlRv
cCkgewotICAgICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzSW5mZXJy
ZWRUeXBlID0KLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguaW5mZXJyZWRUeXBlRm9yUHJvcGVy
dHkodGhpc1N0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVHlw
ZS5zdWJzdW1lcyh0aGlzSW5mZXJyZWRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyMCw4ICs2OTIwLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07CiAKLSAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9k
ZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKLSAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCkBAIC0xMTUzMCwxNDggKzExNTI4LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgcmVzdWx0cyk7CiAg
ICAgfQogCi0gICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1
ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyBjYW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2Ug
aXQgaXMgY2FsbGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gbWF5IGJlIGxvd2VyZWQgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBzd2l0Y2gg
KG9iamVjdC0+c3RydWN0dXJlKSB7Ci0gICAgICAgIC8vICAgICBjYXNlIDQyOgotICAgICAgICAv
LyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOwotICAgICAgICAvLyAgICAg
ICAgIC4uLgotICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyAgICAgY2FzZSA0
MzoKLSAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKLSAg
ICAgICAgLy8gICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAg
Ly8gICAgIH0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFy
ZSBkaWZmZXJlbnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3
b3VsZCBiZQotICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9m
IHR5cGUxIHwgdHlwZTIuCi0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xl
YW5UcnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2Up
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90
aGVyOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3ROdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTeW1ib2wodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50
OgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RCaWdJbnQodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZTogewot
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHR5cGUuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdl
KS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSkpIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2Vs
bENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2Vs
bENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAgICAgICAgICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpIHsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAot
ICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3Bl
Y0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3Q6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAg
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5z
dXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsK
LQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RD
ZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAg
ICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0Nl
bGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLSAgICB9Ci0gICAgCiAgICAgTFZhbHVl
IGxvYWRQcm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ2
NChhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCShyZXZpc2lvbiAyMzk5
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDYgKzEyMyw4IEBAIG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeUlkTWV0
YWRhdGEuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgor
I2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNp
bmNsdWRlICJUb1RoaXNTdGF0dXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAK
ICNpbmNsdWRlICJIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJIZWFwVmVyaWZpZXIuaCIKICNp
bmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIklzb0NlbGxTZXRJbmxpbmVzLmgiCkBAIC01ODYsNyArNTg1
LDYgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaQogCiB2b2lkIEhl
YXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIGZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SW5mZXJyZWRUeXBlPih2bSgpLT5pbmZlcnJlZFR5
cGVzV2l0aEZpbmFsaXplcnMpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFs
aXplcnM8SW5mZXJyZWRWYWx1ZT4odm0oKS0+aW5mZXJyZWRWYWx1ZXNXaXRoRmluYWxpemVycyk7
CiAgICAgdm0oKS0+Zm9yRWFjaENvZGVCbG9ja1NwYWNlKAogICAgICAgICBbJl0gKGF1dG8mIHNw
YWNlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDg4ICs1MCw2IEBAIEV4ZWN1
dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEKICAgICByZXR1cm4gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsK
IH0KIAotQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElm
Tm90VHlwZSgKLSAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUp
Ci17Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7Ci0KLSAgICBzd2l0Y2gg
KGRlc2NyaXB0b3Iua2luZCgpKSB7Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90
Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok90aGVyOgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIo
cmVncywgdGVtcEdQUikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpJbnQzMjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MsIG1v
ZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgot
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIsIG1v
ZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgot
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTeW1ib2wocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6QmlnSW50OgotICAgICAgICByZXN1
bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoYnJhbmNoSWZOb3RCaWdJbnQocmVncy5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAg
ICAgIE5vdEVxdWFsLAotICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCks
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewotICAgICAgICBKdW1wIG9rID0gYnJhbmNo
SWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwocmVncywgbW9kZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAg
YnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIE5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBv
ay5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0OgotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
LCBtb2RlKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5w
YXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0T3JPdGhlcjogewotICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0
ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9k
ZSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9h
ZEdQUigpKSk7Ci0gICAgICAgIG9rLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaElmRmFzdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpCiB7CiAgICAgcmV0
dXJuIGJyYW5jaDMyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDEwICsxMDUyLDYgQEAg
cHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgSnVtcExpc3QgYnJhbmNoSWZOb3RUeXBlKAot
ICAgICAgICBKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYsCi0gICAgICAgIFRhZ1JlZ2lzdGVyc01vZGUgPSBIYXZlVGFnUmVnaXN0ZXJz
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2MSwxMCArNjYxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFy
ZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CiAgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFs
dWUub2Zmc2V0KCk7Ci0gICAgaW50IGRpcmVjdCA9IG1ldGFkYXRhLmZsYWdzICYgUHV0QnlJZElz
RGlyZWN0OworICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUuZmxhZ3MgJiBQdXRCeUlkSXNE
aXJlY3QpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCBy
ZWdUMywgcmVnVDIpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NTksMTAgKzY1OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwog
ICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICB1bnNpZ25l
ZCBkaXJlY3QgPSBtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKKyAgICBib29sIGRp
cmVjdCA9ICEhKGJ5dGVjb2RlLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzAsOCArNDcwLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQAog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiUHV0
QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTaGFk
b3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIzOTk2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0Niw3ICs4NDYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X2J5X2lkCiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQo
KSk7Ci0gICAgaWYgKG1ldGFkYXRhLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0KQorICAgIGlmIChi
eXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKICAgICAgICAgQ29tbW9uU2xvd1BhdGhz
OjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50
LCBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIGVsc2UK
ICAgICAgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgTExJTlRfT1BfQyhieXRl
Y29kZS52YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKQEAgLTg3Niw3ICs4NzYsNiBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgIG1ldGFkYXRhLm9mZnNl
dCA9IDA7CiAgICAgICAgIG1ldGFkYXRhLm5ld1N0cnVjdHVyZSA9IDA7CiAgICAgICAgIG1ldGFk
YXRhLnN0cnVjdHVyZUNoYWluLmNsZWFyKCk7Ci0gICAgICAgIG1ldGFkYXRhLmZsYWdzID0gc3Rh
dGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRQZXJzaXN0ZW50
RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSh2bSk7CkBAIC05MDAsMjMgKzg5OSwxNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+aWQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5uZXdTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJ
c0RpcmVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGJ5dGVjb2RlLmZsYWdz
ICYgUHV0QnlJZElzRGlyZWN0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYywgYXNPYmpl
Y3QoYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2hhaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnN0cnVjdHVyZUNoYWluLnNl
dCh2bSwgY29kZUJsb2NrLCBjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgfAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcihpZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZS0+aWQoKTsKICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZsYWdzID0gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPigKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgfAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoaWRl
bnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTE0MDgsODMgKzE0MDgsNiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9i
eV9pZCwgT3BQdXRCCiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQogICAgICMgV2Ugd2lsbCBsb3Nl
IGN1cnJlbnRTdHJ1Y3R1cmVJRCBpbiB0aGUgc2hlbmFuaWdhbnMgYmVsb3cuCiAKLSAgICBnZXQo
dmFsdWUsIHQxKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykK
LSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpmbGFnc1t0NV0sIHQxCi0KLSAgICAjIEF0
IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0MCAtPiBvYmplY3QgYmFzZQotICAgICMgdDEg
LT4gcHV0IGJ5IGlkIGZsYWdzCi0gICAgIyB0MiAtPiB2YWx1ZSB0YWcKLSAgICAjIHQzIC0+IHZh
bHVlIHBheWxvYWQKLQotICAgIGJ0aW56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQ
dXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIKLQotICAgICMgV2UgaGF2
ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9u
ZS4KLSAgICBhbmRpIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEKLSAgICBiaWx0IHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3Ry
aW5nCi0KLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBTeW1ib2ws
IE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCi0gICAgYmlsdCB0MSwgUHV0QnlJZFNlY29uZGFy
eVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90
aGVyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCi0gICAgYmll
cSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBl
cwotCi0gICAgIyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KLSAgICBiaWVxIHQyLCBD
ZWxsVGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0ub3BQdXRCeUlkVHlwZUNoZWNrT3Ro
ZXI6Ci0gICAgYmllcSB0MiwgTnVsbFRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0g
ICAgYmllcSB0MiwgVW5kZWZpbmVkVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAg
ICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0
T3JPdGhlcjoKLSAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nLCBTeW1ib2wgb3IgT2JqZWN0Lgot
ICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkU2xvdwotICAgIGJpZXEgdDEsIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0gICAgYmll
cSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tTeW1i
b2wKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0QnlJZERv
bmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0ub3BQdXRCeUlkVHlwZUNo
ZWNrT2JqZWN0OgotICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9w
UHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0ub3BQdXRC
eUlkVHlwZUNoZWNrU3ltYm9sOgotICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTeW1ib2xU
eXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
LQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nOgotICAgICMgV2UgYXJlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyLgot
ICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tMZXNzVGhhbkludDMyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgot
ICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrTnVtYmVyCi0KLSAgICBiaWVxIHQyLCBJbnQzMlRhZywgLm9wUHV0QnlJZERvbmVDaGVja2lu
Z1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1i
ZXI6Ci0gICAgYmliIHQyLCBMb3dlc3RUYWcgKyAxLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
SW50MzI6Ci0gICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVh
biwgT3RoZXIKLSAgICBiaW5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgotICAgIGJpZXEgdDIsIEJvb2xlYW5UYWcsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKLSAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKLSAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKLQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgot
ICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0
dXJlCi0gICAgYnRpbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKLSAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
LQotLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgYW5kaSBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCi0gICAgYmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1
cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoK
ICAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpuZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAg
ICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZp
c2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTM0NCw5MiArMTM0NCwxMSBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCCiAgICAgYmluZXEgdDIsIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRoaXMgcG9p
bnQsIHdlIGhhdmU6Ci0gICAgIyB0NSAtPiBtZXRhZGF0YQotICAgICMgdDIgLT4gY3VycmVudCBz
dHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNlCi0KLSAgICBnZXQodmFsdWUsIHQx
KQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQzKQotCi0gICAgbG9hZGkg
T3BQdXRCeUlkOjpNZXRhZGF0YTo6ZmxhZ3NbdDVdLCB0MQotCi0gICAgIyBBdCB0aGlzIHBvaW50
LCB3ZSBoYXZlOgotICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKLSAgICAjIHQxIC0+IHB1dCBieSBp
ZCBmbGFncwogICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKLSAgICAjIHQzIC0+IHZh
bHVlIHRvIHB1dAogICAgICMgdDUgLT4gbWV0YWRhdGEKIAotICAgIGJ0cG56IHQxLCBQdXRCeUlk
UHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXIKLQotICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVj
a3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KLSAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFz
aywgdDEKLSAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJ
ZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCi0KLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxv
d2luZzogU3RyaW5nLCBTeW1ib2wsIE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCi0gICAgYnBs
dCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JP
dGhlciBvciBUb3AuCi0gICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1
dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotCi0gICAgIyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JP
dGhlci4KLSAgICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Ci0u
b3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6Ci0gICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0Mwot
ICAgIGJxZXEgdDMsIFZhbHVlTnVsbCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAg
am1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9y
T3RoZXI6Ci0gICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZywgU3ltYm9sIG9yIE9iamVjdC4KLSAg
ICBidHFueiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFNsb3cKLSAgICBicGVxIHQxLCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAotICAgIGJwZXEg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sLCAub3BQdXRCeUlkVHlwZUNoZWNrU3ltYm9s
Ci0gICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25l
Q2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9wUHV0QnlJZFR5cGVDaGVj
a09iamVjdDoKLSAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1
dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotLm9wUHV0QnlJ
ZFR5cGVDaGVja1N5bWJvbDoKLSAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3ltYm9sVHlw
ZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0K
LS5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKLSAgICAjIFdlIGFyZSBvbmUgb2Yg
dGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlcgotICAg
IGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tM
ZXNzVGhhbkludDMyCi0KLSAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgotICAg
IGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNr
TnVtYmVyCi0KLSAgICBicWFlcSB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzCi0gICAgam1wIC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tO
dW1iZXI6Ci0gICAgYnRxbnogdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcwotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrTGVz
c1RoYW5JbnQzMjoKLSAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBC
b29sZWFuLCBPdGhlci4KLSAgICBicG5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFu
LCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgotICAgIHhvcnEgVmFsdWVGYWxzZSwg
dDMKLSAgICBidHF6IHQzLCB+MSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCi0gICAgam1w
IC5vcFB1dEJ5SWRTbG93Ci0KLS5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyOgotICAg
IGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tP
dGhlcgotICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5
cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKLSAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgot
ICAgIGptcCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0
cnVjdHVyZToKLSAgICB1cnNoaWZ0cCAzLCB0MQotICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3Ry
dWN0dXJlSURbdDNdLCAub3BQdXRCeUlkU2xvdwotCi0ub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXM6CiAgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0dXJlW3Q1XSwgdDEK
LSAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgogCiAgICAgIyBUaGlz
IGlzIHRoZSB0cmFuc2l0aW9uIGNhc2UuIHQxIGhvbGRzIHRoZSBuZXcgc3RydWN0dXJlSUQuIHQy
IGhvbGRzIHRoZSBvbGQgc3RydWN0dXJlIElELgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjM5OTY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjMgKzIwNCw2IEBAIGVsc2UKICAgICBjb25zdCBMb3dl
c3RUYWcgPSBjb25zdGV4cHIgSlNWYWx1ZTo6TG93ZXN0VGFnCiBlbmQKIAotIyBQdXRCeUlkRmxh
Z3MgZGF0YQotY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IGNvbnN0ZXhwciBQdXRCeUlk
UHJpbWFyeVR5cGVNYXNrCi1jb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgPSBjb25z
dGV4cHIgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5Ci1jb25zdCBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gY29uc3RleHByIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVj
dFdpdGhTdHJ1Y3R1cmUKLWNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyID0gY29uc3RleHByIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sgPSBjb25zdGV4cHIgUHV0
QnlJZFNlY29uZGFyeVR5cGVNYXNrCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9
IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbQotY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVCb29sZWFuID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbgot
Y29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gY29uc3RleHBy
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVt
YmVyID0gY29uc3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyCi1jb25zdCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZVN0cmluZyA9IGNvbnN0ZXhwciBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmlu
ZwotY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVTeW1ib2wgPSBjb25zdGV4cHIgUHV0QnlJZFNl
Y29uZGFyeVR5cGVTeW1ib2wKLWNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gY29u
c3RleHByIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0Ci1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdE9yT3RoZXIgPSBjb25zdGV4cHIgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RP
ck90aGVyCi1jb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IGNvbnN0ZXhwciBQdXRCeUlk
U2Vjb25kYXJ5VHlwZVRvcAotCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IGNvbnN0ZXhwciBvcF9j
YWxsX2xlbmd0aAogCiBjb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IGNvbnN0
ZXhwciBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1
cmUuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEluZmVycmVkU3RydWN0dXJlKTsKLQotSW5mZXJyZWRTdHJ1
Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogcGFyZW50KHBhcmVudCkKLSAgICAsIHN0cnVjdHVy
ZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCi17Ci0gICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludCgmd2F0Y2hwb2ludCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1
cmUuaAkocmV2aXNpb24gMjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRTdHJ1Y3R1cmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBJbmZlcnJlZFR5cGU7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci0KLWNsYXNzIEluZmVy
cmVkU3RydWN0dXJlIGZpbmFsIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEluZmVycmVk
U3RydWN0dXJlKTsKLXB1YmxpYzoKLSAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVk
VHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKLQotICAgIEluZmVycmVkVHlwZSogcGFyZW50Owot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAKLSAgICBJbmZlcnJl
ZFN0cnVjdHVyZVdhdGNocG9pbnQgd2F0Y2hwb2ludDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLQotI2luY2x1ZGUgIkluZmVycmVkVHlw
ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwmKQotewotICAgIEluZmVy
cmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9Ci0gICAgICAgIGJpdHdpc2VfY2FzdDxJ
bmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgd2F0Y2hwb2ludCkpOwotCi0g
ICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFN0cnVjdHVyZS0+cGFyZW50
OwotICAgIAotICAgIGlmICghaW5mZXJyZWRUeXBlLT5pc0xpdmUoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGluZmVycmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJlKHZtKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAy
Mzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbmZlcnJlZFN0
cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Ci1wcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBmaXJlSW50ZXJuYWwoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShub25leGlzdGVudCkKQEAgLTEs
NTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCi0K
LSNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEluZmVycmVkVHlwZUZpcmVEZXRhaWwgOiBwdWJs
aWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCgKLSAg
ICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
Ci0gICAgICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvciwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBuZXdEZXNjcmlwdG9yLAotICAgICAgICBK
U1ZhbHVlIG9mZmVuZGluZ1ZhbHVlKQotICAgICAgICA6IG1faW5mZXJyZWRUeXBlKGluZmVycmVk
VHlwZSkKLSAgICAgICAgLCBtX3VpZCh1aWQpCi0gICAgICAgICwgbV9vbGREZXNjcmlwdG9yKG9s
ZERlc2NyaXB0b3IpCi0gICAgICAgICwgbV9uZXdEZXNjcmlwdG9yKG5ld0Rlc2NyaXB0b3IpCi0g
ICAgICAgICwgbV9vZmZlbmRpbmdWYWx1ZShvZmZlbmRpbmdWYWx1ZSkKLSAgICB7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiSW5mZXJyZWQgdHlw
ZSBjaGFuZ2VkIG9uICIsIFJhd1BvaW50ZXIobV9pbmZlcnJlZFR5cGUpLCAiIGZvciBwcm9wZXJ0
eSAiLCBtX3VpZCwgIjogIgotICAgICAgICAgICAgIm9sZCB0eXBlIHdhcyAiLCBtX29sZERlc2Ny
aXB0b3IsICIgd2hpbGUgZGVzaXJlZCB0eXBlIGlzICIsIG1fbmV3RGVzY3JpcHRvcik7Ci0gICAg
ICAgIGlmIChtX29mZmVuZGluZ1ZhbHVlKQotICAgICAgICAgICAgb3V0LnByaW50KCIgZHVlIHRv
ICIsIG1fb2ZmZW5kaW5nVmFsdWUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJbmZlcnJlZFR5
cGUqIG1faW5mZXJyZWRUeXBlOwotICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV91aWQ7
Ci0gICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fb2xkRGVzY3JpcHRvcjsKLSAgICBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9uZXdEZXNjcmlwdG9yOwotICAgIEpTVmFsdWUgbV9vZmZl
bmRpbmdWYWx1ZTsKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNfaW5mbyA9
IHsgIkluZmVycmVkVHlwZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OwotCi1JbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6
Y3JlYXRlKFZNJiB2bSkKLXsKLSAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7
Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7
Ci0gICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKLX0KLQot
U3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2Vs
bCk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBpZiAoaW5m
ZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKLSAgICAgICAgdmlzaXRvci52bSgpLmluZmVycmVkVHlw
ZXNXaXRoRmluYWxpemVycy5hZGQoaW5mZXJyZWRUeXBlKTsKLX0KLQotSW5mZXJyZWRUeXBlOjpL
aW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyBmbGFncykKLXsKLSAg
ICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgewotICAgIGNhc2UgUHV0
QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgotICAgICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b3R0b206Ci0gICAgICAgICAgICByZXR1cm4gQm90dG9tOwotICAgICAgICBjYXNlIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlQm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiBCb29sZWFuOwotICAgICAg
ICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gT3Ro
ZXI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMjoKLSAgICAgICAgICAg
IHJldHVybiBJbnQzMjsKLSAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlcjoK
LSAgICAgICAgICAgIHJldHVybiBOdW1iZXI7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFy
eVR5cGVTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOwotICAgICAgICBjYXNlIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlU3ltYm9sOgotICAgICAgICAgICAgcmV0dXJuIFN5bWJvbDsKLSAg
ICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKLSAgICAgICAgICAgIHJldHVy
biBPYmplY3Q7Ci0gICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
OgotICAgICAgICAgICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7Ci0gICAgICAgIGNhc2UgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVUb3A6Ci0gICAgICAgICAgICByZXR1cm4gVG9wOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBCb3R0b207Ci0gICAgICAgIH0KLSAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlw
ZU9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJl
OwotICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
Ci0gICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
Qm90dG9tOwotICAgIH0KLX0KLQotSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBCb29sZWFuOwotICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gT3RoZXI7Ci0gICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEludDMyOwotICAgIGlmICh2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICByZXR1cm4gTnVtYmVyOwotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgaWYgKGNlbGwtPmlz
U3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOwotICAgICAgICBpZiAoY2VsbC0+
aXNTeW1ib2woKSkKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2w7Ci0gICAgICAgIGlmIChjZWxs
LT5pc0JpZ0ludCgpKQotICAgICAgICAgICAgcmV0dXJuIEJpZ0ludDsKLSAgICAgICAgaWYgKGNl
bGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gT2JqZWN0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBU
b3A7Ci19Ci0KLUluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQotewotICAgIEtpbmQga2lu
ZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAg
aWYgKGhhc1N0cnVjdHVyZShraW5kKSkKLSAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7Ci0gICAgZWxzZQot
ICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQs
IHN0cnVjdHVyZSk7Ci19Ci0KLVB1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OnB1dEJ5SWRGbGFncygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNl
IEJvdHRvbToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJ
ZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20pOwotICAg
IGNhc2UgQm9vbGVhbjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFu
KTsKLSAgICBjYXNlIE90aGVyOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZs
YWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90
aGVyKTsKLSAgICBjYXNlIEludDMyOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJ
ZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZUludDMyKTsKLSAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1
dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFy
eVR5cGVOdW1iZXIpOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZVN0cmluZyk7Ci0gICAgY2FzZSBTeW1ib2w6Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlU3ltYm9sKTsKLSAgICBjYXNlIE9iamVjdDoKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QpOwotICAgIGNhc2UgQmlnSW50OgotICAgIGNhc2Ug
T2JqZWN0T3JPdGhlcjoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RP
ck90aGVyKTsKLSAgICBjYXNlIFRvcDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5
SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5
cGVUb3ApOwotICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkp
KTsKLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKLSAgICAgICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlw
ZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1
cmUtPmlkKCkpKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gUHV0QnlJZE5vbmU7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKLXsKLSAgICAvLyBGaWx0ZXIgb3V0IGNv
bW1vbiB0aGluZ3MgdG8gc2ltcGxpZnkgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVsb3cuCi0gICAg
aWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG90aGVyLm1fa2lu
ZCA9PSBCb3R0b20pCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0g
ICAgY2FzZSBCb3R0b206Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEJvb2xlYW46Ci0gICAgY2FzZSBTdHJpbmc6Ci0gICAgY2FzZSBTeW1ib2w6Ci0g
ICAgY2FzZSBCaWdJbnQ6Ci0gICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBPdGhlcjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOgotICAgICAgICAgICAgKnRoaXMgPSBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyLCBvdGhlci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGNhc2UgT2JqZWN0OgotICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIGNhc2UgSW50MzI6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7Ci0gICAgICAgIGNhc2UgTnVtYmVyOgotICAgICAgICAgICAgKnRoaXMgPSBOdW1iZXI7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9
IFRvcDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgTnVtYmVyOgot
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIEludDMyOgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBU
b3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZTogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3ZSBrbm93
IHRoYXQgdGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgotICAgICAgICBjYXNlIE9iamVjdDoK
LSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAgICAgICAgICAgaWYgKG1fc3Ry
dWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBv
dGhlcjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBPdGhlcjoKLSAgICAgICAgICAgIG1fa2lu
ZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1
Y3R1cmU6Ci0gICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90
aGVyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE9iamVjdDoKLSAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwg
dGhlbiB3ZSBrbm93IHRoYXQgdGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgotICAgICAgICBj
YXNlIE9iamVjdE9yT3RoZXI6Ci0gICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqdGhpcyA9IFRvcDsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgT2JqZWN0OgotICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
Ci0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKLSAgICAgICAgY2FzZSBPdGhlcjoKLSAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0aGlzID0gVG9wOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgY2FzZSBPYmplY3RPck90aGVyOgotICAgICAgICBzd2l0Y2ggKG90
aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgIGNhc2UgT2JqZWN0Ogot
ICAgICAgICBjYXNlIE90aGVyOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgKnRoaXMgPSBUb3A7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICBjYXNlIFRvcDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjpyZW1vdmVTdHJ1Y3R1cmUoKQotewotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICAqdGhpcyA9IE9iamVjdDsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Ci0gICAgICAgICp0aGlz
ID0gT2JqZWN0T3JPdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJz
dW1lcyhjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBEZXNjcmlwdG9yIG1l
cmdlZCA9ICp0aGlzOwotICAgIG1lcmdlZC5tZXJnZShvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlz
ID09IG1lcmdlZDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgb3V0LnByaW50KG1fa2luZCk7Ci0gICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICBvdXQu
cHJpbnQoIjoiLCBpbkNvbnRleHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Ci19Ci0KLXZvaWQg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17
Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi1JbmZlcnJlZFR5cGU6Oklu
ZmVycmVkVHlwZShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1
cmUuZ2V0KCkpCi0gICAgLCBtX3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotewotfQot
Ci1JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKQotewotfQotCi1ib29sIEluZmVycmVkVHlw
ZTo6Y2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2Ny
aXB0b3ImIGV4cGVjdGVkKQotewotICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9
PSBleHBlY3RlZDsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IERlc2Ny
aXB0b3ImIGV4cGVjdGVkKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICByZXR1cm4gY2FuV2F0Y2gobG9ja2VyLCBleHBlY3RlZCk7Ci19Ci0KLXZvaWQgSW5m
ZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0
b3IobG9ja2VyKS5raW5kKCkgIT0gVG9wKTsKLQotICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0
Y2hwb2ludCk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKLX0KLQotdm9pZCBJbmZl
cnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
UmF3UG9pbnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOwotfQotCi1ib29sIEluZmVycmVk
VHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBEZXNjcmlwdG9yIG9sZFR5cGU7Ci0gICAgRGVzY3Jp
cHRvciBteVR5cGU7Ci0gICAgYm9vbCByZXN1bHQ7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxv
Y2tlcik7Ci0gICAgICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKLQot
ICAgICAgICBteVR5cGUubWVyZ2Uob2xkVHlwZSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
b2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdy
ZSBvbiB0aGUgc2xvdyBwYXRoLgotCi0gICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGxvY2tl
ciwgdm0sIG15VHlwZSk7Ci0gICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBUb3A7Ci0g
ICAgICAgIGlmICghc2V0UmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgCi0gICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwodGhpcywgcHJvcGVydHlO
YW1lLnVpZCgpLCBvbGRUeXBlLCBteVR5cGUsIHZhbHVlKTsKLSAgICBtX3dhdGNocG9pbnRTZXQu
ZmlyZUFsbCh2bSwgZGV0YWlsKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEluZmVy
cmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQot
ewotICAgIERlc2NyaXB0b3Igb2xkVHlwZTsKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgb2xkVHlwZSA9IGRlc2NyaXB0b3IobG9ja2Vy
KTsKLSAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgVG9wKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGVGaXJlRGV0YWlsIGRldGFpbCh0aGlzLCBwcm9w
ZXJ0eU5hbWUudWlkKCksIG9sZFR5cGUsIFRvcCwgSlNWYWx1ZSgpKTsKLSAgICBtX3dhdGNocG9p
bnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKLX0KLQotYm9vbCBJbmZlcnJlZFR5cGU6OnNldChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rl
c2NyaXB0b3IpCi17Ci0gICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5IGNo
YW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCi0gICAg
aWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBib29sIHNob3VsZEZpcmVXYXRjaHBvaW50U2V0ID0gZmFsc2U7Ci0gICAg
Ci0gICAgLy8gVGhlIG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhl
IHByZXZpb3VzIG9uZS4KLSAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlw
dG9yKGxvY2tlcikpKTsKLQotICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZm
ZXJlbnQgc3RydWN0dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxs
LgotICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0
dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotCi0gICAgLy8gV2UgYXJlIGNo
YW5naW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5n
LCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0IG5vdy4gSWYKLSAgICAvLyBhbnlvbmUgaXMgd2F0Y2hp
bmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNv
cnQgb2YgdGhpbmcgYWdhaW4uCi0gICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENs
ZWFyV2F0Y2hwb2ludCkgewotICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRh
dGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCi0gICAg
ICAgIEFTU0VSVChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKLQot
ICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1c2Ugc29t
ZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCi0gICAgICAg
IC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBj
cmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgotICAgICAgICAvLyBp
dC4KLSAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKLQotICAgICAgICBzaG91bGRGaXJlV2F0
Y2hwb2ludFNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKQotICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1
Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICB9Ci0KLSAg
ICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KLSAgICBtX2tpbmQgPSBuZXdE
ZXNjcmlwdG9yLmtpbmQoKTsKLQotICAgIC8vIEFzc2VydCB0aGF0IHdlIGRpZCB0aGluZ3MuCi0g
ICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKTsKLQotICAgIHJl
dHVybiBzaG91bGRGaXJlV2F0Y2hwb2ludFNldDsKLX0KLQotdm9pZCBJbmZlcnJlZFR5cGU6OnJl
bW92ZVN0cnVjdHVyZShWTSYgdm0pCi17Ci0gICAgLy8gRklYTUU6IEZpbmQgYW4gZWxlZ2FudCBh
bmQgY2hlYXAgd2F5IHRvIHRocmVhZCBpbmZvcm1hdGlvbiBhYm91dCB3aHkgd2UgZ290IGhlcmUg
aW50byB0aGUgZmlyZQotICAgIC8vIGRldGFpbCBpbiBzZXQoKS4KLSAgICAKLSAgICBEZXNjcmlw
dG9yIG9sZERlc2NyaXB0b3I7Ci0gICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yOwotICAgIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBvbGRE
ZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBuZXdEZXNjcmlwdG9yID0g
b2xkRGVzY3JpcHRvcjsKLSAgICAgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEluZmVycmVkVHlwZUZpcmVEZXRhaWwg
ZGV0YWlsKHRoaXMsIG51bGxwdHIsIG9sZERlc2NyaXB0b3IsIG5ld0Rlc2NyaXB0b3IsIEpTVmFs
dWUoKSk7Ci0gICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpT
QzsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6
S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpCb3R0b206Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgb3V0LnByaW50KCJCb29s
ZWFuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Ci0g
ICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgb3V0LnByaW50
KCJOdW1iZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJp
bmc6Ci0gICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3ltYm9sOgotICAgICAgICBvdXQucHJpbnQoIlN5bWJvbCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJpZ0ludDoKLSAgICAgICAg
b3V0LnByaW50KCJCaWdJbnQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhT
dHJ1Y3R1cmUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdDoKLSAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgotICAgICAgICBvdXQucHJpbnQo
Ik9iamVjdE9yT3RoZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpUb3A6Ci0gICAgICAgIG91dC5wcmludCgiVG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZS5oCShub25leGlzdGVudCkKQEAgLTEsMjc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKLSNpbmNsdWRlICJJbmZlcnJlZFN0cnVj
dHVyZS5oIgotI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKLSNpbmNsdWRlICJKU0Nhc3QuaCIKLSNp
bmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBUaGlzIGlzIGFuIG9iamVjdCB1c2VkIGZvciB0aGUg
aW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJvcGVydGllcy4KLQotY2xhc3MgSW5m
ZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICZ2bS5pbmZlcnJlZFR5cGVTcGFjZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSW5mZXJyZWRUeXBl
KiBjcmVhdGUoVk0mKTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7Ci0gICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0KLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0KLSAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKLSAgICAgICAgQm90dG9t
LAotICAgICAgICBCb29sZWFuLAotICAgICAgICBPdGhlciwKLSAgICAgICAgSW50MzIsCi0gICAg
ICAgIE51bWJlciwKLSAgICAgICAgU3RyaW5nLAotICAgICAgICBTeW1ib2wsCi0gICAgICAgIEJp
Z0ludCwKLSAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKLSAgICAgICAgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIsCi0gICAgICAgIE9iamVjdCwKLSAgICAgICAgT2JqZWN0T3JPdGhlciwK
LSAgICAgICAgVG9wCi0gICAgfTsKLQotICAgIHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFncyhQdXRC
eUlkRmxhZ3MpOwotICAgIAotICAgIHN0YXRpYyBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgotICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEZXNjcmlwdG9yIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIERlc2NyaXB0b3IoKQotICAgICAgICAgICAgOiBtX2tpbmQoQm90
dG9tKQotICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBudWxscHRyKQotICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKLSAgICAgICAgICAgICwg
bV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGFzU3Ry
dWN0dXJlKGtpbmQpKQotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7Ci0KLSAg
ICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yRmxhZ3MoVk0mLCBQdXRCeUlkRmxhZ3MpOwotCi0g
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9raW5kICE9IEJvdHRvbSB8fCBtX3N0cnVjdHVyZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0KLSAg
ICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFncygpIGNvbnN0OwotCi0gICAgICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpbmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEJvdHRvbToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIEJvb2xlYW46Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOwotICAgICAgICAgICAgY2Fz
ZSBPdGhlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KTsKLSAgICAgICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzSW50MzIoKTsKLSAgICAgICAgICAgIGNhc2UgTnVtYmVyOgotICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5pc051bWJlcigpOwotICAgICAgICAgICAgY2FzZSBTdHJpbmc6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3RyaW5nKCk7Ci0gICAgICAgICAgICBjYXNlIFN5bWJv
bDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTeW1ib2woKTsKLSAgICAgICAgICAg
IGNhc2UgQmlnSW50OgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0JpZ0ludCgpOwot
ICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmU7Ci0gICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgot
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCi0gICAgICAg
ICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7Ci0gICAgICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKLSAgICAgICAgICAgIGNhc2UgVG9wOgotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAotICAgICAgICAgICAgICAgICYmIG1fc3Ry
dWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6
UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IERlc2NyaXB0b3ImKTsKLSAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKLQotICAgICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFu
IHRoZSBvdGhlciBvbmUuCi0gICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYp
IGNvbnN0OwotCi0gICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgS2luZCBtX2tpbmQ7Ci0gICAgICAgIFN0cnVjdHVyZSog
bV9zdHJ1Y3R1cmU7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSBjb25z
dCB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJl
YWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0
cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBudWxscHRyKTsKLSAgICB9
Ci0gICAgCi0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsK
LSAgICB9Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGRlc2Ny
aXB0b3IobG9ja2VyKTsKLSAgICB9Ci0gICAgCi0gICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikua2lu
ZCgpOyB9Ci0KLSAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsg
fQotICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0K
LQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2
YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCi0gICAg
QUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIERlc2NyaXB0b3IgY3Vy
cmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOwotICAgICAgICBpZiAoY3Vy
cmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
Y3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKLSAgICAgICAgcmV0dXJuIHdpbGxTdG9y
ZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSW1t
ZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCi0gICAgdm9pZCBtYWtlVG9wKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc1Rv
cCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtYWtlVG9wU2xvdyh2bSwgcHJvcGVy
dHlOYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1h
a2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3Iu
IE5vdGUgdGhhdAotICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3Au
Ci0gICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBEZXNj
cmlwdG9yJik7Ci0gICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7Ci0gICAgCi0g
ICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFdhdGNocG9p
bnQqKTsKLSAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwotCi0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYpOwotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZShWTSYpOwotICAgIH5J
bmZlcnJlZFR5cGUoKTsKLQotICAgIGJvb2wgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlKTsKLSAgICB2b2lkIG1ha2VUb3BTbG93KFZNJiwgUHJvcGVydHlOYW1l
KTsKLQotICAgIC8vIEhlbHBlciBmb3Igd2lsbFN0b3JlVmFsdWVTbG93KCkgYW5kIG1ha2VUb3BT
bG93KCkuIFRoaXMgcmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBmaXJlIHRoZQotICAgIC8vIHdh
dGNocG9pbnQgc2V0LgotICAgIGJvb2wgc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZN
JiwgRGVzY3JpcHRvcik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoVk0mKTsKLSAg
ICAKLSAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmU7Ci0gICAgZnJpZW5kIGNsYXNz
IEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLQotICAgIG11dGFibGUgQ29uY3VycmVudEpT
TG9jayBtX2xvY2s7Ci0gICAgCi0gICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQb2lzb25lZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNzE1Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEluZmVy
cmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLQotICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVp
bmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0
IGl0IHdvdWxkbid0IGJlCi0gICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxz
bywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRv
IHRoZSBERkcKLSAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlw
ZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgotICAgIElubGluZVdhdGNocG9pbnRTZXQg
bV93YXRjaHBvaW50U2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVzcGFjZSBX
VEYgewotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlw
ZTo6S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZUlubGluZXMuaAkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5l
cy5oCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
SW5mZXJyZWRUeXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgdm9pZCBJbmZlcnJl
ZFR5cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKLXsKLSAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQodGhpcykpOwotICAgIAotICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICByZW1vdmVTdHJ1Y3R1cmUodm0pOwot
ICAgIH0KLSAgICAKLSAgICB2bS5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMucmVtb3ZlKHRo
aXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkluZmVycmVkVHlwZVRhYmxlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9
IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKLQotSW5mZXJyZWRUeXBlVGFibGUq
IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQotewotICAgIEluZmVycmVkVHlwZVRh
YmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJs
ZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKLSAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEluZmVycmVkVHlwZVRh
YmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5m
ZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOwot
ICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRh
YmxlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0K
LXZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBl
VGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKLSAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhp
bmZlcnJlZFR5cGVUYWJsZS0+Y2VsbExvY2soKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbnRy
eSA6IGluZmVycmVkVHlwZVRhYmxlLT5tX3RhYmxlKSB7Ci0gICAgICAgIGF1dG8gZW50cnlWYWx1
ZSA9IGVudHJ5LnZhbHVlOwotCi0gICAgICAgIGlmICghZW50cnlWYWx1ZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnlWYWx1ZS0+aXNSZWxldmFudCgpKQotICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnlWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGVudHJ5LnZhbHVlLmNsZWFyKCk7Ci0gICAgfQotfQotCi1JbmZlcnJlZFR5cGUqIEluZmVy
cmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQotewotICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOwotICAgIGlmIChp
dGVyID09IG1fdGFibGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW5m
ZXJyZWRUeXBlKiBlbnRyeVZhbHVlID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgaWYgKCFlbnRy
eVZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRha2UgdGhpcyBvcHBv
cnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KLSAgICBpZiAoIWVudHJ5VmFsdWUt
PmlzUmVsZXZhbnQoKSkgewotICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlWYWx1ZTsKLX0KLQotSW5m
ZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAgICByZXR1cm4g
Z2V0KGxvY2tlciwgdWlkKTsKLX0KLQotSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6
Z2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIGdldChwcm9wZXJ0
eU5hbWUudWlkKCkpOwotfQotCi1ib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1
ZSgKLSAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKLXsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVs
aWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1h
cC4KLSAgICAKLSAgICBpZiAoYWdlID09IFN0b3JlZFByb3BlcnR5QWdlOjpPbGRQcm9wZXJ0eSkg
ewotICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVy
dHlOYW1lLnVpZCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KLQotICAg
ICAgICBJbmZlcnJlZFR5cGUqIGVudHJ5VmFsdWUgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAg
ICAgaWYgKCFlbnRyeVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICAgICAgaWYgKGVudHJ5VmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaXRl
ci0+dmFsdWUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRh
YmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soY2VsbExvY2soKSk7Ci0gICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3Bl
cnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7Ci0gICAgfQotICAg
IEluZmVycmVkVHlwZSogZW50cnlWYWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7
Ci0KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgSW5mZXJyZWRUeXBlKiBp
bmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7Ci0gICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0
aGlzLCBpbmZlcnJlZFR5cGUpOwotICAgICAgICBlbnRyeVZhbHVlID0gaW5mZXJyZWRUeXBlOwot
ICAgIH0gZWxzZSBpZiAoIWVudHJ5VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoZW50cnlWYWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmNsZWFyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluZmVycmVkVHlwZVRh
YmxlOjptYWtlVG9wKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgU3RvcmVkUHJv
cGVydHlBZ2UgYWdlKQotewotICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhl
IGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgotICAgIGlm
IChhZ2UgPT0gU3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5KSB7Ci0gICAgICAgIFRhYmxl
VHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOwot
ICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuOyAv
LyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgotCi0gICAgICAgIEluZmVycmVkVHlwZSogZW50
cnlWYWx1ZSA9IGl0ZXItPnZhbHVlLmdldCgpOwotCi0gICAgICAgIGlmICghZW50cnlWYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBlbnRyeVZhbHVlLT5tYWtlVG9wKHZtLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OwotICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKLSAgICAgICAgcmVzdWx0
ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRU
eXBlPigpKTsKLSAgICB9Ci0gICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCh2bSwg
cHJvcGVydHlOYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Ci19Ci0K
LUluZmVycmVkVHlwZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZShWTSYgdm0pCi0gICAgOiBCYXNl
KHZtLCB2bS5pbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5nZXQoKSkKLXsKLX0KLQotSW5mZXJy
ZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZVRhYmxlLmgJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkluZmVycmVkVHlw
ZS5oIgotI2luY2x1ZGUgIkpTQ2FzdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gQSB0YWJs
ZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwg
YmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQotLy8gZGVzdHJ1Y3RvciBhbmQg
bWFrZXMgbGlmZXRpbWUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3Mg
YSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZwotLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hp
bGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJs
ZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcwotLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5
cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhp
bmsgb2YgImEgcHJvcGVydHkiCi0vLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVj
dHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJv
cGVydGllcyBmcm9tCi0vLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1
cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCi0KLWNsYXNzIEluZmVycmVk
VHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKLQotICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7
Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9y
dGFsOwotICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotCi0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgREVDTEFSRV9JTkZPOwot
Ci0gICAgLy8gR2V0IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBm
b3IgYm90aCBUb3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCi0gICAgLy8g
b3duaW5nIFN0cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgotICAgIElu
ZmVycmVkVHlwZSogZ2V0KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKLSAgICBJbmZlcnJlZFR5cGUqIGdldChVbmlxdWVkU3RyaW5nSW1wbCopOwotICAgIEluZmVy
cmVkVHlwZSogZ2V0KFByb3BlcnR5TmFtZSk7Ci0KLSAgICBlbnVtIGNsYXNzIFN0b3JlZFByb3Bl
cnR5QWdlIHsgTmV3UHJvcGVydHksIE9sZFByb3BlcnR5IH07Ci0gICAgCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVs
ZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAotICAgIC8vIHJlbGV2YW50IGlmIGl0J3Mg
VG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJp
ZXMuCi0gICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
U3RvcmVkUHJvcGVydHlBZ2UpOwotCi0gICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRo
ZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBj
b250ZXh0LgotICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVy
dHlBZ2UpOwotCi1wcml2YXRlOgotICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7Ci0gICAgfklu
ZmVycmVkVHlwZVRhYmxlKCk7Ci0KLSAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4K
LSAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBv
ciBhYnNlbmNlIGZyb20gdGFibGUuCi0gICAgLy8KLSAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRl
cm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGlu
ZyBvbiB3aGV0aGVyIHRoZQotICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmlu
ZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBt
YXkgaGF2ZQotICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xh
c3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVy
dHkKLSAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBs
YWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQotICAgIC8v
ICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3Rvcmlu
ZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSksIHRoZW4KLSAgICAvLyBhYnNlbmNl
IG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciB0
aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCi0gICAgLy8gUzIsIHNoYXJlIHRo
ZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlhbGx5IGtu
b3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5Ci0gICAgLy8gd2FudCB0byBhZGQgUCB3aXRob3V0
IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUuIElmIFMxIGFk
ZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQotICAgIC8vIHRvIGluZGljYXRlIFRvcCwgdGhlbiBTMiB3
b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBlbmQgdXAgY3Jl
YXRpbmcgYSBub24tVG9wCi0gICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMxIHdvdWxk
IGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0eXBlLiBDbGVh
cmx5LAotICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5IGVuc3Vy
aW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwKLSAgICAv
LyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3IgcHJvcGVydGll
cyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcwotICAgIC8vIGNyZWF0ZWQu
Ci0gICAgdXNpbmcgVGFibGVUeXBlID0gSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+
LCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPiwgSWRlbnRpZmllclJlcEhhc2g+OwotCi0gICAg
VGFibGVUeXBlIG1fdGFibGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNJbnRlcm5hbFByb21pc2U7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDsKK2Ns
YXNzIEpTTW9kdWxlUmVjb3JkOwogY2xhc3MgU291cmNlQ29kZTsKIAogY2xhc3MgSlNNb2R1bGVM
b2FkZXIgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjM5
OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSB0aGlzLT5z
dHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3RydWN0dXJlKTsKLSAgICBib29sIHNob3VsZE9wdGlt
aXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKICAgICBwdXREaXJl
Y3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQ
cm9wZXJ0aWVzKCk7CkBAIC0yODEsNyArMjc5LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkgewogICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoaW5kZXhpbmdNb2Rl
KCkpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CiAg
ICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3Vy
cmVudEF0dHJpYnV0ZXMpOwpAQCAtMzE4LDkgKzMxNSw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW4KICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKICAgICAgICAg
c3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiAgICAgaWYgKG5l
d1N0cnVjdHVyZSkgewotICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yRXhp
c3RpbmdUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgIAogICAg
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAo
Y3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewog
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUodm0pKTsK
QEAgLTM0MSwxOCArMzM1LDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW4KICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBib29s
IGhhc0luZmVycmVkVHlwZTsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAg
ICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQ
dXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRp
ZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJy
ZWRUeXBlKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4
dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgIH0KLQogICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCiAgICAgICAgIGlmICgoYXR0cmlidXRlcyAm
IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpKSB7CkBAIC0zNzQsOCArMzYyLDYg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIAogICAgIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAogICAgICAg
ICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5j
b250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKLSAgICBuZXdTdHJ1Y3R1cmUtPndp
bGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAg
CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMzk5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsMTUgKzM3
MSwxMSBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvCiAgICAgaWYg
KHNldFByb3BlcnR5VGFibGUpCiAgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRh
YmxlKTsKIAotICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlw
ZVRhYmxlLmdldCgpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICgh
c3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdl
dCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3Vz
KCkpOwotICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+
bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCi0gICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5
cGUgPSB0cnVlOwogICAgICAgICB0YWJsZS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC01MDMs
NyArNDk5LDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbgogICAg
IHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAgIHRy
YW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7Ci0gICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRN
YXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5n
ZXQoKSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAKQEAgLTUzNiwxMiArNTMxLDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbgogICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVk
IHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRs
ZSBjYWNoZWQKICAgICAvLyAgIHJlbW92YWxzLgogICAgIC8vCi0gICAgLy8gLSBJbmZlcnJlZFR5
cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgaXMg
aW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCi0gICAgLy8gICByZW1vdmUgYSBwcm9wZXJ0eSBh
bmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1lYW5zIHRvcCIgb3B0
aW1pemF0aW9uIHdvdWxkbid0Ci0gICAgLy8gICB3b3JrIGFueW1vcmUsIHVubGVzcyByZW1vdmFs
IGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2luZyBzb21ldGhpbmcg
ZXF1aXZhbGVudCB0bwotICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9yIGJ5IHN0cm9uZ2x5
IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0IGlzIG5vdCBhYnNl
bnQsIGJ1dAotICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4KLSAgICAKICAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSk7CkBAIC04OTIsNDMgKzg4MSw2IEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdh
dGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVl
KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKLSAgICBWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0
aW1pemUsCi0gICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFnZSkKLXsK
LSAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVy
ZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgQVNTRVJUKCFoYXNCZWVuRGljdGlv
bmFyeSgpKTsKLQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVk06OmNhblVzZUpJVCgpLCAiV2Ug
ZG9uJ3Qgd2FudCB0byB1c2UgbWVtb3J5IGZvciBpbmZlcnJlZCB0eXBlcyB1bmxlc3Mgd2UncmUg
dXNpbmcgdGhlIEpJVC4iKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJs
ZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3
ZSBoYXZlIGFscmVhZHkKLSAgICAvLyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0
eSBtYXAuCi0gICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJs
ZS5nZXQoKTsKLSAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBl
VGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
ICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7Ci0gICAgfQotCi0g
ICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgotICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsK
LSAgICAKLSAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRl
ZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKLSAg
ICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgotICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQo
KSk7Ci0gICAgQVNTRVJUKGVudHJ5KTsKLSAgICAKLSAgICBpZiAoc2hvdWxkT3B0aW1pemUpCi0g
ICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUodm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRhYmxlLT5t
YWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUsIGFnZSk7Ci0gICAgICAgIGVudHJ5LT5oYXNJbmZlcnJl
ZFR5cGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcHJvcGVydHlUYWJsZS0+dXNlKCk7IC8v
IFRoaXMgbWFrZXMgaXQgc2FmZSB0byB1c2UgZW50cnkgYWJvdmUuCi19Ci0KICNpZiBEVU1QX1BS
T1BFUlRZTUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3BlcnR5TWFw
SGFzaFRhYmxlU3RhdHMgPSAwOwpAQCAtMTA5OSw4ICsxMDUxLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLmNsZWFyKCk7Ci0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luZmVy
cmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MjM5OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNp
bmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCi0j
aW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC03NiwxMyArNzUsMTEg
QEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXk7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsKLSAg
ICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3QgYSBw
cm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSwg
YW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRyKQog
ICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoMCkK
LSAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAg
LTkwLDcgKzg3LDYgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtleShr
ZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCi0gICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtNDM1LDcg
KzQzMSw2IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5
TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAgIC8v
IFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5b3Vy
IGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUncyBs
b2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9yIG5v
dCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNjA1LDU1ICs2MDAsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXModm0pOwogICAgIH0KICAgICAKLSAgICBi
b29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9p
bmZlcnJlZFR5cGVUYWJsZTsKLSAgICB9Ci0KLSAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlw
ZUZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgaWYgKEluZmVycmVk
VHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGFibGUtPmdldCh1aWQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRGVzY3JpcHRvckZv
cihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgIHsKLSAgICAgICAgaWYgKEluZmVycmVkVHlw
ZSogcmVzdWx0ID0gaW5mZXJyZWRUeXBlRm9yKHVpZCkpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0LT5kZXNjcmlwdG9yKCk7Ci0gICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKLSAg
ICB9Ci0KLSAgICAvLyBDYWxsIHRoaXMgd2hlbiB3ZSBrbm93IHRoYXQgdGhpcyBpcyBhIGJyYW5k
IG5ldyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGl0J3Mgbm90IGVub3VnaCBmb3IgdGhlCi0gICAgLy8g
cHJvcGVydHkgdG8gYmUgYnJhbmQgbmV3IHRvIHNvbWUgb2JqZWN0LiBJdCBoYXMgdG8gYmUgYnJh
bmQgbmV3IHRvIHRoZSBTdHJ1Y3R1cmUuCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9y
ZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQotICAgIHsKLSAg
ICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6ZSAmJiAhbV9p
bmZlcnJlZFR5cGVUYWJsZSkgfHwgIVZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
aG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlOjpOZXdQ
cm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGlzIHdoZW4gd2Uga25vdyB0aGF0IHRo
aXMgaXMgYSBuZXcgcHJvcGVydHkgZm9yIHRoZSBvYmplY3QsIGJ1dCBub3QgbmV3IGZvciB0aGUK
LSAgICAvLyBzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdW5kZXIgdGhlIEluZmVycmVkVHlwZVRhYmxl
J3MgcnVsZXMsIGFic2VuY2Ugb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlCi0gICAgLy8gdGFibGUg
bWVhbnMgVG9wIHJhdGhlciB0aGFuIEJvdHRvbS4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2ls
bFN0b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRpb24oCi0gICAgICAgIFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICFtX2luZmVycmVkVHlw
ZVRhYmxlIHx8ICFWTTo6Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZTo6TmV3UHJvcGVydHkpOwot
ICAgIH0KLQotICAgIC8vIENhbGwgdGhpcyB3aGVuIHdlIGtub3cgdGhhdCB0aGUgaW5mZXJyZWQg
dHlwZSB0YWJsZSBleGlzdHMgYW5kIGhhcyBhbiBlbnRyeSBmb3IgdGhpcyBwcm9wZXJ0eS4KLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAotICAgICAgICBW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkT3B0aW1pemUpCi0gICAgewotICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAh
Vk06OmNhblVzZUpJVCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aWxsU3RvcmVW
YWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJl
ZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2U6Ok9sZFByb3BlcnR5KTsKLSAgICB9Ci0KICAg
ICBSZWY8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSwgYm9vbCYgc2F3
UG9seVByb3RvU3RydWN0dXJlKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKQEAgLTgwMCw5ICs3NDYsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRX
YXRjaGluZ0ludGVybmFsUHJvcGVydGllcyhWTSYpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coCi0gICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOwotCiAgICAg
c3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMg
Y29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwog
CkBAIC04MzMsOCArNzc2LDYgQEAgcHJpdmF0ZToKICAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBz
aG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4K
ICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwog
Ci0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxl
OwotCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1Niwg
Zmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyMzk5NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCwxOCArMTIwLDExIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnN0b3IKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgcmV0dXJuIGdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworICAgIHJldHVybiBnZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7
Ci0gICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJl
ZFR5cGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMs
IGJvb2wmIGhhc0luZmVycmVkVHlwZSkKLXsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
CiAKQEAgLTE0NCw3ICsxMzcsNiBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6CiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9
IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZl
cnJlZFR5cGU7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIzOTk2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBA
QAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIu
aCIKICNpbmNsdWRlICJJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSW5mZXJy
ZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAtMzAz
LDcgKzMwMiw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBjZWxsRGFuZ2Vyb3VzQml0c0hlYXBDZWxsVHlwZS5nZXQoKSwgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSkKICAgICAsIGZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgY2Vs
bEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTRnVuY3Rpb24pCiAgICAgLCBnZW5lcmF0
b3JGdW5jdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVlT09CSGVh
cENlbGxUeXBlLmdldCgpLCBKU0dlbmVyYXRvckZ1bmN0aW9uKQotICAgICwgaW5mZXJyZWRUeXBl
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZS5nZXQoKSwgSW5mZXJyZWRUeXBlKQogICAgICwgaW5mZXJyZWRWYWx1ZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVy
cmVkVmFsdWUpCiAgICAgLCBpbnRlcm5hbEZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBJbnRlcm5hbEZ1bmN0
aW9uKQogI2lmIEVOQUJMRShJTlRMKQpAQCAtMzM0LDcgKzMzMiw2IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgICwgZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNl
KQogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyhleGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCi0gICAgLCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXpl
cnMoaW5mZXJyZWRUeXBlU3BhY2UpCiAgICAgLCBpbmZlcnJlZFZhbHVlc1dpdGhGaW5hbGl6ZXJz
KGluZmVycmVkVmFsdWVTcGFjZSkKICAgICAsIGV2YWxDb2RlQmxvY2tTcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBFdmFsQ29k
ZUJsb2NrKQogICAgICwgZnVuY3Rpb25Db2RlQmxvY2tTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkNvZGVCbG9j
aykKQEAgLTQyNyw4ICs0MjQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMs
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwot
ICAgIGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVkVHlwZVRhYmxlU3Ry
dWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywg
SW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhjZXB0aW9uU3RydWN0
dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIzOTk2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3Nyw3ICszNzcsNiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7CiAgICAg
SXNvU3Vic3BhY2UgZ2VuZXJhdG9yRnVuY3Rpb25TcGFjZTsKLSAgICBJc29TdWJzcGFjZSBpbmZl
cnJlZFR5cGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFZhbHVlU3BhY2U7CiAgICAg
SXNvU3Vic3BhY2UgaW50ZXJuYWxGdW5jdGlvblNwYWNlOwogI2lmIEVOQUJMRShJTlRMKQpAQCAt
NDA5LDcgKzQwOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBJc29DZWxsU2V0IGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzOwogICAgIElzb0NlbGxTZXQgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsKLSAgICBJc29DZWxsU2V0IGluZmVycmVk
VHlwZXNXaXRoRmluYWxpemVyczsKICAgICBJc29DZWxsU2V0IGluZmVycmVkVmFsdWVzV2l0aEZp
bmFsaXplcnM7CiAgICAgCiAgICAgc3RydWN0IFNwYWNlQW5kRmluYWxpemVyU2V0IHsKQEAgLTU1
MSw4ICs1NDksNiBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJv
cGVydHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVT
dHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>