<?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>113437</bug_id>
          
          <creation_ts>2013-03-27 13:24:51 -0700</creation_ts>
          <short_desc>fourthTier: JITCode should abstract exactly how the JIT code is structured and where it was allocated</short_desc>
          <delta_ts>2013-03-27 15:56:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864813</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 13:24:51 -0700</bug_when>
    <thetext>This will make it easier to bring up the LLVM backend.  At first, I&apos;ll probably just let LLVM use its own memory allocator.  But even if we do switch to having LLVM use our allocator, we will probably want to give LLVM the ability to allocate the code for a function in multiple chunks, if it wanted to.

But also, making JITCode be more abstract means that in the future we could even have a DFGJITCode, for example, which contains all of the DFGRareData things in CodeBlock.  We could do likewise for the LLInt and Baseline JIT.  This will save memory.

Anyway, I think this is pure goodness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864845</commentid>
    <comment_count>1</comment_count>
      <attachid>195391</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 14:07:45 -0700</bug_when>
    <thetext>Created attachment 195391
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864848</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-27 14:10:22 -0700</bug_when>
    <thetext>Attachment 195391 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/assembler/RepatchBuffer.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.h&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITCode.h:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/JavaScriptCore/jit/JITCode.h:79:  The parameter name &quot;jitType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITCode.h:119:  The parameter name &quot;ref&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITCode.h:119:  The parameter name &quot;jitType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 27 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>864849</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 14:12:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 195391 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/assembler/RepatchBuffer.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.h&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
&gt; Source/JavaScriptCore/jit/JITCode.h:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]

Nope.

&gt; Source/JavaScriptCore/jit/JITCode.h:79:  The parameter name &quot;jitType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/JavaScriptCore/jit/JITCode.h:119:  The parameter name &quot;ref&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/JavaScriptCore/jit/JITCode.h:119:  The parameter name &quot;jitType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I fixed them.

&gt; Total errors found: 4 in 27 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864850</commentid>
    <comment_count>4</comment_count>
      <attachid>195391</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-27 14:14:13 -0700</bug_when>
    <thetext>Comment on attachment 195391
the patch

Attachment 195391 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17304362</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864851</commentid>
    <comment_count>5</comment_count>
      <attachid>195393</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 14:15:48 -0700</bug_when>
    <thetext>Created attachment 195393
the patch

Fixing unresolved symbols.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864853</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-27 14:18:37 -0700</bug_when>
    <thetext>Attachment 195393 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/assembler/RepatchBuffer.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.h&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITCode.h:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 27 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>864854</commentid>
    <comment_count>7</comment_count>
      <attachid>195393</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-27 14:22:35 -0700</bug_when>
    <thetext>Comment on attachment 195393
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864926</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-27 15:40:14 -0700</bug_when>
    <thetext>&gt; But also, making JITCode be more abstract means that in the future we could even have a DFGJITCode, for example, which contains all of the DFGRareData things in CodeBlock.  We could do likewise for the LLInt and Baseline JIT.  This will save memory.

For a given piece of data, how would you describe the guideline for whether it belongs in JITCode or CodeBlock?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864935</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 15:49:44 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; But also, making JITCode be more abstract means that in the future we could even have a DFGJITCode, for example, which contains all of the DFGRareData things in CodeBlock.  We could do likewise for the LLInt and Baseline JIT.  This will save memory.
&gt; 
&gt; For a given piece of data, how would you describe the guideline for whether it belongs in JITCode or CodeBlock?

Specific to a particular execution engine? -&gt; put it in JITCode not CodeBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864942</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 15:56:55 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147014</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195391</attachid>
            <date>2013-03-27 14:07:45 -0700</date>
            <delta_ts>2013-03-27 14:15:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57047</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxMy0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVENvZGUgc2hvdWxkIGFic3RyYWN0IGV4YWN0bHkgaG93IHRoZSBKSVQgY29kZSBpcyBzdHJ1
Y3R1cmVkIGFuZCB3aGVyZSBpdCB3YXMgYWxsb2NhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEpJVENvZGUgaXMgbm93IGEgdmlydHVh
bCBiYXNlIGNsYXNzLCB3aGljaCB3aWxsIGFsbG93IGRpZmZlcmVudCBKSVRzIHRvIGhhdmUgcmFk
aWNhbGx5CisgICAgICAgIGRpZmZlcmVudCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVu
dCBjb252ZW50aW9ucyBpbiB0aGUgZnV0dXJlLiBJdCB3aWxsIGFsc28KKyAgICAgICAgbWFrZSBp
dCBlYXNpZXIgdG8gc3RvcmUgSklULXNwZWNpZmljIG1ldGEtZGF0YSBpbiBDb2RlQmxvY2sganVz
dCBieSBwdXR0aW5nIGl0IGludG8KKyAgICAgICAgYW4gYXBwcm9wcmlhdGUgSklUQ29kZSBzdWJj
bGFzcy4KKyAgICAgICAgCisgICAgICAgIEZvciBub3cgdGhlcmUgaXMgb25lIHN1YmNsYXNzLCBE
aXJlY3RKSVRDb2RlLCB3aGljaCBqdXN0IGJlaGF2ZXMgbGlrZSBKSVRDb2RlIHVzZWQgdG8KKyAg
ICAgICAgYmVoYXZlLgorCisgICAgICAgICogYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaDoKKyAg
ICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldFN0dWJJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4pOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmdldEpJVFR5cGUpOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2gpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVj
dXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6fkpJVENvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6aG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29k
ZTo6RGlyZWN0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6On5EaXJlY3RK
SVRDb2RlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwpOgor
ICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRpcmVjdEpJVENvZGU6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGlyZWN0
SklUQ29kZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OmNvbnRhaW5zKToK
KyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVENv
ZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dG9wVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVy
SklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6aXNCYXNlbGluZUNvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpq
aXRUeXBlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZUZvcik6CisgICAgICAgIChK
U0M6OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6
c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjplbmQpOgorICAgICAgICAoRGlyZWN0SklU
Q29kZSk6CisgICAgICAgICogaml0L0pJVERyaXZlci5oOgorICAgICAgICAoSlNDOjpqaXRDb21w
aWxlSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6Omxh
enlMaW5rRm9yKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9ncmFtRW50
cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVudHJ5cG9p
bnQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmVudHJ5T1NSKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmdlbmVyYXRlZEpJVENvZGVG
b3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Z2VuZXJhdGVkSklU
Q29kZUZvcik6CisgICAgICAgIChFeGVjdXRhYmxlQmFzZSk6CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVCYXNlOjpob3N0Q29kZUVudHJ5Rm9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJh
c2U6OmpzQ29kZUVudHJ5Rm9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmpzQ29k
ZVdpdGhBcml0eUNoZWNrRW50cnlGb3IpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpnZW5lcmF0ZWRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmdlbmVyYXRlZEpJVENvZGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9y
RXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToK
KwogMjAxMy0wMy0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEl0J3MgY2FsbGVkICJIYXNoIENvbnNpbmciIG5vdCAiSGFzaCBDb25zdGluZyIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZp
c2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBjbGFzcyBSZXBhdGNoQnVm
ZmVyIHsKIHB1YmxpYzoKICAgICBSZXBhdGNoQnVmZmVyKENvZGVCbG9jayogY29kZUJsb2NrKQog
ICAgIHsKLSAgICAgICAgSklUQ29kZSYgY29kZSA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOwot
ICAgICAgICBtX3N0YXJ0ID0gY29kZS5zdGFydCgpOwotICAgICAgICBtX3NpemUgPSBjb2RlLnNp
emUoKTsKKyAgICAgICAgUmVmUHRyPEpJVENvZGU+IGNvZGUgPSBjb2RlQmxvY2stPmdldEpJVENv
ZGUoKTsKKyAgICAgICAgbV9zdGFydCA9IGNvZGUtPnN0YXJ0KCk7CisgICAgICAgIG1fc2l6ZSA9
IGNvZGUtPnNpemUoKTsKIAogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFi
bGUobV9zdGFydCwgbV9zaXplKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
NDIsMTMgKzI0NDIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0
YwogICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3Rh
dGljX2Nhc3Q8aW50PihzdHViSW5mby5hY2Nlc3NUeXBlKSwgIikgaW4gIiwgKnRoaXMsICIuXG4i
KTsKICAgICAKICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKSB7Ci0gICAgICAg
IGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAg
aWYgKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCiAgICAgICAgICAgICBERkc6OmRm
Z1Jlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZv
KTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5
cGUpKTsKLSAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKQorICAgICAgICBpZiAoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKICAgICAg
ICAgICAgIERGRzo6ZGZnUmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAg
ICAgICAgZWxzZSAKICAgICAgICAgICAgIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQocmVwYXRjaEJ1
ZmZlciwgJnN0dWJJbmZvKTsKQEAgLTI3NTQsOCArMjc1NCw4IEBAIHVuc2lnbmVkIENvZGVCbG9j
azo6Ynl0ZWNvZGVPZmZzZXQoRXhlY1MKICAgICBpZiAoIWNhbGxJbmRpY2VzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIDE7CiAgICAgCi0gICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxl
TWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKLSAgICAgICAgdW5z
aWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpOworICAgIGlmIChnZXRKSVRDb2RlKCktPmNvbnRhaW5zKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpIHsKKyAgICAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJ
VENvZGUoKS0+b2Zmc2V0T2YocmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQqIHJlc3VsdCA9CiAgICAgICAgICAgICBiaW5hcnlT
ZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkPigKICAgICAg
ICAgICAgICAgICBjYWxsSW5kaWNlcywgY2FsbEluZGljZXMuc2l6ZSgpLCBjYWxsUmV0dXJuT2Zm
c2V0LCBnZXRDYWxsUmV0dXJuT2Zmc2V0KTsKQEAgLTI3NzcsMTIgKzI3NzcsMTIgQEAgYm9vbCBD
b2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4oUmV0dQogICAgIGlmICghaGFzQ29kZU9yaWdp
bnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFnZXRKSVRDb2RlKCkuZ2V0
RXhlY3V0YWJsZU1lbW9yeSgpLT5jb250YWlucyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSB7Cisg
ICAgaWYgKCFnZXRKSVRDb2RlKCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsK
ICAgICAgICAgY29kZU9yaWdpbiA9IGZpbmRDbG9zdXJlQ2FsbEZvclJldHVyblBDKHJldHVybkFk
ZHJlc3MpLT5jb2RlT3JpZ2luKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
LSAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCktPm9mZnNldE9m
KHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNl
dCogZW50cnkgPQogICAgICAgICB0cnlCaW5hcnlTZWFyY2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVy
bk9mZnNldCwgdW5zaWduZWQ+KAogICAgICAgICAgICAgY29kZU9yaWdpbnMoKSwgY29kZU9yaWdp
bnMoKS5zaXplKCksIG9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00MjEsMjEgKzQyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW50IGFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsK
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2Rl
JiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgICAg
ICB2b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2pp
dENvZGUgPSBjb2RlOwogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2Rl
V2l0aEFyaXR5Q2hlY2s7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICBpZiAobV9q
aXRDb2RlLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgICAgIGlmIChK
SVRDb2RlOjpqaXRUeXBlRm9yKG1faml0Q29kZSkgPT0gSklUQ29kZTo6REZHSklUKSB7CiAgICAg
ICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAgICAg
bV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7CiAgICAg
ICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2Rl
KCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2V0
SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2s7IH0KLSAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQotICAgICAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVNZW1vcnkoKTsgfQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSBj
b25zdCB7IHJldHVybiBKSVRDb2RlOjpqaXRUeXBlRm9yKG1faml0Q29kZSk7IH0KICAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKSA9IDA7CiAgICAgICAgIGVudW0gSklUQ29tcGlsYXRpb25SZXN1bHQgeyBBbHJlYWR5Q29t
cGlsZWQsIENvdWxkTm90Q29tcGlsZSwgQ29tcGlsZWRTdWNjZXNzZnVsbHkgfTsKQEAgLTExNzEs
NyArMTE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1
YkluZm8+IG1fc3RydWN0dXJlU3R1YkluZm9zOwogICAgICAgICBWZWN0b3I8QnlWYWxJbmZvPiBt
X2J5VmFsSW5mb3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZv
czsKLSAgICAgICAgSklUQ29kZSBtX2ppdENvZGU7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBt
X2ppdENvZGU7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJp
dHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ2
NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiB9
CiAKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9Owot
aW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCkKK2lubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAgICAgCkBAIC0xNjksMTIgKzE2
OSwxMiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Citib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
UmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAw
LCBieXRlY29kZUluZGV4KTsKIH0KIAotYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCitib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IHJldHVybiBjb21waWxlKENvbXBpbGVGdW5jdGlvbiwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2Rl
LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrLCBieXRlY29kZUluZGV4KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEg
KzQxLDExIEBAIG5hbWVzcGFjZSBERkcgewogSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0
TnVtQ29tcGlsYXRpb25zKCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLWJvb2wgdHJ5Q29tcGls
ZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7Ci1ib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRD
b2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9j
ayosIFJlZlB0cjxKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworYm9vbCB0cnlD
b21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+Jiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgSklUQ29kZSYsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5l
IGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KK2lu
bGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENv
ZGU+JiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCB0cnlDb21waWxl
RnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAs
NyArMjQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
IGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogfQogCi1i
b29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5KQorYm9vbCBKSVRDb21waWxl
cjo6Y29tcGlsZShSZWZQdHI8SklUQ29kZT4mIGVudHJ5KQogewogICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja2VuZCIpOwogCkBAIC0yNzEsMTMgKzI3MSwxMyBAQCBi
b29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5CiAgICAgaWYgKG1fZ3JhcGgu
bV9jb21waWxhdGlvbikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIo
bV9ncmFwaC5tX2NvbXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsKIAotICAgIGVudHJ5ID0g
SklUQ29kZSgKKyAgICBlbnRyeSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAogICAgICAg
ICBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLAotICAgICAgICBK
SVRDb2RlOjpERkdKSVQpOworICAgICAgICBKSVRDb2RlOjpERkdKSVQpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZGUmIGVu
dHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCitib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpJVENvZGU+JiBlbnRyeSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKQogewogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja2VuZCIpOwogICAgIApAQCAtMzY1LDkgKzM2NSw5
IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9ncmFwaC5tX2NvbXBpbGF0aW9uLmdldCgp
LCBsaW5rQnVmZmVyKTsKIAogICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0gICAgZW50cnkgPSBKSVRDb2RlKAorICAgIGVudHJ5ID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoCiAgICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCksCi0gICAgICAgIEpJVENvZGU6OkRGR0pJVCk7CisgICAg
ICAgIEpJVENvZGU6OkRGR0pJVCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNDY0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NSw4ICsyNDUsOCBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2Fs
bEhlbHBlcnMgCiBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXIoR3JhcGgmIGRmZyk7CiAgICAgCi0g
ICAgYm9vbCBjb21waWxlKEpJVENvZGUmIGVudHJ5KTsKLSAgICBib29sIGNvbXBpbGVGdW5jdGlv
bihKSVRDb2RlJiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNo
ZWNrKTsKKyAgICBib29sIGNvbXBpbGUoUmVmUHRyPEpJVENvZGU+JiBlbnRyeSk7CisgICAgYm9v
bCBjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKTsKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJv
cGVydGllcy4KICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTQ2NDIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgCiAgICAgLy8gNSkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlv
biBtYWNoaW5lIGNvZGUgYWRkcmVzcy4KICAgICAKLSAgICB2b2lkKiByZXN1bHQgPSBjb2RlQmxv
Y2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KGVudHJ5LT5tX21hY2hp
bmVDb2RlT2Zmc2V0KTsKKyAgICB2b2lkKiByZXN1bHQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUo
KS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChlbnRyeS0+bV9tYWNoaW5lQ29kZU9mZnNldCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICBkYXRhTG9nRigiICAgIE9T
UiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCByZXN1bHQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNDY0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wIE9TUkV4aXQ6OmdldFBh
dGNoYWIKIAogQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNo
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrKSBjb25zdAogewotICAgIHJldHVybiBDb2RlTG9jYXRp
b25KdW1wKGRmZ0NvZGVCbG9jay0+Z2V0SklUQ29kZSgpLmRhdGFBZGRyZXNzQXRPZmZzZXQobV9w
YXRjaGFibGVDb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGZnQ29k
ZUJsb2NrLT5nZXRKSVRDb2RlKCktPmRhdGFBZGRyZXNzQXRPZmZzZXQobV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KSk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgICAgICBBU1NFUlQobWFwcGluZy0+
bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRD
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9t
YWNoaW5lQ29kZU9mZnNldCk7CiAKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwogICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC03
NTcsNyArNzU3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIEFTU0VSVChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4
ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgdm9pZCoganVt
cFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAgICAgQVNT
RVJUKEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyICYmIEdQ
UkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCw3ICs2MTAsNyBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIEFTU0VS
VChtYXBwaW5nKTsKICAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBy
ZXR1cm5CeXRlY29kZUluZGV4KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIHZvaWQq
IGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLT5l
eGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwog
CiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewpAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBBU1NFUlQobWFwcGluZyk7
CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVD
b2RlQmxvY2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmct
Pm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNv
ZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmct
Pm1fbWFjaGluZUNvZGVPZmZzZXQpOwogICAgIAogICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAh
PSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE0NjQyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwODksNyArMTA4OSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGwKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkp
Ci0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29w
ZSgpLCBraW5kKTsKQEAgLTExMDEsNyArMTEwMSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkKICAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihr
aW5kKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAg
ICB9CiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogICAgIGlmICghY2FsbExp
bmtJbmZvLnNlZW5PbmNlKCkpCkBAIC0xMTY2LDcgKzExNjYsNyBAQCBzdGF0aWMgYm9vbCBhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdl
bmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrOwogICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDcgKzk4NCw3IEBA
IGZhaWxlZEpTT05QOgogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgIHJlc3VsdCA9
IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEp
OworICAgICAgICByZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUo
Jm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAgICAgfQogCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpl
eGVjdXRlQ2FsbChDYWxsRnJhCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAg
IHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCktPmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmds
b2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUpKTsKQEAgLTExMzEsNyArMTEzMSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAg
ICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUs
ICZnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCktPmV4ZWN1dGUo
Jm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CkBAIC0xMjI2
LDcgKzEyMjYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAj
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpl
eGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9s
b2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNr
LCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBj
bG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+ZXhl
Y3V0ZSgmbV9zdGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogICAgIH0KIApAQCAtMTMyMiw3ICsxMzIyLDcgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogI2lmIEVOQUJMRShMTElOVF9DX0xPT1Ap
CiAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxs
aW50X2V2YWxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0g
ZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwg
Jmdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2RlKCkt
PmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxNyw3ICs2MTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVy
dHlTdHViQ29tcGlsYXRpCiAgICAgfQogfQogCi1KSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKK1Bhc3NSZWZQdHI8SklUQ29kZT4gSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBm
dW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJDb21waWxpbmcgSklUIGNv
ZGUhXG4iKTsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gSklUQ29kZSgpOworICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxKSVRDb2RlPigpOwogCiAgICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZzZXRzIGlu
dG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJsZXMuCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kpIHsKQEAg
LTg1NCw3ICs4NTQsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJuIEpJ
VENvZGUocmVzdWx0LCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKIH0KIAog
dm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwMiw3ICszMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgSklUQ29kZSBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwg
Q29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKSVRDb2RlPiBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQ29kZVB0ciogZnVu
Y3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
SklUKGdsb2JhbERhdGEsIGNvZGVCbG9jaykucHJpdmF0ZUNvbXBpbGUoZnVuY3Rpb25FbnRyeUFy
aXR5Q2hlY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KQEAgLTQwNyw3ICs0MDcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCk7Ci0gICAgICAgIEpJVENvZGUgcHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciog
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAg
UGFzc1JlZlB0cjxKSVRDb2RlPiBwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGxMaW5rSW5mbyosIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cik7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3MyBAQAogCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeworCitKSVRDb2RlOjpK
SVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQoreworfQor
CitKSVRDb2RlOjp+SklUQ29kZSgpCit7Cit9CisKK0pTVmFsdWUgSklUQ29kZTo6ZXhlY3V0ZShK
U1N0YWNrKiBzdGFjaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9s
aW5lKGV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNrLCBjYWxsRnJhbWUsIDAsIDAsIGdsb2JhbERh
dGEpKTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1
bHQ7Cit9CisKK1Bhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJVENv
ZGU6OkNvZGVSZWYgY29kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOworfQorCitEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRD
b2RlKGNvbnN0IEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCisgICAgOiBK
SVRDb2RlKGppdFR5cGUpCisgICAgLCBtX3JlZihyZWYpCit7Cit9CisKK0RpcmVjdEpJVENvZGU6
On5EaXJlY3RKSVRDb2RlKCkKK3sKK30KKworSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2Rl
OjphZGRyZXNzRm9yQ2FsbCgpCit7CisgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKK30KKwordm9p
ZCogRGlyZWN0SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0
KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7Cit9CisKK3ZvaWQqIERpcmVjdEpJVENvZGU6OmRh
dGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3sKKyAgICBBU1NFUlQob2Zmc2V0IDw9
IHNpemUoKSk7IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBpcyB2YWxpZCB0byBh
c2sgZm9yIGFuIGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIGNvZGUuCisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24o
KSkgKyBvZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQq
IHBvaW50ZXJJbnRvQ29kZSkKK3sKKyAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkpID09IHJlc3VsdCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOworfQorCitzaXplX3Qg
RGlyZWN0SklUQ29kZTo6c2l6ZSgpCit7CisgICAgcmV0dXJuIG1fcmVmLnNpemUoKTsKK30KKwor
Ym9vbCBEaXJlY3RKSVRDb2RlOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQoreworICAgIHJldHVy
biBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKGFkZHJlc3MpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkpJVENvZGU6OkpJVFR5cGUgdHlwZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
MTU1ICszOCw5NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGNs
YXNzIEpTR2xvYmFsRGF0YTsKLSAgICBjbGFzcyBKU1N0YWNrOworY2xhc3MgSlNHbG9iYWxEYXRh
OworY2xhc3MgSlNTdGFjazsKICNlbmRpZgorCitjbGFzcyBKSVRDb2RlIDogcHVibGljIFJlZkNv
dW50ZWQ8SklUQ29kZT4geworcHVibGljOgorICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIENvZGVSZWY7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsK
KworICAgIGVudW0gSklUVHlwZSB7IE5vbmUsIEhvc3RDYWxsVGh1bmssIEludGVycHJldGVyVGh1
bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKICAgICAKLSAgICBjbGFzcyBKSVRDb2RlIHsKLSNp
ZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCi0gICAgICAgIHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0gICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIENvZGVQdHI7Ci0jZWxzZQotICAgICAgICBKSVRDb2RlKCkgeyB9Ci0jZW5kaWYKLSAgICBw
dWJsaWM6Ci0gICAgICAgIGVudW0gSklUVHlwZSB7IE5vbmUsIEhvc3RDYWxsVGh1bmssIEludGVy
cHJldGVyVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKLSAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gQmFzZWxpbmVKSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBKSVRU
eXBlIHRvcFRpZXJKSVQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gREZHSklUOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChK
SVRUeXBlIGppdFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaml0
VHlwZSwgaml0VHlwZSA9PSBCYXNlbGluZUpJVCB8fCBqaXRUeXBlID09IERGR0pJVCk7Ci0gICAg
ICAgICAgICByZXR1cm4gREZHSklUOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0
aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBERkdKSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBib29sIGlzQmFzZWxpbmVDb2RlKEpJVFR5cGUgaml0VHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGppdFR5cGUgPT0gSW50ZXJwcmV0ZXJUaHVuayB8fCBq
aXRUeXBlID09IEJhc2VsaW5lSklUOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIEVOQUJMRShK
SVQpIHx8IEVOQUJMRShMTElOVCkKLSAgICAgICAgSklUQ29kZSgpCi0gICAgICAgICAgICA6IG1f
aml0VHlwZShOb25lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBKSVRDb2RlKGNv
bnN0IENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCi0gICAgICAgICAgICA6IG1fcmVmKHJl
ZikKLSAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChqaXRUeXBlICE9IE5vbmUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBib29sIG9wZXJhdG9yICEoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
IW1fcmVmOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgPCBzaXplKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8
PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3Mg
YXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIGNvZGUuCi0gICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNl
dDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zm
c2V0IGluIGJ5dGVzIG9mICdwb2ludGVySW50b0NvZGUnIGludG8KLSAgICAgICAgLy8gdGhpcyBi
bG9jayBvZiBjb2RlLiAgVGhlIHBvaW50ZXIgcHJvdmlkZWQgbXVzdCBiZSBhIHBvaW50ZXIgaW50
byB0aGlzCi0gICAgICAgIC8vIGJsb2NrIG9mIGNvZGUuICBJdCBpcyBBU1NFUlRlZCB0aGF0IG5v
IGNvZGVibG9jayA+NGdiIGluIHNpemUuCi0gICAgICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQq
IHBvaW50ZXJJbnRvQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50cHRyX3QgcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJlc3VsdCkpID09IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJlc3VsdCk7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgSklUVHlwZSBib3R0b21U
aWVySklUKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlbGluZUpJVDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCisgICAgeworICAgICAgICByZXR1cm4g
REZHSklUOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRU
eXBlIGppdFR5cGUpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGppdFR5cGUsIGppdFR5
cGUgPT0gQmFzZWxpbmVKSVQgfHwgaml0VHlwZSA9PSBERkdKSVQpOworICAgICAgICByZXR1cm4g
REZHSklUOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklU
VHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGppdFR5cGUgPT0gREZHSklUOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0Jhc2VsaW5lQ29kZShKSVRUeXBlIGppdFR5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBJbnRlcnByZXRlclRodW5rIHx8
IGppdFR5cGUgPT0gQmFzZWxpbmVKSVQ7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIEpJ
VENvZGUoSklUVHlwZSBqaXRUeXBlKTsKKyAgICAKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5KSVRD
b2RlKCk7CisgICAgCisgICAgSklUVHlwZSBqaXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2ppdFR5cGU7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBv
aW50ZXJUeXBlPgorICAgIHN0YXRpYyBKSVRUeXBlIGppdFR5cGVGb3IoUG9pbnRlclR5cGUgaml0
Q29kZSkKKyAgICB7CisgICAgICAgIGlmICghaml0Q29kZSkKKyAgICAgICAgICAgIHJldHVybiBO
b25lOworICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
KiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKKyAgICB2b2lk
KiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQo
MCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNl
dCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9D
b2RlKSA9IDA7CisgICAgCisgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxsRnJhbWUq
LCBKU0dsb2JhbERhdGEqKTsKKyAgICAKKyAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRhdGFB
ZGRyZXNzQXRPZmZzZXQoMCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplKCkgPSAwOworICAg
IHZvaWQqIGVuZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihzdGFydCgpKSArIHNpemUoKSk7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgY29udGFpbnModm9pZCopID0gMDsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIC8v
IEV4ZWN1dGUgdGhlIGNvZGUhCi0gICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoSlNTdGFj
ayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNrLCBj
YWxsRnJhbWUsIDAsIDAsIGdsb2JhbERhdGEpKTsKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxE
YXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlmCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SklUQ29kZT4gaG9zdEZ1bmN0aW9uKENvZGVSZWYpOwogCi0g
ICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBjaGFyKiBwcmVmaXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Jl
Zi50cnlUb0Rpc2Fzc2VtYmxlKHByZWZpeCk7Ci0gICAgICAgIH0KLQotICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1faml0VHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhvc3QgZnVuY3Rp
b25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhl
eQotICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wg
Y29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1
bmN0aW9uKENvZGVSZWYgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENv
ZGUoY29kZSwgSG9zdENhbGxUaHVuayk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFy
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9yZWYufkNvZGVSZWYoKTsKLSAgICAgICAgICAg
IG5ldyAoTm90TnVsbCwgJm1fcmVmKSBDb2RlUmVmKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIEpJVENvZGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBl
eGVjdXRhYmxlTWVtb3J5LCBKSVRUeXBlIGppdFR5cGUpCi0gICAgICAgICAgICA6IG1fcmVmKGV4
ZWN1dGFibGVNZW1vcnkpCi0gICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlUmVmIG1fcmVmOwotICAgICAgICBKSVRUeXBl
IG1faml0VHlwZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCi0gICAg
fTsKK3ByaXZhdGU6CisgICAgSklUVHlwZSBtX2ppdFR5cGU7Cit9OworCitjbGFzcyBEaXJlY3RK
SVRDb2RlIDogcHVibGljIEpJVENvZGUgeworcHVibGljOgorICAgIERpcmVjdEpJVENvZGUoY29u
c3QgQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSk7CisgICAgfkRpcmVjdEpJVENvZGUoKTsK
KyAgICAKKyAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCk7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0
T2Zmc2V0KHNpemVfdCBvZmZzZXQpOworICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50
ZXJJbnRvQ29kZSk7CisgICAgc2l6ZV90IHNpemUoKTsKKyAgICBib29sIGNvbnRhaW5zKHZvaWQq
KTsKKworcHJpdmF0ZToKKyAgICBDb2RlUmVmIG1fcmVmOworfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24g
MTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBib29sIGppdENvbXBp
bGVJZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBj
b2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIApAQCAtNTAsNyArNTAsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0
ZShFeGVjCiAgICAgCiAgICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAgICAg
Ci0gICAgSklUQ29kZSBvbGRKSVRDb2RlID0gaml0Q29kZTsKKyAgICBSZWZQdHI8SklUQ29kZT4g
b2xkSklUQ29kZSA9IGppdENvZGU7CiAgICAgCiAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNl
OwogICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKQEAgLTc1LDcgKzc1LDcgQEAg
aW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlYwogICAgIHJldHVybiB0cnVl
OwogfQogCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNT
dGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2Rl
JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywg
SklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCitpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFw
cHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29k
ZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
aml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgCkBAIC04Nyw3
ICs4Nyw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAgICAK
ICAgICBjb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAKLSAgICBKSVRDb2Rl
IG9sZEpJVENvZGUgPSBqaXRDb2RlOworICAgIFJlZlB0cjxKSVRDb2RlPiBvbGRKSVRDb2RlID0g
aml0Q29kZTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgb2xkSklUQ29kZVdpdGhBcml0eUNo
ZWNrID0gaml0Q29kZVdpdGhBcml0eUNoZWNrOwogICAgIAogICAgIGJvb2wgZGZnQ29tcGlsZWQg
PSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZp
c2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE0MCw3ICsyMTQwLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5r
Rm9yKENhbGxGcmFtZSogY2FsbAogICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOwogCiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBl
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7Cisg
ICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5h
ZGRyZXNzRm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogICAgICAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb21waWxlRm9yKGNhbGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkgewpAQCAt
MjE1Miw3ICsyMTUyLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2Fs
bAogICAgICAgICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzKQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgp
OwogICAgIH0KIAogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpAQCAtMjIwMyw3
ICsyMjAzLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAg
ICAgICBzaG91bGRMaW5rID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChleGVjdXRh
YmxlLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JD
YWxsKCk7CiAgICAgICAgIGlmICghY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9u
KCkpIHsKICAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jayA9ICZqc0Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOwogICAgICAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oY2FsbGVlQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7CkBAIC0y
MjEyLDcgKzIyMTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtD
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNhbGxlZS0+aXNIb3N0
RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIGNvZGUgYmxvY2sgYmVmb3JlIGNvbXBp
bGF0aW9uLCBiZWNhdXNlIGNvbXBpbGF0aW9uIGNhbiBHQy4KICAgICAgICAgY2FsbEZyYW1lLT5z
ZXRDb2RlQmxvY2soMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzks
MTEgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogCiAgICAgaGFz
Q29kZUJsb2NrMS5saW5rKCZqaXQpOwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpB
ZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRP
ZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIG9rID0gaml0
LmJyYW5jaFRlc3RQdHIoSlNJbnRlcmZhY2VKSVQ6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMCk7CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBvay5saW5rKCZqaXQpOworI2VuZGlm
CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2Fz
ZS5saW5rKCZqaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50
cnlwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEVudHJ5cG9pbnRzLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw1
MyArMzcsNTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKLXZvaWQg
Z2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIGFyaXR5Q2hlY2spCit2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+
JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCiB7CiAgICAgaWYg
KCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7Ci0gICAgICAgICAgICBqaXRDb2RlID0gSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSks
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICAgICAgaml0Q29kZSA9IGFkb3B0
UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRD
b2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpOwogICAgICAgICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChr
aW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICBqaXRDb2RlID0gSklUQ29kZShNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgICAg
IGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwogICAgICAgICBhcml0eUNoZWNrID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAg
ICBqaXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxs
RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAg
ICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElT
dHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSk7CiAgICAgICAgIGFyaXR5Q2hlY2sgPSBnbG9iYWxEYXRhLmdldENUSVN0dWIo
ZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
LSAgICBqaXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7
CisgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGdsb2JhbERhdGEuZ2V0
Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSk7CiAgICAgYXJpdHlDaGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJ
U3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgp
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2RlJiBqaXRDb2RlKQordm9pZCBnZXRFdmFsRW50
cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29k
ZSkKIHsKICAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgaml0Q29k
ZSA9IEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICBq
aXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoSklUKSAg
ICAKLSAgICBqaXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZXZhbEVudHJ5
VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKKyAgICBqaXRDb2Rl
ID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGV2YWxF
bnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwogI2VuZGlm
CiB9CiAKLXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKSVRDb2RlJiBqaXRDb2RlKQordm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKIHsKICAgICBpZiAoIWds
b2JhbERhdGEuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgaml0Q29kZSA9IEpJVENvZGUoTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1
ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICBqaXRDb2RlID0gYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENv
ZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUg
PSBKSVRDb2RlKGdsb2JhbERhdGEuZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRv
ciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgIGppdENvZGUgPSBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtH
ZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7CiAjZW5kaWYKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCShy
ZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRy
eXBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTIgQEAKICNpZiBFTkFCTEUo
TExJTlQpCiAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAi
SklUQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEV2YWxDb2RlQmxvY2s7Ci1jbGFzcyBKSVRDb2RlOwogY2xhc3MgSlNHbG9iYWxEYXRh
OwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOwpAQCAtNDMsMTYgKzQ0LDE2IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVz
cGFjZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGFyaXR5Q2hlY2spOwotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0dsb2JhbERhdGEmLCBKSVRD
b2RlJik7Ci12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJVENvZGUm
KTsKK3ZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIFJlZlB0cjxKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJp
dHlDaGVjayk7Cit2b2lkIGdldEV2YWxFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIFJlZlB0cjxK
SVRDb2RlPiYpOwordm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERhdGEmLCBSZWZQ
dHI8SklUQ29kZT4mKTsKIAotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQoraW5saW5lIHZv
aWQgZ2V0RW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxDb2RlQmxvY2sq
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUpCiB7CiAgICAgZ2V0RXZhbEVudHJ5cG9pbnQoZ2xv
YmFsRGF0YSwgaml0Q29kZSk7CiB9CiAKLWlubGluZSB2b2lkIGdldEVudHJ5cG9pbnQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9ncmFtQ29kZUJsb2NrKiwgSklUQ29kZSYgaml0Q29kZSkK
K2lubGluZSB2b2lkIGdldEVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9n
cmFtQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQogewogICAgIGdldFByb2dy
YW1FbnRyeXBvaW50KGdsb2JhbERhdGEsIGppdENvZGUpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNDY0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODcsNyArMjg3LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQwogI2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
ICAgIAorICAgIAogICAgIENvZGVCbG9jazo6SklUQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0g
Y29kZUJsb2NrLT5qaXRDb21waWxlKGV4ZWMpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAg
Y2FzZSBDb2RlQmxvY2s6OkFscmVhZHlDb21waWxlZDoKQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0
aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTCiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08oMCwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAg
IExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3NBdE9mZnNldCgwKSwgZXhlYyk7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2Nr
LT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIGV4ZWMpOwogICAgIEFTU0VSVChr
aW5kID09IEFyaXR5Q2hlY2spOwogICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5nZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKS5leGVjdXRhYmxlQWRkcmVzcygpLCBleGVjKTsKIH0KQEAg
LTM4NCw3ICszODQsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBBU1NF
UlQobWFwcGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocGMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkp
KTsKICAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFi
bGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgQVNT
RVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwg
ZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCBKU09iamVj
dCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAjZW5kaWYKIAogI2lmIEVOQUJMRShK
SVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigq
bV9ldmFsQ29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2V2YWxDb2RlQmxvY2sp
ICsgbV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9ldmFsQ29kZUJsb2NrKSk7CiAjZW5k
aWYKQEAgLTMyOSw3ICszMjksNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSArIG1faml0
Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spICsgbV9qaXRDb2RlRm9yQ2FsbC0+
c2l6ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CiAjZW5kaWYKQEAgLTU0MCw3ICs1NDAs
NyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgp
KTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpt
X2NvZGVCbG9ja0ZvckNhbGwpICsgbV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsKICNlbHNlCiAg
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2Rl
QmxvY2tGb3JDYWxsKSk7CiAjZW5kaWYKQEAgLTU3Niw3ICs1NzYsNyBAQCBKU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LnNpemUoKSk7CisgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LT5zaXplKCkpOwogI2Vsc2UK
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywx
OSArMTE3LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckNv
ZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKik7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBK
SVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpCisgICAgICAgIFBhc3NSZWZQdHI8SklU
Q29kZT4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQobV9qaXRDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9y
Q2FsbDsKICAgICAgICAgfQogCi0gICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3JD
b25zdHJ1Y3QoKQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGdlbmVyYXRlZEpJVENvZGVG
b3JDb25zdHJ1Y3QoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9y
Q29uc3RydWN0KTsKICAgICAgICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+
IGdlbmVyYXRlZEpJVENvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsKQEAgLTE3NywxNCArMTc3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFzSklUQ29kZUZvckNvbnN0cnVj
dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENv
ZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICAgICAgfQotICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtMjE1LDI5ICsyMDcs
MjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UX0Nf
TE9PUCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGhvc3RDb2RlRW50cnlGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7Ci0gICAgICAgICAgICAjaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFk
ZHJlc3NGb3JDYWxsKCk7Ci0gICAgICAgICAgICAjZWxzZQorI2lmIEVOQUJMRShKSVQpCisgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwo
KTsKKyNlbHNlCiAgICAgICAgICAgICByZXR1cm4gTExJbnQ6OkNMb29wOjpob3N0Q29kZUVudHJ5
Rm9yKGtpbmQpOwotICAgICAgICAgICAgI2VuZGlmCisjZW5kaWYKICAgICAgICAgfQogCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqc0NvZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgICNpZiBFTkFCTEUoSklUKQotICAg
ICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRkcmVzc0ZvckNhbGwo
KTsKLSAgICAgICAgICAgICNlbHNlCisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworI2Vsc2UKICAg
ICAgICAgICAgIHJldHVybiBMTEludDo6Q0xvb3A6OmpzQ29kZUVudHJ5Rm9yKGtpbmQpOwotICAg
ICAgICAgICAgI2VuZGlmCisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBqc0NvZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKICAgICAgICAgewotICAgICAgICAgICAgI2lmIEVOQUJMRShKSVQpCisjaWYg
RU5BQkxFKEpJVCkKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5
Q2hlY2tGb3Ioa2luZCk7Ci0gICAgICAgICAgICAjZWxzZQorI2Vsc2UKICAgICAgICAgICAgIHJl
dHVybiBMTEludDo6Q0xvb3A6OmpzQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7Ci0g
ICAgICAgICAgICAjZW5kaWYKKyNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZv
aWQqIGNhdGNoUm91dGluZUZvcihIYW5kbGVySW5mbyogaGFuZGxlciwgSW5zdHJ1Y3Rpb24qIGNh
dGNoUENGb3JJbnRlcnByZXRlcikKQEAgLTI1Nyw4ICsyNDksOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIG1fbmV4dDsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAg
ICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ2FsbDsKLSAgICAgICAgSklUQ29kZSBtX2ppdENvZGVG
b3JDb25zdHJ1Y3Q7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDYWxsOwor
ICAgICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2s7CiAjZW5kaWYKQEAgLTI3NiwxMCArMjY4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAgICAgIGlmICgh
Y2FsbFRodW5rKSB7CiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4
ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlKCksIEpJ
VENvZGUoKSwgaW50cmluc2ljKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCAwLCAwLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihj
YWxsVGh1bmspLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBpbnRyaW5z
aWMpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIEpJVENvZGU6Omhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRDb2RlOjpob3N0RnVuY3Rp
b24oY29uc3RydWN0VGh1bmspLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KQEAgLTMyOCwxMyArMzIwLDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2RlIGNh
bGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgSW50cmluc2ljIGludHJpbnNpYykKKyAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NS
ZWZQdHI8SklUQ29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+IGNvbnN0cnVjdFRo
dW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuayA/IGNhbGxUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuayA/IGNvbnN0cnVjdFRodW5rLT5hZGRy
ZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDYWxsID0gY2FsbFRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0ID0gY29uc3RydWN0VGh1bms7Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSBjYWxsVGh1bmsuYWRkcmVzc0ZvckNhbGwoKTsKLSAgICAgICAgICAgIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gY29uc3RydWN0VGh1bmsuYWRkcmVzc0Zv
ckNhbGwoKTsKICAgICAgICAgICAgIG1faW50cmluc2ljID0gaW50cmluc2ljOwogICAgICAgICB9
CiAjZW5kaWYKQEAgLTQ1OSw3ICs0NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZSgpCisg
ICAgICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZSgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwogICAgICAgICB9
CkBAIC01MzEsNyArNTIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBj
aGVja1N5bnRheChFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIEpJVENv
ZGUmIGdlbmVyYXRlZEpJVENvZGUoKQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGdlbmVy
YXRlZEpJVENvZGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklU
Q29kZUZvckNhbGwoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0
YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0
Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
aW5saW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxD
b2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENv
ZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFC
TEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CkBA
IC01MSw3ICs1MSw3IEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXQK
ICAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRD
b2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwogfQogCi1pbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRl
KiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGpp
dENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK2lubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlv
bihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywg
UmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5U
KQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewo=
</data>
<flag name="commit-queue"
          id="217278"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195393</attachid>
            <date>2013-03-27 14:15:48 -0700</date>
            <delta_ts>2013-03-27 14:22:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57095</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxMy0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVENvZGUgc2hvdWxkIGFic3RyYWN0IGV4YWN0bHkgaG93IHRoZSBKSVQgY29kZSBpcyBzdHJ1
Y3R1cmVkIGFuZCB3aGVyZSBpdCB3YXMgYWxsb2NhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM0MzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEpJVENvZGUgaXMgbm93IGEgdmlydHVh
bCBiYXNlIGNsYXNzLCB3aGljaCB3aWxsIGFsbG93IGRpZmZlcmVudCBKSVRzIHRvIGhhdmUgcmFk
aWNhbGx5CisgICAgICAgIGRpZmZlcmVudCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVu
dCBjb252ZW50aW9ucyBpbiB0aGUgZnV0dXJlLiBJdCB3aWxsIGFsc28KKyAgICAgICAgbWFrZSBp
dCBlYXNpZXIgdG8gc3RvcmUgSklULXNwZWNpZmljIG1ldGEtZGF0YSBpbiBDb2RlQmxvY2sganVz
dCBieSBwdXR0aW5nIGl0IGludG8KKyAgICAgICAgYW4gYXBwcm9wcmlhdGUgSklUQ29kZSBzdWJj
bGFzcy4KKyAgICAgICAgCisgICAgICAgIEZvciBub3cgdGhlcmUgaXMgb25lIHN1YmNsYXNzLCBE
aXJlY3RKSVRDb2RlLCB3aGljaCBqdXN0IGJlaGF2ZXMgbGlrZSBKSVRDb2RlIHVzZWQgdG8KKyAg
ICAgICAgYmVoYXZlLgorCisgICAgICAgICogYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaDoKKyAg
ICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldFN0dWJJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4pOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmdldEpJVFR5cGUpOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2gpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVj
dXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6fkpJVENvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6aG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29k
ZTo6RGlyZWN0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6On5EaXJlY3RK
SVRDb2RlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwpOgor
ICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRpcmVjdEpJVENvZGU6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGlyZWN0
SklUQ29kZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OmNvbnRhaW5zKToK
KyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVENv
ZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dG9wVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVy
SklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6aXNCYXNlbGluZUNvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpq
aXRUeXBlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZUZvcik6CisgICAgICAgIChK
U0M6OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6
c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjplbmQpOgorICAgICAgICAoRGlyZWN0SklU
Q29kZSk6CisgICAgICAgICogaml0L0pJVERyaXZlci5oOgorICAgICAgICAoSlNDOjpqaXRDb21w
aWxlSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6Omxh
enlMaW5rRm9yKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9ncmFtRW50
cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVudHJ5cG9p
bnQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmVudHJ5T1NSKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmdlbmVyYXRlZEpJVENvZGVG
b3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Z2VuZXJhdGVkSklU
Q29kZUZvcik6CisgICAgICAgIChFeGVjdXRhYmxlQmFzZSk6CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVCYXNlOjpob3N0Q29kZUVudHJ5Rm9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJh
c2U6OmpzQ29kZUVudHJ5Rm9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmpzQ29k
ZVdpdGhBcml0eUNoZWNrRW50cnlGb3IpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpnZW5lcmF0ZWRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmdlbmVyYXRlZEpJVENvZGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9y
RXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToK
KwogMjAxMy0wMy0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEl0J3MgY2FsbGVkICJIYXNoIENvbnNpbmciIG5vdCAiSGFzaCBDb25zdGluZyIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZp
c2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBjbGFzcyBSZXBhdGNoQnVm
ZmVyIHsKIHB1YmxpYzoKICAgICBSZXBhdGNoQnVmZmVyKENvZGVCbG9jayogY29kZUJsb2NrKQog
ICAgIHsKLSAgICAgICAgSklUQ29kZSYgY29kZSA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOwot
ICAgICAgICBtX3N0YXJ0ID0gY29kZS5zdGFydCgpOwotICAgICAgICBtX3NpemUgPSBjb2RlLnNp
emUoKTsKKyAgICAgICAgUmVmUHRyPEpJVENvZGU+IGNvZGUgPSBjb2RlQmxvY2stPmdldEpJVENv
ZGUoKTsKKyAgICAgICAgbV9zdGFydCA9IGNvZGUtPnN0YXJ0KCk7CisgICAgICAgIG1fc2l6ZSA9
IGNvZGUtPnNpemUoKTsKIAogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFi
bGUobV9zdGFydCwgbV9zaXplKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
NDIsMTMgKzI0NDIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0
YwogICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3Rh
dGljX2Nhc3Q8aW50PihzdHViSW5mby5hY2Nlc3NUeXBlKSwgIikgaW4gIiwgKnRoaXMsICIuXG4i
KTsKICAgICAKICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKSB7Ci0gICAgICAg
IGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAg
aWYgKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCiAgICAgICAgICAgICBERkc6OmRm
Z1Jlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZv
KTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5
cGUpKTsKLSAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKQorICAgICAgICBpZiAoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKICAgICAg
ICAgICAgIERGRzo6ZGZnUmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAg
ICAgICAgZWxzZSAKICAgICAgICAgICAgIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQocmVwYXRjaEJ1
ZmZlciwgJnN0dWJJbmZvKTsKQEAgLTI3NTQsOCArMjc1NCw4IEBAIHVuc2lnbmVkIENvZGVCbG9j
azo6Ynl0ZWNvZGVPZmZzZXQoRXhlY1MKICAgICBpZiAoIWNhbGxJbmRpY2VzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIDE7CiAgICAgCi0gICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxl
TWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKLSAgICAgICAgdW5z
aWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpOworICAgIGlmIChnZXRKSVRDb2RlKCktPmNvbnRhaW5zKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpIHsKKyAgICAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJ
VENvZGUoKS0+b2Zmc2V0T2YocmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQqIHJlc3VsdCA9CiAgICAgICAgICAgICBiaW5hcnlT
ZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkPigKICAgICAg
ICAgICAgICAgICBjYWxsSW5kaWNlcywgY2FsbEluZGljZXMuc2l6ZSgpLCBjYWxsUmV0dXJuT2Zm
c2V0LCBnZXRDYWxsUmV0dXJuT2Zmc2V0KTsKQEAgLTI3NzcsMTIgKzI3NzcsMTIgQEAgYm9vbCBD
b2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4oUmV0dQogICAgIGlmICghaGFzQ29kZU9yaWdp
bnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFnZXRKSVRDb2RlKCkuZ2V0
RXhlY3V0YWJsZU1lbW9yeSgpLT5jb250YWlucyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSB7Cisg
ICAgaWYgKCFnZXRKSVRDb2RlKCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsK
ICAgICAgICAgY29kZU9yaWdpbiA9IGZpbmRDbG9zdXJlQ2FsbEZvclJldHVyblBDKHJldHVybkFk
ZHJlc3MpLT5jb2RlT3JpZ2luKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
LSAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCktPm9mZnNldE9m
KHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNl
dCogZW50cnkgPQogICAgICAgICB0cnlCaW5hcnlTZWFyY2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVy
bk9mZnNldCwgdW5zaWduZWQ+KAogICAgICAgICAgICAgY29kZU9yaWdpbnMoKSwgY29kZU9yaWdp
bnMoKS5zaXplKCksIG9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00MjEsMjEgKzQyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW50IGFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsK
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2Rl
JiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgICAg
ICB2b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2pp
dENvZGUgPSBjb2RlOwogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2Rl
V2l0aEFyaXR5Q2hlY2s7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICBpZiAobV9q
aXRDb2RlLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgICAgIGlmIChK
SVRDb2RlOjpqaXRUeXBlRm9yKG1faml0Q29kZSkgPT0gSklUQ29kZTo6REZHSklUKSB7CiAgICAg
ICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAgICAg
bV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7CiAgICAg
ICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2Rl
KCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2V0
SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2s7IH0KLSAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQotICAgICAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVNZW1vcnkoKTsgfQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSBj
b25zdCB7IHJldHVybiBKSVRDb2RlOjpqaXRUeXBlRm9yKG1faml0Q29kZSk7IH0KICAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKSA9IDA7CiAgICAgICAgIGVudW0gSklUQ29tcGlsYXRpb25SZXN1bHQgeyBBbHJlYWR5Q29t
cGlsZWQsIENvdWxkTm90Q29tcGlsZSwgQ29tcGlsZWRTdWNjZXNzZnVsbHkgfTsKQEAgLTExNzEs
NyArMTE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1
YkluZm8+IG1fc3RydWN0dXJlU3R1YkluZm9zOwogICAgICAgICBWZWN0b3I8QnlWYWxJbmZvPiBt
X2J5VmFsSW5mb3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZv
czsKLSAgICAgICAgSklUQ29kZSBtX2ppdENvZGU7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBt
X2ppdENvZGU7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJp
dHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ2
NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiB9
CiAKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9Owot
aW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCkKK2lubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAgICAgCkBAIC0xNjksMTIgKzE2
OSwxMiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Citib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
UmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAw
LCBieXRlY29kZUluZGV4KTsKIH0KIAotYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCitib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IHJldHVybiBjb21waWxlKENvbXBpbGVGdW5jdGlvbiwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2Rl
LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrLCBieXRlY29kZUluZGV4KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEg
KzQxLDExIEBAIG5hbWVzcGFjZSBERkcgewogSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0
TnVtQ29tcGlsYXRpb25zKCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLWJvb2wgdHJ5Q29tcGls
ZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7Ci1ib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRD
b2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9j
ayosIFJlZlB0cjxKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworYm9vbCB0cnlD
b21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+Jiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgSklUQ29kZSYsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5l
IGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KK2lu
bGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENv
ZGU+JiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCB0cnlDb21waWxl
RnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAs
NyArMjQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
IGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogfQogCi1i
b29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5KQorYm9vbCBKSVRDb21waWxl
cjo6Y29tcGlsZShSZWZQdHI8SklUQ29kZT4mIGVudHJ5KQogewogICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja2VuZCIpOwogCkBAIC0yNzEsMTMgKzI3MSwxMyBAQCBi
b29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5CiAgICAgaWYgKG1fZ3JhcGgu
bV9jb21waWxhdGlvbikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIo
bV9ncmFwaC5tX2NvbXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsKIAotICAgIGVudHJ5ID0g
SklUQ29kZSgKKyAgICBlbnRyeSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAogICAgICAg
ICBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLAotICAgICAgICBK
SVRDb2RlOjpERkdKSVQpOworICAgICAgICBKSVRDb2RlOjpERkdKSVQpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZGUmIGVu
dHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCitib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpJVENvZGU+JiBlbnRyeSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKQogewogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja2VuZCIpOwogICAgIApAQCAtMzY1LDkgKzM2NSw5
IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9ncmFwaC5tX2NvbXBpbGF0aW9uLmdldCgp
LCBsaW5rQnVmZmVyKTsKIAogICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0gICAgZW50cnkgPSBKSVRDb2RlKAorICAgIGVudHJ5ID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoCiAgICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCksCi0gICAgICAgIEpJVENvZGU6OkRGR0pJVCk7CisgICAg
ICAgIEpJVENvZGU6OkRGR0pJVCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNDY0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NSw4ICsyNDUsOCBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2Fs
bEhlbHBlcnMgCiBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXIoR3JhcGgmIGRmZyk7CiAgICAgCi0g
ICAgYm9vbCBjb21waWxlKEpJVENvZGUmIGVudHJ5KTsKLSAgICBib29sIGNvbXBpbGVGdW5jdGlv
bihKSVRDb2RlJiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNo
ZWNrKTsKKyAgICBib29sIGNvbXBpbGUoUmVmUHRyPEpJVENvZGU+JiBlbnRyeSk7CisgICAgYm9v
bCBjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKTsKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJv
cGVydGllcy4KICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTQ2NDIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgCiAgICAgLy8gNSkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlv
biBtYWNoaW5lIGNvZGUgYWRkcmVzcy4KICAgICAKLSAgICB2b2lkKiByZXN1bHQgPSBjb2RlQmxv
Y2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KGVudHJ5LT5tX21hY2hp
bmVDb2RlT2Zmc2V0KTsKKyAgICB2b2lkKiByZXN1bHQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUo
KS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChlbnRyeS0+bV9tYWNoaW5lQ29kZU9mZnNldCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICBkYXRhTG9nRigiICAgIE9T
UiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCByZXN1bHQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNDY0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wIE9TUkV4aXQ6OmdldFBh
dGNoYWIKIAogQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNo
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrKSBjb25zdAogewotICAgIHJldHVybiBDb2RlTG9jYXRp
b25KdW1wKGRmZ0NvZGVCbG9jay0+Z2V0SklUQ29kZSgpLmRhdGFBZGRyZXNzQXRPZmZzZXQobV9w
YXRjaGFibGVDb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoZGZnQ29k
ZUJsb2NrLT5nZXRKSVRDb2RlKCktPmRhdGFBZGRyZXNzQXRPZmZzZXQobV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KSk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgICAgICBBU1NFUlQobWFwcGluZy0+
bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRD
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9t
YWNoaW5lQ29kZU9mZnNldCk7CiAKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwogICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC03
NTcsNyArNzU3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIEFTU0VSVChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4
ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgdm9pZCoganVt
cFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAgICAgQVNT
RVJUKEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyICYmIEdQ
UkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCw3ICs2MTAsNyBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIEFTU0VS
VChtYXBwaW5nKTsKICAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBy
ZXR1cm5CeXRlY29kZUluZGV4KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIHZvaWQq
IGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLT5l
eGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwog
CiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewpAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBBU1NFUlQobWFwcGluZyk7
CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVD
b2RlQmxvY2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmct
Pm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNv
ZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmct
Pm1fbWFjaGluZUNvZGVPZmZzZXQpOwogICAgIAogICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAh
PSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE0NjQyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwODksNyArMTA4OSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGwKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkp
Ci0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29w
ZSgpLCBraW5kKTsKQEAgLTExMDEsNyArMTEwMSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkKICAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihr
aW5kKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAg
ICB9CiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogICAgIGlmICghY2FsbExp
bmtJbmZvLnNlZW5PbmNlKCkpCkBAIC0xMTY2LDcgKzExNjYsNyBAQCBzdGF0aWMgYm9vbCBhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdl
bmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrOwogICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDcgKzk4NCw3IEBA
IGZhaWxlZEpTT05QOgogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgIHJlc3VsdCA9
IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEp
OworICAgICAgICByZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUo
Jm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAgICAgfQogCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpl
eGVjdXRlQ2FsbChDYWxsRnJhCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAg
IHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCktPmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmds
b2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUpKTsKQEAgLTExMzEsNyArMTEzMSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAg
ICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUs
ICZnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCktPmV4ZWN1dGUo
Jm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CkBAIC0xMjI2
LDcgKzEyMjYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAj
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpl
eGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9s
b2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNr
LCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBj
bG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+ZXhl
Y3V0ZSgmbV9zdGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogICAgIH0KIApAQCAtMTMyMiw3ICsxMzIyLDcgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogI2lmIEVOQUJMRShMTElOVF9DX0xPT1Ap
CiAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxs
aW50X2V2YWxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0g
ZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwg
Jmdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2RlKCkt
PmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxNyw3ICs2MTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVy
dHlTdHViQ29tcGlsYXRpCiAgICAgfQogfQogCi1KSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKK1Bhc3NSZWZQdHI8SklUQ29kZT4gSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBm
dW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJDb21waWxpbmcgSklUIGNv
ZGUhXG4iKTsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gSklUQ29kZSgpOworICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxKSVRDb2RlPigpOwogCiAgICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZzZXRzIGlu
dG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJsZXMuCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kpIHsKQEAg
LTg1NCw3ICs4NTQsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJuIEpJ
VENvZGUocmVzdWx0LCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKIH0KIAog
dm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDE0NjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwMiw3ICszMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgSklUQ29kZSBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwg
Q29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKSVRDb2RlPiBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQ29kZVB0ciogZnVu
Y3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
SklUKGdsb2JhbERhdGEsIGNvZGVCbG9jaykucHJpdmF0ZUNvbXBpbGUoZnVuY3Rpb25FbnRyeUFy
aXR5Q2hlY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KQEAgLTQwNyw3ICs0MDcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCk7Ci0gICAgICAgIEpJVENvZGUgcHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciog
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAg
UGFzc1JlZlB0cjxKSVRDb2RlPiBwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGxMaW5rSW5mbyosIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cik7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw3NiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKIAorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7CisK
K0pJVENvZGU6OkpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5
cGUpCit7Cit9CisKK0pJVENvZGU6On5KSVRDb2RlKCkKK3sKK30KKworSlNWYWx1ZSBKSVRDb2Rl
OjpleGVjdXRlKEpTU3RhY2sqIHN0YWNrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGN0aVRyYW1wb2xpbmUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgc3RhY2ssIGNhbGxGcmFtZSwgMCwg
MCwgZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051
bGwoKSA6IHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVu
Y3Rpb24oSklUQ29kZTo6Q29kZVJlZiBjb2RlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RGlyZWN0SklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7Cit9CisKK0RpcmVjdEpJVENvZGU6
OkRpcmVjdEpJVENvZGUoY29uc3QgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlw
ZSkKKyAgICA6IEpJVENvZGUoaml0VHlwZSkKKyAgICAsIG1fcmVmKHJlZikKK3sKK30KKworRGly
ZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQoreworfQorCitKSVRDb2RlOjpDb2RlUHRyIERp
cmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKK3sKKyAgICByZXR1cm4gbV9yZWYuY29kZSgp
OworfQorCit2b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCBvZmZzZXQpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVm
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKK30KKwordm9pZCogRGlyZWN0
SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQoreworICAgIEFTU0VS
VChvZmZzZXQgPD0gc2l6ZSgpKTsgLy8gdXNlIDw9IGluc3RlYWQgb2YgPCBiZWNhdXNlIGl0IGlz
IHZhbGlkIHRvIGFzayBmb3IgYW4gYWRkcmVzcyBhdCB0aGUgZXhjbHVzaXZlIGVuZCBvZiB0aGUg
Y29kZS4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9yZWYuY29kZSgpLmRh
dGFMb2NhdGlvbigpKSArIG9mZnNldDsKK30KKwordW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zm
c2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQoreworICAgIGludHB0cl90IHJlc3VsdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9j
YXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkg
PT0gcmVzdWx0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7Cit9
CisKK3NpemVfdCBEaXJlY3RKSVRDb2RlOjpzaXplKCkKK3sKKyAgICByZXR1cm4gbV9yZWYuc2l6
ZSgpOworfQorCitib29sIERpcmVjdEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCit7
CisgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCiBuYW1lc3BhY2UgV1RGIHsKIAogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6SklUQ29kZTo6SklUVHlwZSB0eXBlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE0NjQyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOCwxNTUgKzM4LDk3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShK
SVQpCi0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTU3RhY2s7CitjbGFzcyBK
U0dsb2JhbERhdGE7CitjbGFzcyBKU1N0YWNrOwogI2VuZGlmCisKK2NsYXNzIEpJVENvZGUgOiBw
dWJsaWMgUmVmQ291bnRlZDxKSVRDb2RlPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBDb2RlUHRyOworCisgICAgZW51bSBKSVRUeXBlIHsgTm9uZSwgSG9zdENhbGxUaHVuaywgSW50
ZXJwcmV0ZXJUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCB9OwogICAgIAotICAgIGNsYXNzIEpJ
VENvZGUgewotI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKLSAgICAgICAgdHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKLSAgICAgICAgdHlwZWRlZiBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKLSNlbHNlCi0gICAgICAgIEpJVENvZGUoKSB7IH0KLSNl
bmRpZgotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBKSVRUeXBlIHsgTm9uZSwgSG9zdENhbGxU
aHVuaywgSW50ZXJwcmV0ZXJUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCB9OwotICAgICAgICAK
LSAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBCYXNlbGluZUpJVDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBERkdKSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBKSVRUeXBlIG5l
eHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChqaXRUeXBlLCBqaXRUeXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZH
SklUKTsKLSAgICAgICAgICAgIHJldHVybiBERkdKSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBqaXRUeXBlID09IERGR0pJVDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgaXNCYXNlbGluZUNvZGUoSklUVHlwZSBqaXRU
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBJbnRlcnByZXRl
clRodW5rIHx8IGppdFR5cGUgPT0gQmFzZWxpbmVKSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0j
aWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQotICAgICAgICBKSVRDb2RlKCkKLSAgICAg
ICAgICAgIDogbV9qaXRUeXBlKE5vbmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IEpJVENvZGUoY29uc3QgQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKLSAgICAgICAgICAg
IDogbV9yZWYocmVmKQotICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGppdFR5cGUgIT0gTm9uZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgb3BlcmF0b3IgISgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAhbV9yZWY7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlUHRyIGFkZHJlc3NG
b3JDYWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA8IHNp
emUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9yZWYu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpICsgb2Zmc2V0OwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KDApOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZz
ZXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgPD0gc2l6ZSgp
KTsgLy8gdXNlIDw9IGluc3RlYWQgb2YgPCBiZWNhdXNlIGl0IGlzIHZhbGlkIHRvIGFzayBmb3Ig
YW4gYWRkcmVzcyBhdCB0aGUgZXhjbHVzaXZlIGVuZCBvZiB0aGUgY29kZS4KLSAgICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZGF0YUxvY2F0aW9u
KCkpICsgb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1
cm5zIHRoZSBvZmZzZXQgaW4gYnl0ZXMgb2YgJ3BvaW50ZXJJbnRvQ29kZScgaW50bwotICAgICAg
ICAvLyB0aGlzIGJsb2NrIG9mIGNvZGUuICBUaGUgcG9pbnRlciBwcm92aWRlZCBtdXN0IGJlIGEg
cG9pbnRlciBpbnRvIHRoaXMKLSAgICAgICAgLy8gYmxvY2sgb2YgY29kZS4gIEl0IGlzIEFTU0VS
VGVkIHRoYXQgbm8gY29kZWJsb2NrID40Z2IgaW4gc2l6ZS4KLSAgICAgICAgdW5zaWduZWQgb2Zm
c2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnRw
dHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUp
IC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBKSVRU
eXBlIGJvdHRvbVRpZXJKSVQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VsaW5lSklUOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBERkdKSVQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKSVRUeXBlIG5leHRU
aWVySklUKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaml0
VHlwZSwgaml0VHlwZSA9PSBCYXNlbGluZUpJVCB8fCBqaXRUeXBlID09IERGR0pJVCk7CisgICAg
ICAgIHJldHVybiBERkdKSVQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzT3B0aW1p
emluZ0pJVChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9
PSBERkdKSVQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzQmFzZWxpbmVDb2RlKEpJ
VFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEludGVycHJl
dGVyVGh1bmsgfHwgaml0VHlwZSA9PSBCYXNlbGluZUpJVDsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSklUQ29kZShKSVRUeXBlKTsKKyAgICAKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5K
SVRDb2RlKCk7CisgICAgCisgICAgSklUVHlwZSBqaXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ppdFR5cGU7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFBvaW50ZXJUeXBlPgorICAgIHN0YXRpYyBKSVRUeXBlIGppdFR5cGVGb3IoUG9pbnRlclR5cGUg
aml0Q29kZSkKKyAgICB7CisgICAgICAgIGlmICghaml0Q29kZSkKKyAgICAgICAgICAgIHJldHVy
biBOb25lOworICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKKyAgICB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZz
ZXQoMCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9pbnRlcklu
dG9Db2RlKSA9IDA7CisgICAgCisgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxsRnJh
bWUqLCBKU0dsb2JhbERhdGEqKTsKKyAgICAKKyAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRh
dGFBZGRyZXNzQXRPZmZzZXQoMCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplKCkgPSAwOwor
ICAgIHZvaWQqIGVuZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCgpKSArIHNpemUoKSk7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnModm9pZCopID0gMDsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IC8vIEV4ZWN1dGUgdGhlIGNvZGUhCi0gICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoSlNT
dGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNr
LCBjYWxsRnJhbWUsIDAsIDAsIGdsb2JhbERhdGEpKTsKLSAgICAgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlm
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SklUQ29kZT4gaG9zdEZ1bmN0aW9uKENvZGVSZWYpOwog
Ci0gICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNp
emVfdCBzaXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXpl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShj
b25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X3JlZi50cnlUb0Rpc2Fzc2VtYmxlKHByZWZpeCk7Ci0gICAgICAgIH0KLQotICAgICAgICBFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1faml0VHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhvc3QgZnVu
Y3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQg
dGhleQotICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBv
b2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9z
dEZ1bmN0aW9uKENvZGVSZWYgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJ
VENvZGUoY29kZSwgSG9zdENhbGxUaHVuayk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNs
ZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9yZWYufkNvZGVSZWYoKTsKLSAgICAgICAg
ICAgIG5ldyAoTm90TnVsbCwgJm1fcmVmKSBDb2RlUmVmKCk7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIEpJVENvZGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlTWVtb3J5LCBKSVRUeXBlIGppdFR5cGUpCi0gICAgICAgICAgICA6IG1fcmVm
KGV4ZWN1dGFibGVNZW1vcnkpCi0gICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlUmVmIG1fcmVmOwotICAgICAgICBKSVRU
eXBlIG1faml0VHlwZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCi0g
ICAgfTsKK3ByaXZhdGU6CisgICAgSklUVHlwZSBtX2ppdFR5cGU7Cit9OworCitjbGFzcyBEaXJl
Y3RKSVRDb2RlIDogcHVibGljIEpJVENvZGUgeworcHVibGljOgorICAgIERpcmVjdEpJVENvZGUo
Y29uc3QgQ29kZVJlZiwgSklUVHlwZSk7CisgICAgfkRpcmVjdEpJVENvZGUoKTsKKyAgICAKKyAg
ICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NB
dE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCBvZmZzZXQpOworICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29k
ZSk7CisgICAgc2l6ZV90IHNpemUoKTsKKyAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKKworcHJp
dmF0ZToKKyAgICBDb2RlUmVmIG1fcmVmOworfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTQ2NDIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRD
b2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJv
cHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxvY2ss
IFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIApAQCAt
NTAsNyArNTAsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjCiAg
ICAgCiAgICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAgICAgCi0gICAgSklU
Q29kZSBvbGRKSVRDb2RlID0gaml0Q29kZTsKKyAgICBSZWZQdHI8SklUQ29kZT4gb2xkSklUQ29k
ZSA9IGppdENvZGU7CiAgICAgCiAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwogICAgIGlm
IChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1p
bmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhl
YywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCitpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRl
KEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBS
ZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdp
dGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgCkBAIC04Nyw3ICs4Nyw3IEBA
IGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAgICAKICAgICBjb2Rl
QmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAKLSAgICBKSVRDb2RlIG9sZEpJVENv
ZGUgPSBqaXRDb2RlOworICAgIFJlZlB0cjxKSVRDb2RlPiBvbGRKSVRDb2RlID0gaml0Q29kZTsK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgb2xkSklUQ29kZVdpdGhBcml0eUNoZWNrID0gaml0
Q29kZVdpdGhBcml0eUNoZWNrOwogICAgIAogICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNDY0
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE0MCw3ICsyMTQwLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxG
cmFtZSogY2FsbAogICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOwogCiAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgIGNv
ZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9y
Q2FsbCgpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
OwogICAgICAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21w
aWxlRm9yKGNhbGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkgewpAQCAtMjE1Miw3ICsy
MTUyLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgICAg
ICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJh
cmdzKQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIH0K
IAogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpAQCAtMjIwMyw3ICsyMjAzLDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAgICAgICBzaG91
bGRMaW5rID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5oYXNK
SVRDb2RlRm9yQ2FsbCgpKTsKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CiAg
ICAgICAgIGlmICghY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAg
ICAgICAgICAgIGNhbGxlZUNvZGVCbG9jayA9ICZqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOwogICAgICAgICAgICAgaWYg
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY2FsbGVlQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7CkBAIC0yMjEyLDcgKzIy
MTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNhbGxlZS0+aXNIb3N0RnVuY3Rpb24o
KSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIGNvZGUgYmxvY2sgYmVmb3JlIGNvbXBpbGF0aW9uLCBi
ZWNhdXNlIGNvbXBpbGF0aW9uIGNhbiBHQy4KICAgICAgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxv
Y2soMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksMTEgQEAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogCiAgICAgaGFzQ29kZUJsb2Nr
MS5saW5rKCZqaXQpOwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpT
SW50ZXJmYWNlSklUOjpyZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkpJVENvZGVX
aXRoQXJpdHlDaGVja0ZvcihraW5kKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIG9rID0gaml0LmJyYW5jaFRl
c3RQdHIoSlNJbnRlcmZhY2VKSVQ6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Cisg
ICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBvay5saW5rKCZqaXQpOworI2VuZGlmCiAgICAgaml0
Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZq
aXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5
cG9pbnRzLmNwcAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RW50cnlwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw1MyArMzcsNTMg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rp
b25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5
Q2hlY2spCit2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCiB7CiAgICAgaWYgKCFnbG9iYWxE
YXRhLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0g
ICAgICAgICAgICBqaXRDb2RlID0gSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspOworICAgICAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
aykpOwogICAgICAgICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICBqaXRDb2RlID0gSklUQ29kZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgICAgIGppdENvZGUg
PSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwogICAgICAgICBhcml0eUNoZWNrID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eV9jaGVjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAjaWYgRU5B
QkxFKEpJVCkKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBqaXRDb2Rl
ID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVu
a0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICBqaXRDb2Rl
ID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0
aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSk7CiAgICAgICAgIGFyaXR5Q2hlY2sgPSBnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBqaXRD
b2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RF
bnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgaml0
Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGdsb2JhbERhdGEuZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSk7CiAgICAgYXJpdHlDaGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihmdW5j
dGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKSVRDb2RlJiBqaXRDb2RlKQordm9pZCBnZXRFdmFsRW50cnlwb2ludChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKIHsKICAg
ICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgaml0Q29kZSA9IEpJVENv
ZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9w
cm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICBqaXRDb2RlID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVM
TEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBq
aXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5l
cmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKKyAgICBqaXRDb2RlID0gYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5r
R2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwogI2VuZGlmCiB9CiAKLXZv
aWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2Rl
JiBqaXRDb2RlKQordm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKIHsKICAgICBpZiAoIWdsb2JhbERhdGEu
Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgaml0Q29kZSA9IEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBKSVRDb2Rl
KGdsb2JhbERhdGEuZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspOworICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0
SklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3Ip
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCShyZXZpc2lvbiAx
NDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTIgQEAKICNpZiBFTkFCTEUoTExJTlQpCiAK
ICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiSklUQ29kZS5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV2
YWxDb2RlQmxvY2s7Ci1jbGFzcyBKSVRDb2RlOwogY2xhc3MgSlNHbG9iYWxEYXRhOwogY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwpAQCAt
NDMsMTYgKzQ0LDE2IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVzcGFjZSBMTElu
dCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQsIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hl
Y2spOwotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0dsb2JhbERhdGEmLCBKSVRDb2RlJik7Ci12
b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJVENvZGUmKTsKK3ZvaWQg
Z2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIFJlZlB0cjxKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjayk7
Cit2b2lkIGdldEV2YWxFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIFJlZlB0cjxKSVRDb2RlPiYp
Owordm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERhdGEmLCBSZWZQdHI8SklUQ29k
ZT4mKTsKIAotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQoraW5saW5lIHZvaWQgZ2V0RW50
cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxDb2RlQmxvY2sqLCBSZWZQdHI8
SklUQ29kZT4mIGppdENvZGUpCiB7CiAgICAgZ2V0RXZhbEVudHJ5cG9pbnQoZ2xvYmFsRGF0YSwg
aml0Q29kZSk7CiB9CiAKLWlubGluZSB2b2lkIGdldEVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9ncmFtQ29kZUJsb2NrKiwgSklUQ29kZSYgaml0Q29kZSkKK2lubGluZSB2
b2lkIGdldEVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9ncmFtQ29kZUJs
b2NrKiwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQogewogICAgIGdldFByb2dyYW1FbnRyeXBv
aW50KGdsb2JhbERhdGEsIGppdENvZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODcsNyArMjg3LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoQwogI2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgICAgIAorICAg
IAogICAgIENvZGVCbG9jazo6SklUQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJsb2Nr
LT5qaXRDb21waWxlKGV4ZWMpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb2Rl
QmxvY2s6OkFscmVhZHlDb21waWxlZDoKQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwg
ZXhlYyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5UX1JF
VFVSTl9UV08oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dCgwKSwgZXhlYyk7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5nZXRKSVRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIGV4ZWMpOwogICAgIEFTU0VSVChraW5kID09IEFy
aXR5Q2hlY2spOwogICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5nZXRKSVRDb2RlV2l0
aEFyaXR5Q2hlY2soKS5leGVjdXRhYmxlQWRkcmVzcygpLCBleGVjKTsKIH0KQEAgLTM4NCw3ICsz
ODQsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBBU1NFUlQobWFwcGlu
Zyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocGMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpKTsKICAgICAK
LSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICB2b2lk
KiBqdW1wVGFyZ2V0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgQVNTRVJUKGp1bXBU
YXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCBKU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0gICAg
SGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9ldmFsQ29k
ZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMp
LT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2V2YWxDb2RlQmxvY2spICsgbV9qaXRD
b2RlRm9yQ2FsbC0+c2l6ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9ldmFsQ29kZUJsb2NrKSk7CiAjZW5kaWYKQEAgLTMy
OSw3ICszMjksNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSArIG1faml0Q29kZUZvckNh
bGwuc2l6ZSgpKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxvY2spICsgbV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsK
ICNlbHNlCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVv
ZigqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CiAjZW5kaWYKQEAgLTU0MCw3ICs1NDAsNyBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVv
ZigqbV9jb2RlQmxvY2tGb3JDYWxsKSArIG1faml0Q29kZUZvckNhbGwuc2l6ZSgpKTsKKyAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9j
a0ZvckNhbGwpICsgbV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsKICNlbHNlCiAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JD
YWxsKSk7CiAjZW5kaWYKQEAgLTU3Niw3ICs1NzYsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6
aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LnNpemUoKSk7CisgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpICsgbV9qaXRDb2RlRm9yQ29uc3RydWN0LT5zaXplKCkpOwogI2Vsc2UKICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNDY0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxOSArMTE3LDE5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckNvZGVWaXJ0dWFs
KEV4ZWN1dGFibGVCYXNlKik7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKSVRDb2RlJiBn
ZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpCisgICAgICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9q
aXRDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbDsKICAg
ICAgICAgfQogCi0gICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1
Y3QoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0
KTsKICAgICAgICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGdlbmVyYXRl
ZEpJVENvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsKQEAgLTE3NywxNCArMTc3LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFzSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgICAgIEFTU0VSVChr
aW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtMjE1LDI5ICsyMDcsMjkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGhvc3RDb2RlRW50cnlGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogICAgICAgICB7Ci0gICAgICAgICAgICAjaWYgRU5BQkxFKEpJVCkK
LSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JD
YWxsKCk7Ci0gICAgICAgICAgICAjZWxzZQorI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyNlbHNl
CiAgICAgICAgICAgICByZXR1cm4gTExJbnQ6OkNMb29wOjpob3N0Q29kZUVudHJ5Rm9yKGtpbmQp
OwotICAgICAgICAgICAgI2VuZGlmCisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBqc0NvZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRkcmVzc0ZvckNhbGwoKTsKLSAgICAg
ICAgICAgICNlbHNlCisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworI2Vsc2UKICAgICAgICAgICAg
IHJldHVybiBMTEludDo6Q0xvb3A6OmpzQ29kZUVudHJ5Rm9yKGtpbmQpOwotICAgICAgICAgICAg
I2VuZGlmCisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBqc0NvZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICAgICAgewotICAgICAgICAgICAgI2lmIEVOQUJMRShKSVQpCisjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
a2luZCk7Ci0gICAgICAgICAgICAjZWxzZQorI2Vsc2UKICAgICAgICAgICAgIHJldHVybiBMTElu
dDo6Q0xvb3A6OmpzQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7Ci0gICAgICAgICAg
ICAjZW5kaWYKKyNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQqIGNhdGNo
Um91dGluZUZvcihIYW5kbGVySW5mbyogaGFuZGxlciwgSW5zdHJ1Y3Rpb24qIGNhdGNoUENGb3JJ
bnRlcnByZXRlcikKQEAgLTI1Nyw4ICsyNDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
RXhlY3V0YWJsZUJhc2UqIG1fbmV4dDsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIEpJVENv
ZGUgbV9qaXRDb2RlRm9yQ2FsbDsKLSAgICAgICAgSklUQ29kZSBtX2ppdENvZGVGb3JDb25zdHJ1
Y3Q7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDYWxsOworICAgICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiAj
ZW5kaWYKQEAgLTI3NiwxMCArMjY4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5r
KSB7CiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUo
Z2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgICAgICBleGVj
dXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlKCksIEpJVENvZGUoKSwg
aW50cmluc2ljKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhLCAwLCAwLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZl
RXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRh
LCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmsp
LCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBpbnRyaW5zaWMpOworICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJVENv
ZGU6Omhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRDb2RlOjpob3N0RnVuY3Rpb24oY29uc3Ry
dWN0VGh1bmspLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGV4ZWN1dGFibGU7CiAgICAgICAgIH0KQEAgLTMyOCwxMyArMzIwLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2RlIGNhbGxUaHVuaywg
SklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgSW50cmluc2ljIGludHJpbnNpYykKKyAgICAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8SklU
Q29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+IGNvbnN0cnVjdFRodW5rLCBJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjayA9IGNhbGxUaHVuayA/IGNhbGxUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuayA/IGNvbnN0cnVjdFRodW5rLT5hZGRyZXNzRm9yQ2Fs
bCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JD
YWxsID0gY2FsbFRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gY29u
c3RydWN0VGh1bms7Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sg
PSBjYWxsVGh1bmsuYWRkcmVzc0ZvckNhbGwoKTsKLSAgICAgICAgICAgIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrID0gY29uc3RydWN0VGh1bmsuYWRkcmVzc0ZvckNhbGwoKTsK
ICAgICAgICAgICAgIG1faW50cmluc2ljID0gaW50cmluc2ljOwogICAgICAgICB9CiAjZW5kaWYK
QEAgLTQ1OSw3ICs0NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZSgpCisgICAgICAgIFBh
c3NSZWZQdHI8SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwogICAgICAgICB9CkBAIC01MzEs
NyArNTIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjaGVja1N5bnRh
eChFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIEpJVENvZGUmIGdlbmVy
YXRlZEpJVENvZGUoKQorICAgICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGdlbmVyYXRlZEpJVENv
ZGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNh
bGwoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0aW9uSGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTQ2NDIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KLWlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVj
LCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoraW5saW5lIGJv
b2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tU
eXBlPiYgY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoTExJTlQp
CiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CkBAIC01MSw3ICs1
MSw3IEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXQKICAgICByZXR1
cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogCi1p
bmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBP
d25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK2lubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgUmVmUHRyPEpJ
VENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlD
aGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlm
IChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewo=
</data>
<flag name="review"
          id="217279"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>