<?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>143809</bug_id>
          
          <creation_ts>2015-04-15 19:05:22 -0700</creation_ts>
          <short_desc>Add $vm debugging tool.</short_desc>
          <delta_ts>2015-04-17 14:24:28 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085793</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-15 19:05:22 -0700</bug_when>
    <thetext>For debugging VM bugs, it would be useful to be able to dump VM data structures from JS code that we instrument.  To this end, let&apos;s introduce a JS_enableDollarVM option that, if true, installs an $vm property into each JS global object at creation time.  The $vm property refers to an object that provides a collection of useful utility functions.  For this initial implementation, $vm will have the following:

    dfgTrue() - returns true if the current function is DFG compiled, else returns false.
    jitTrue() - returns true if the current function is compiled by the baseline JIT, else returns false.
    llintTrue() - returns true if the current function is interpreted by the LLINT, else returns false.

    gc() - runs a full GC and sweep all dead objects.
    fullGC() - runs a full GC but does not sweep dead objects. 
    edenGC() - runs an eden GC but does not sweep dead objects.

    codeBlockForFrame(frameNumber) - gets the codeBlock at the specified frame (0 = current, 1 = caller, etc).
    printSourceFor(codeBlock) - prints the source code for the codeBlock.
    printByteCodeFor(codeBlock) - prints the bytecode for the codeBlock.

    print(str) - prints a string to dataLog output.
    printCallFrame() - prints the current CallFrame.
    printStack() - prints the JS stack.
    printInternal(value) - prints the JSC internal info for the specified value.

With JS_enableDollarVM=true, JS code can use the above functions like so:

    $vm.print(&quot;Using $vm features\n&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086027</commentid>
    <comment_count>1</comment_count>
      <attachid>250941</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 12:45:55 -0700</bug_when>
    <thetext>Created attachment 250941
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086041</commentid>
    <comment_count>2</comment_count>
      <attachid>250941</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-16 13:14:05 -0700</bug_when>
    <thetext>Comment on attachment 250941
the patch.

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

r=me if you fix the GTK build and the comments below.

&gt; Source/JavaScriptCore/CMakeLists.txt:392
&gt; +    tools/DollarVMPrototype.cpp
&gt; +    tools/JSDollarVM.cpp

For consistency, these should be &quot;JSDollarVM&quot; and &quot;JSDollarVMPrototype&quot; or &quot;DollarVM&quot; and &quot;DollarVMPrototype&quot;, but not a mix of the two.

We seem to be gravitating toward a style where we put &quot;JS&quot; in front of any JS API object, since it&apos;s so common for normal names -- like Map, for example -- to conflict with a standard name. So, I&apos;d suggest &quot;JSDollarVM&quot; and &quot;JSDollarVMPrototype&quot; here.

&gt; Source/JavaScriptCore/interpreter/StackVisitor.cpp:324
&gt; +#define IDT printIndents(indent)

Rather than a macro, which is hard to decipher and debug, and which violates our coding standards by putting two statements on the same line, can you just make a helper function that, given an indentation level and some arguments, calls printIndents and then calls dataLog with its remaining arguments?

&gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:38
&gt; +// lldb. The JS versions in DollarVMPrototype are implemented on top of these
&gt; +// these.

&quot;these these&quot;

&gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:41
&gt; +JS_EXPORT_PRIVATE void gcAndSweep(ExecState*);

This function name should specify whether it does full GC or eden GC.

&gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:48
&gt; +JS_EXPORT_PRIVATE void printInternal(JSValue);

Let&apos;s call this printValue. &quot;Internal&quot; has little meaning.

&gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:88
&gt; +// We&apos;ll pass C++ pointers into JS as a double token and convert back when
&gt; +// we consume them. These are convenience functions to do that conversion.
&gt; +template&lt;typename T&gt;
&gt; +static double ptrToDouble(T* ptr)
&gt; +{
&gt; +    union {
&gt; +        double d;
&gt; +        T* ptr;
&gt; +    } u;
&gt; +    u.ptr = ptr;
&gt; +    return u.d;
&gt; +}
&gt; +
&gt; +template&lt;typename T&gt;
&gt; +static T* doubleToPtr(double d)
&gt; +{
&gt; +    union {
&gt; +        double d;
&gt; +        T* ptr;
&gt; +    } u;
&gt; +    u.d = d;
&gt; +    return u.ptr;
&gt; +}

Can you just use bitwise_cast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086108</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 15:46:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250941 [details]
&gt; the patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250941&amp;action=review
&gt; 
&gt; r=me if you fix the GTK build and the comments below.

Looks like a conflict with the previous patch that I landed.  Just need to rebase to ToT.
 
&gt; &gt; Source/JavaScriptCore/CMakeLists.txt:392
&gt; &gt; +    tools/DollarVMPrototype.cpp
&gt; &gt; +    tools/JSDollarVM.cpp
&gt; 
&gt; For consistency, these should be &quot;JSDollarVM&quot; and &quot;JSDollarVMPrototype&quot; or
&gt; &quot;DollarVM&quot; and &quot;DollarVMPrototype&quot;, but not a mix of the two.
&gt; 
&gt; ... I&apos;d suggest &quot;JSDollarVM&quot; and &quot;JSDollarVMPrototype&quot; here.

Done.

&gt; &gt; Source/JavaScriptCore/interpreter/StackVisitor.cpp:324
&gt; &gt; +#define IDT printIndents(indent)
&gt; 
&gt; Rather than a macro, ... make a helper function that, given an indentation level and some
&gt; arguments, calls printIndents and then calls dataLog with its remaining
&gt; arguments?

Done.  I now use 2 file local variadic templates (log() and logF()) that does the job of dataLog() and dataLogF() but with indentation support.

&gt; &gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:38
&gt; &gt; +// lldb. The JS versions in DollarVMPrototype are implemented on top of these
&gt; &gt; +// these.
&gt; 
&gt; &quot;these these&quot;

Fixed.

&gt; &gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:41
&gt; &gt; +JS_EXPORT_PRIVATE void gcAndSweep(ExecState*);
&gt; 
&gt; This function name should specify whether it does full GC or eden GC.

Per our offline discussion, I&apos;ve removed fullGC().  What we have now is:
   gc() - does a synchronous full GC and sweep.
   edenGC() - does a synchronous eden GC and sweep.

&gt; &gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:48
&gt; &gt; +JS_EXPORT_PRIVATE void printInternal(JSValue);
&gt; 
&gt; Let&apos;s call this printValue. &quot;Internal&quot; has little meaning.

Done.

&gt; &gt; Source/JavaScriptCore/tools/DollarVMPrototype.cpp:88
&gt; Can you just use bitwise_cast?

Fixed.

In addition, I had to make 2 other changes:

1. Refactored Heap::collectAllGarbage() into Heap::collectAndSweep(HeapOperation).
   collectAllGarbage() is now a wrapper around collectAndSweep().  $vm.edenGC() calls collectAndSweep(EdenCollection).

2. Changed CodeBlock::printCallOp() to not compute the CallLinkStatus for FTL codeBlocks since the FTL does not support this.
   Otherwise, we&apos;ll get a crash when dumping bytecode for an FTL compiled codeBlock.

Updated patch coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086110</commentid>
    <comment_count>4</comment_count>
      <attachid>250960</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 15:48:17 -0700</bug_when>
    <thetext>Created attachment 250960
patch 2: applied Geoff&apos;s suggestions and fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086112</commentid>
    <comment_count>5</comment_count>
      <attachid>250960</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-16 15:50:35 -0700</bug_when>
    <thetext>Comment on attachment 250960
patch 2: applied Geoff&apos;s suggestions and fixes.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086113</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 15:50:51 -0700</bug_when>
    <thetext>Attachment 250960 did not pass style-queue:


ERROR: Source/JavaScriptCore/interpreter/StackVisitor.cpp:319:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 16 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>1086116</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 15:51:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; ERROR: Source/JavaScriptCore/interpreter/StackVisitor.cpp:319:  Weird number
&gt; of spaces at line-start.  Are you using a 4-space indent? 
&gt; [whitespace/indent] [3]
&gt; Total errors found: 1 in 16 files

Accidental extra space.  Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086141</commentid>
    <comment_count>8</comment_count>
      <attachid>250968</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 16:11:06 -0700</bug_when>
    <thetext>Created attachment 250968
patch 3: with fix for bitwise_cast complaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086187</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-16 17:27:00 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r182927: &lt;http://trac.webkit.org/r182927&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086420</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-17 14:24:28 -0700</bug_when>
    <thetext>FYI, a build fix for this patch on 32-bit ports was landed in http://trac.webkit.org/changeset/182934.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250941</attachid>
            <date>2015-04-16 12:45:55 -0700</date>
            <delta_ts>2015-04-16 15:48:17 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-143809.patch</filename>
            <type>text/plain</type>
            <size>48109</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBA
QAorMjAxNS0wNC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkICR2bSBkZWJ1Z2dpbmcgdG9vbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MzgwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvciBkZWJ1Z2dpbmcgVk0gYnVncywgaXQgd291bGQgYmUgdXNlZnVs
IHRvIGJlIGFibGUgdG8gZHVtcCBWTSBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgZnJvbSBKUyBj
b2RlIHRoYXQgd2UgaW5zdHJ1bWVudC4gIFRvIHRoaXMgZW5kLCBsZXQncyBpbnRyb2R1Y2UgYQor
ICAgICAgICBKU19lbmFibGVEb2xsYXJWTSBvcHRpb24gdGhhdCwgaWYgdHJ1ZSwgaW5zdGFsbHMg
YW4gJHZtIHByb3BlcnR5IGludG8gZWFjaCBKUworICAgICAgICBnbG9iYWwgb2JqZWN0IGF0IGNy
ZWF0aW9uIHRpbWUuICBUaGUgJHZtIHByb3BlcnR5IHJlZmVycyB0byBhbiBvYmplY3QgdGhhdAor
ICAgICAgICBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXNlZnVsIHV0aWxpdHkgZnVuY3Rpb25z
LiAgRm9yIHRoaXMgaW5pdGlhbAorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgJHZtIHdpbGwgaGF2
ZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgICBjcmFzaCgpIC0gdHJpZ2dlciBhbiBpbnRl
bnRpb25hbCBjcmFzaC4KKworICAgICAgICAgICAgZGZnVHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlm
IHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIERGRyBjb21waWxlZCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorICAgICAgICAgICAgaml0VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGZ1
bmN0aW9uIGlzIGNvbXBpbGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQsIGVsc2UgcmV0dXJucyBmYWxz
ZS4KKyAgICAgICAgICAgIGxsaW50VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50
IGZ1bmN0aW9uIGlzIGludGVycHJldGVkIGJ5IHRoZSBMTElOVCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorCisgICAgICAgICAgICBnYygpIC0gcnVucyBhIGZ1bGwgR0MgYW5kIHN3ZWVwIGFsbCBkZWFk
IG9iamVjdHMuCisgICAgICAgICAgICBmdWxsR0MoKSAtIHJ1bnMgYSBmdWxsIEdDIGJ1dCBkb2Vz
IG5vdCBzd2VlcCBkZWFkIG9iamVjdHMuIAorICAgICAgICAgICAgZWRlbkdDKCkgLSBydW5zIGFu
IGVkZW4gR0MgYnV0IGRvZXMgbm90IHN3ZWVwIGRlYWQgb2JqZWN0cy4KKworICAgICAgICAgICAg
Y29kZUJsb2NrRm9yRnJhbWUoZnJhbWVOdW1iZXIpIC0gZ2V0cyB0aGUgY29kZUJsb2NrIGF0IHRo
ZSBzcGVjaWZpZWQgZnJhbWUgKDAgPSBjdXJyZW50LCAxID0gY2FsbGVyLCBldGMpLgorICAgICAg
ICAgICAgcHJpbnRTb3VyY2VGb3IoY29kZUJsb2NrKSAtIHByaW50cyB0aGUgc291cmNlIGNvZGUg
Zm9yIHRoZSBjb2RlQmxvY2suCisgICAgICAgICAgICBwcmludEJ5dGVDb2RlRm9yKGNvZGVCbG9j
aykgLSBwcmludHMgdGhlIGJ5dGVjb2RlIGZvciB0aGUgY29kZUJsb2NrLgorCisgICAgICAgICAg
ICBwcmludChzdHIpIC0gcHJpbnRzIGEgc3RyaW5nIHRvIGRhdGFMb2cgb3V0cHV0LgorICAgICAg
ICAgICAgcHJpbnRDYWxsRnJhbWUoKSAtIHByaW50cyB0aGUgY3VycmVudCBDYWxsRnJhbWUuCisg
ICAgICAgICAgICBwcmludFN0YWNrKCkgLSBwcmludHMgdGhlIEpTIHN0YWNrLgorICAgICAgICAg
ICAgcHJpbnRJbnRlcm5hbCh2YWx1ZSkgLSBwcmludHMgdGhlIEpTQyBpbnRlcm5hbCBpbmZvIGZv
ciB0aGUgc3BlY2lmaWVkIHZhbHVlLgorCisgICAgICAgIFdpdGggSlNfZW5hYmxlRG9sbGFyVk09
dHJ1ZSwgSlMgY29kZSBjYW4gdXNlIHRoZSBhYm92ZSBmdW5jdGlvbnMgbGlrZSBzbzoKKworICAg
ICAgICAgICAgJHZtLnByaW50KCJVc2luZyAkdm0gZmVhdHVyZXNcbiIpOworCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6cHJpbnRJbmRlbnRzKToKKyAgICAgICAgKEpTQzo6U3RhY2tW
aXNpdG9yOjpGcmFtZTo6cHJpbnQpOgorICAgICAgICAoSlNDOjpqaXRUeXBlTmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OnByaW50aWYpOiBEZWxldGVkLgorICAgICAgICAtIE1vZGVybml6
ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoKSwgYW5k
IHJlbW92ZSBzb21lCisgICAgICAgICAgbm93IHJlZHVuZGFudCBjb2RlLgorICAgICAgICAtIEFs
c28gZml4IGl0IHNvIHRoYXQgaXQgZG93bmdyYWRlcyBncmFjZWZ1bGx5IHdoZW4gZW5jb3VudGVy
aW5nIGlubGluZWQgREZHCisgICAgICAgICAgYW5kIGNvbXBpbGVkIEZUTCBmdW5jdGlvbnMuCisK
KyAgICAgICAgKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6OkRlYnVnUHJpbnRGcmFtZUZ1bmN0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoRGVidWdQcmludEZyYW1lRnVuY3Rvcjo6b3BlcmF0b3IoKSk6
IERlbGV0ZWQuCisgICAgICAgIChkZWJ1Z1ByaW50Q2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKGRlYnVnUHJpbnRTdGFjayk6IERlbGV0ZWQuCisgICAgICAgIC0gdGhlc2UgaGF2ZSBiZWVu
IG1vdmVkIGludG8gRG9sbGFyVk1Qcm90b3R5cGUuY3BwLiAKKworICAgICAgICAqIGludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAtIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50
KCkgaXMgbm93IGVuYWJsZWQgZm9yIHJlbGVhc2UgYnVpbGRzIGFzIHdlbGwgc28gdGhhdAorICAg
ICAgICAgIHdlIGNhbiBjYWxsIGl0IGZyb20gJHZtLgorCisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgLSBBZGRlZCB0aGUgJHZtIGluc3RhbmNl
IHRvIGdsb2JhbCBvYmplY3RzIGNvbmRpdGlvbmFsIG9uIHRoZSBKU0NfZW5hYmxlRG9sbGFyVk0K
KyAgICAgICAgICBvcHRpb24uCisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAg
ICAgLSBBZGRlZCB0aGUgSlNDX2VuYWJsZURvbGxhclZNIG9wdGlvbi4KKworICAgICAgICAqIHRv
b2xzL0RvbGxhclZNUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIC0gVGhpcyBmaWxlIGNv
bnRhaW5zIDIgc2V0cyBvZiBmdW5jdGlvbnM6CisKKyAgICAgICAgICBhLiBhIEMrKyBpbXBsZW1l
bnRhdGlvbiBvZiBkZWJ1Z2dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGFibGUg
d2hlbgorICAgICAgICAgICAgIGRvaW5nIGRlYnVnZ2luZyBmcm9tIGxsZGIuICBUbyB0aGUgZXh0
ZW50IHBvc3NpYmxlLCB0aGVzZSBmdW5jdGlvbnMgdHJ5IHRvCisgICAgICAgICAgICAgYmUgY2F1
dGlvdXMgYW5kIG5vdCBjYXVzZSB1bmludGVuZGVkIGNyYXNoZXMgc2hvdWxkIHRoZSB1c2VyIGNh
bGwgdGhlbSB3aXRoCisgICAgICAgICAgICAgdGhlIHdyb25nIGluZm8uICBIZW5jZSwgdGhleSBh
cmUgZGVzaWduZWQgdG8gYmUgcm9idXN0IHJhdGhlciB0aGFuIHNwZWVkeS4KKworICAgICAgICAg
IGIuIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb25zIG9mIEpTIGZ1bmN0aW9ucyBpbiB0aGUgJHZt
IG9iamVjdC4gIFdoZXJlIHRoZXJlCisgICAgICAgICAgICAgaXMgb3ZlcmxhcHBpbmcgZnVuY3Rp
b25hbGl0eSwgdGhlc2UgYXJlIGJ1aWx0IG9uIHRvcCBvZiB0aGUgQysrIGZ1bmN0aW9ucworICAg
ICAgICAgICAgIGFib3ZlIHRvIGRvIHRoZSB3b3JrLgorCisgICAgICAgICAgTm90ZTogaXQgZG9l
cyBub3QgbWFrZSBzZW5zZSBmb3IgYWxsIG9mIHRoZSAkdm0gZnVuY3Rpb25zIHRvIGhhdmUgYSBD
KysKKyAgICAgICAgICBjb3VudGVycGFydCBmb3IgbGxkYiBkZWJ1Z2dpbmcuICBGb3IgZXhhbXBs
ZSwgdGhlICR2bS5kZmdUcnVlKCkgZnVuY3Rpb24gaXMKKyAgICAgICAgICBvbmx5IHVzZWZ1bCBm
b3IgSlMgY29kZSwgYW5kIHdvcmtzIHZpYSB0aGUgREZHIGludHJpbnNpY3MgbWVjaGFuaXNtLgor
ICAgICAgICAgIFdoZW4gZG9pbmcgZGVidWdnaW5nIHZpYSBsbGRiLCB0aGUgb3B0aW1pemF0aW9u
IGxldmVsIG9mIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICBleGVjdXRpbmcgSlMgZnVuY3Rpb24g
Y2FuIGJlIGdvdHRlbiBieSBkdW1waW5nIHRoZSBjdXJyZW50IENhbGxGcmFtZSBpbnN0ZWFkLgor
CisgICAgICAgIChKU0M6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKToKKyAgICAgICAgKEpTQzo6
ZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2spOgorCisgICAgICAgIChKU0M6OnB0clRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6ZG91YmxlVG9QdHIpOgorICAgICAgICAtIFNvbWUgb2YgdGhl
ICR2bSBmdW5jdGlvbnMgYWxsb3dzIEpTIGNvZGUgdG8gaW5zcGVjdCBDb2RlQmxvY2tzLiAgSW4g
SlMgY29kZSwKKyAgICAgICAgICB3ZSdsbCByZXByZXNlbnQgdGhlIEMrKyBwb2ludGVycyBhcyBk
b3VibGVzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBhcworICAgICAgICAgIGEgY29u
dmVuaWVuY2UgdG8gZWFzaWx5IGNvbnZlcnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgQysr
IHBvaW50ZXIgYW5kCisgICAgICAgICAgZG91YmxlIHZhbHVlcy4gIFRoZSBjb252ZXJzaW9uIGRv
ZXMgbm90IGd1YXJhbnRlZSB0aGF0IGEgZG91YmxlIGNvbnZlcnRlZCB0byBhCisgICAgICAgICAg
Q29kZUJsb2NrKiBpcyByZWFsbHkgYSBDb2RlQmxvY2sqLiAgSXQgaXMgbWVyZWx5IGEgY2FuZGlk
YXRlLCBhbmQgbmVlZHMgdG8gYmUKKyAgICAgICAgICB2YWxpZGF0ZWQgKHNlZSBpc1ZhbGlkQ29k
ZUJsb2NrKCkpIGJlZm9yZSB1c2UuCisKKyAgICAgICAgKEpTQzo6RG9sbGFyVk1Qcm90b3R5cGU6
OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6IC0gJHZtLmNyYXNo
KCkKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25ERkdUcnVlKTogLSAkdm0uZGZnVHJ1ZSgpCisgICAg
ICAgIChKU0M6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1lSklUVHlwZUZ1
bmN0b3IpOgorICAgICAgICAoSlNDOjpDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKEpTQzo6Q2FsbGVyRnJhbWVKSVRUeXBlRnVuY3Rvcjo6aml0VHlwZSk6
CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTExpbnRUcnVlKTogLSAkdm0ubGxpbnRUcnVlKCkKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25KSVRUcnVlKTogLSAkdm0uaml0VHJ1ZSgpCisgICAgICAgIChK
U0M6OmdjQW5kU3dlZXApOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdDQW5kU3dlZXApOiAtICR2
bS5nY0FuZFN3ZWVwKCkKKyAgICAgICAgKEpTQzo6ZnVsbEdDKToKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25GdWxsR0MpOiAtICR2bS5mdWxsR0MoKQorICAgICAgICAoSlNDOjplZGVuR0MpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkVkZW5HQyk6IC0gJHZtLmVkZW5HQygpCisgICAgICAgIChKU0M6
OmlzVmFsaWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpjb2RlQmxvY2tGb3JGcmFtZSk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yRnJhbWUpOiAtICR2bS5jb2RlQmxvY2tG
b3JGcmFtZShmcmFtZU51bWJlcikKKyAgICAgICAgKEpTQzo6Y29kZUJsb2NrRnJvbUFyZyk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IpOiAtICR2bS5wcmludFNvdXJjZUZv
cihjb2RlQmxvY2spCisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRCeXRlQ29kZUZvcik6IC0g
JHZtLnByaW50Qnl0ZWNvZGVGb3IoY29kZUJsb2NrKQorICAgICAgICAoSlNDOjpmdW5jdGlvblBy
aW50KTogLSAkdm0ucHJpbnQoc3RyKQorICAgICAgICAoSlNDOjpQcmludEZyYW1lRnVuY3Rvcjo6
UHJpbnRGcmFtZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpQcmludEZyYW1lRnVuY3Rvcjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OnByaW50Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6
cHJpbnRTdGFjayk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRDYWxsRnJhbWUpOiAtICR2
bS5wcmludENhbGxGcmFtZSgpCisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRTdGFjayk6IC0g
JHZtLnByaW50U3RhY2soKQorICAgICAgICAoSlNDOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25QcmludEludGVybmFsKTogLSAkdm0ucHJpbnRJbnRlcm5hbCgpCisgICAg
ICAgIChKU0M6OkRvbGxhclZNUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
dG9vbHMvRG9sbGFyVk1Qcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRvbGxhclZN
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEb2xsYXJWTVByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RG9sbGFyVk1Qcm90b3R5cGU6OkRvbGxhclZN
UHJvdG90eXBlKToKKworICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiB0b29scy9KU0RvbGxhclZNLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0RvbGxh
clZNOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpKU0RvbGxhclZNKToKKwogMjAxNS0wNC0xNiAg
Q3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0
aGUgdW5uZWNlc3NhcnkgV1RGX0NIQU5HRVMgZGVmaW5lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODI4NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw2ICszODgsOCBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCiAgICAg
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKKyAgICB0b29scy9Eb2xsYXJWTVByb3RvdHlwZS5jcHAK
KyAgICB0b29scy9KU0RvbGxhclZNLmNwcAogCiAgICAgeWFyci9SZWd1bGFyRXhwcmVzc2lvbi5j
cHAKICAgICB5YXJyL1lhcnJDYW5vbmljYWxpemVVQ1MyLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODI4NzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04NTMsNiArODUzLDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcFByb3RvdHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx0b29sc1xDb2RlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHRvb2xzXERvbGxhclZNUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ceWFyclxSZWd1bGFyRXhwcmVzc2lvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx5YXJyXFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHlhcnJcWWFyckludGVycHJldGVyLmNwcCIgLz4KQEAgLTE2OTgsNiArMTcw
MCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllcklu
bGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xEb2xsYXJWTVByb3RvdHlwZS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcSlNEb2xsYXJWTVByb3RvdHlw
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcUHJvZmlsZVRyZWVOb2Rl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xUaWVyZWRNTWFwQXJyYXku
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcUmVndWxhckV4cHJlc3Npb24u
aCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE4Mjg3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2lu
ZyBjb3B5KQpAQCAtODk0LDYgKzg5NCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
dG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiPgogICAgICAgPEZpbHRlcj50b29sczwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcRG9sbGFy
Vk1Qcm90b3R5cGUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4KKyAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk0uY3Bw
Ij4KKyAgICAgIDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJcUmVndWxhckV4cHJlc3Npb24uY3BwIj4KICAgICAg
IDxGaWx0ZXI+eWFycjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjk2OSw2ICsyOTc1
LDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgi
PgogICAgICAgPEZpbHRlcj50b29sczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcRG9sbGFyVk1Qcm90b3R5cGUuaCI+CisgICAgICA8
RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZNLmgiPgorICAgICAgPEZpbHRlcj50b29sczwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNc
UHJvZmlsZVRyZWVOb2RlLmgiPgogICAgICAgPEZpbHRlcj50b29sczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4
Mjg3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ2LDYgKzE2NDYsMTAgQEAKIAkJ
RkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYw
NEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTM4NEVF
NTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNE
b2xsYXJWTS5jcHAgKi87IH07CisJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4
NEVFMjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAv
KiBEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyogRG9sbGFyVk1Qcm90b3R5
cGUuY3BwICovOyB9OworCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogRG9sbGFyVk1Qcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
Mzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBEb2xsYXJWTVByb3RvdHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTkzMkE3MTgzQzVBMjYw
MEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29w
ZS5jcHAgKi87IH07CiAJCUZFNTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE2
MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTdCQTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovOyB9
OwpAQCAtMzQyNCw2ICszNDI4LDEwIEBACiAJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRCRiAvKiBH
bG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRoID0g
bGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBD
RTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEb2xs
YXJWTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzg0RUUyMUFEREI3QUQw
MDU1REUyQyAvKiBKU0RvbGxhclZNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRG9sbGFyVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUzODRFRTMxQURE
QjdBRDAwNTVERTJDIC8qIERvbGxhclZNUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERvbGxhclZNUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIERvbGxhclZNUHJvdG90
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbGxhclZNUHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE1MTgzQzVBMjYwMEExRUND
QyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMy
QTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZpZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDc1Miw4ICs0NzYwLDEyIEBACiAJCQkJODZCNTgyMkYxNEQy
MzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCiAJCQkJODYwM0NFRjIxNEM3NTQ2NDAw
QUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAogCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFF
NTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCisJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJD
IC8qIEpTRG9sbGFyVk0uY3BwICovLAorCQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBK
U0RvbGxhclZNLmggKi8sCiAJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVU
cmVlTm9kZS5oICovLAogCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFw
QXJyYXkuaCAqLywKKwkJCQlGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyogRG9sbGFyVk1Qcm90
b3R5cGUuY3BwICovLAorCQkJCUZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBEb2xsYXJWTVBy
b3RvdHlwZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0b29sczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC01NTU1LDYgKzU1NjcsOCBAQAogCQkJCUE1RUE3MEVDMTlGNUIzRUEwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGOUIxNTFBMUQ0M0ZB
MDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUyQyAvKiBEb2xs
YXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVE
RTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTZBRDJDQjREMTlCOTE0MDEw
MDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThE
M0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVFRjlCMTYxQTFENDQwMDAwNzAyRTkwIC8qIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLApAQCAtNzAyMyw2ICs3MDM3LDcgQEAKIAkJ
CQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjUxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkUzODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIERvbGxhclZNUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZH
RENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcyNzgsNiAr
NzI5Myw3IEBACiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0
QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTM4NEVFNTFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Nzg4MDE0
MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkUwNTAxNzFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE4Mjg3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTMsMTU2ICszMTMsODMgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpzZXRUb0VuZCgpCiAj
ZW5kaWYKIH0KIAotI2lmbmRlZiBOREVCVUcKLQotc3RhdGljIGNvbnN0IGNoYXIqIGppdFR5cGVO
YW1lKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKLXsKLSAgICBzd2l0Y2ggKGppdFR5cGUpIHsK
LSAgICBjYXNlIEpJVENvZGU6Ok5vbmU6IHJldHVybiAiTm9uZSI7Ci0gICAgY2FzZSBKSVRDb2Rl
OjpIb3N0Q2FsbFRodW5rOiByZXR1cm4gIkhvc3RDYWxsVGh1bmsiOwotICAgIGNhc2UgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuazogcmV0dXJuICJJbnRlcnByZXRlclRodW5rIjsKLSAgICBjYXNl
IEpJVENvZGU6OkJhc2VsaW5lSklUOiByZXR1cm4gIkJhc2VsaW5lSklUIjsKLSAgICBjYXNlIEpJ
VENvZGU6OkRGR0pJVDogcmV0dXJuICJERkdKSVQiOwotICAgIGNhc2UgSklUQ29kZTo6RlRMSklU
OiByZXR1cm4gIkZUTEpJVCI7Ci0gICAgfQotICAgIHJldHVybiAiPHVua25vd24+IjsKLX0KLQog
c3RhdGljIHZvaWQgcHJpbnRJbmRlbnRzKGludCBsZXZlbHMpCiB7CiAgICAgd2hpbGUgKGxldmVs
cy0tKQotICAgICAgICBkYXRhTG9nRlN0cmluZygiICAgIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
aW50aWYoaW50IGluZGVudExldmVscywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi17Ci0gICAg
dmFfbGlzdCBhcmdMaXN0OwotICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZvcm1hdCk7Ci0KLSAgICBp
ZiAoaW5kZW50TGV2ZWxzKQotICAgICAgICBwcmludEluZGVudHMoaW5kZW50TGV2ZWxzKTsKLQot
I2lmIENPTVBJTEVSKENMQU5HKSB8fCBDT01QSUxFUihHQ0MpCi0jcHJhZ21hIEdDQyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0
ZXJhbCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZvcm1hdC1h
dHRyaWJ1dGUiCi0jZW5kaWYKLQotICAgIFdURjo6ZGF0YUxvZ0ZWKGZvcm1hdCwgYXJnTGlzdCk7
Ci0KLSNpZiBDT01QSUxFUihDTEFORykgfHwgQ09NUElMRVIoR0NDKQotI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBwb3AKLSNlbmRpZgotCi0gICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAgICBkYXRh
TG9nKCIgICAiKTsKIH0KIAotdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpwcmludChpbnQgaW5k
ZW50TGV2ZWwpCit2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnQpCiB7
Ci0gICAgaW50IGkgPSBpbmRlbnRMZXZlbDsKLQorI2RlZmluZSBJRFQgcHJpbnRJbmRlbnRzKGlu
ZGVudCkKKyAgICAKICAgICBpZiAoIXRoaXMtPmNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIHByaW50
aWYoaSwgImZyYW1lIDB4MFxuIik7CisgICAgICAgIElEVCwgZGF0YUxvZygiZnJhbWUgMHgwXG4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
dGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgcHJpbnRpZihpLCAiZnJhbWUgJXAge1xuIiwgdGhpcy0+
Y2FsbEZyYW1lKCkpOworICAgIElEVCwgZGF0YUxvZ0YoImZyYW1lICVwIHtcbiIsIHRoaXMtPmNh
bGxGcmFtZSgpKTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gbV9jYWxsRnJhbWU7Ci0g
ICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IHRoaXMtPmNhbGxlckZyYW1lKCk7Ci0gICAgdm9p
ZCogcmV0dXJuUEMgPSBjYWxsRnJhbWUtPmhhc1JldHVyblBDKCkgPyBjYWxsRnJhbWUtPnJldHVy
blBDKCkudmFsdWUoKSA6IG51bGxwdHI7CisgICAgeworICAgICAgICBpbmRlbnQrKzsKIAotICAg
IHByaW50aWYoaSwgIiAgIG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb25OYW1lKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcHJpbnRpZihpLCAiICAgc291cmNlVVJMICclcydcbiIsIHNvdXJjZVVSTCgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IG1fY2FsbEZyYW1l
OworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKTsK
KyAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBjYWxsRnJhbWUtPmhhc1JldHVyblBDKCkgPyBjYWxs
RnJhbWUtPnJldHVyblBDKCkudmFsdWUoKSA6IG51bGxwdHI7CiAKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBwcmludGlmKGksICIgICBpc0lubGluZWRGcmFtZSAlZFxuIiwgaXNJbmxpbmVkRnJh
bWUoKSk7Ci0gICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpCi0gICAgICAgIHByaW50aWYoaSwgIiAg
IElubGluZUNhbGxGcmFtZSAlcFxuIiwgbV9pbmxpbmVDYWxsRnJhbWUpOwotI2VuZGlmCisgICAg
ICAgIElEVCwgZGF0YUxvZygibmFtZTogIiwgZnVuY3Rpb25OYW1lKCksICJcbiIpOworICAgICAg
ICBJRFQsIGRhdGFMb2coInNvdXJjZVVSTDogIiwgc291cmNlVVJMKCksICJcbiIpOwogCi0gICAg
cHJpbnRpZihpLCAiICAgY2FsbGVlICVwXG4iLCBjYWxsZWUoKSk7Ci0gICAgcHJpbnRpZihpLCAi
ICAgcmV0dXJuUEMgJXBcbiIsIHJldHVyblBDKTsKLSAgICBwcmludGlmKGksICIgICBjYWxsZXJG
cmFtZSAlcFxuIiwgY2FsbGVyRnJhbWUpOwotICAgIHVuc2lnbmVkIGxvY2F0aW9uUmF3Qml0cyA9
IGNhbGxGcmFtZS0+bG9jYXRpb25Bc1Jhd0JpdHMoKTsKLSAgICBwcmludGlmKGksICIgICByYXdM
b2NhdGlvbkJpdHMgJXUgMHgleFxuIiwgbG9jYXRpb25SYXdCaXRzLCBsb2NhdGlvblJhd0JpdHMp
OwotICAgIHByaW50aWYoaSwgIiAgIGNvZGVCbG9jayAlcFxuIiwgY29kZUJsb2NrKTsKLSAgICBp
ZiAoY29kZUJsb2NrKSB7Ci0gICAgICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSA9IGNvZGVC
bG9jay0+aml0VHlwZSgpOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYXNMb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBj
YWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOwotICAgICAgICAgICAgcHJpbnRp
ZihpLCAiICAgICAgYnl0ZWNvZGVPZmZzZXQgJXUgJXAgLyAlenVcbiIsIGJ5dGVjb2RlT2Zmc2V0
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihieXRlY29kZU9mZnNldCksIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCA9IGNhbGxGcmFtZS0+bG9j
YXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAgICAgICAgICAgcHJpbnRpZihpLCAiICAgICAg
Y29kZU9yaWdpbklkZXggJXUgJXAgLyAlenVcbiIsIGNvZGVPcmlnaW5JbmRleCwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY29kZU9yaWdpbkluZGV4KSwgY29kZUJsb2NrLT5jb2RlT3JpZ2lucygp
LnNpemUoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBsaW5lID0gMDsK
LSAgICAgICAgdW5zaWduZWQgY29sdW1uID0gMDsKLSAgICAgICAgY29tcHV0ZUxpbmVBbmRDb2x1
bW4obGluZSwgY29sdW1uKTsKLSAgICAgICAgcHJpbnRpZihpLCAiICAgICAgbGluZSAlZFxuIiwg
bGluZSk7Ci0gICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNvbHVtbiAlZFxuIiwgY29sdW1uKTsK
LSAgICAgICAgcHJpbnRpZihpLCAiICAgICAgaml0VHlwZSAlZCA8JXM+IGlzT3B0aW1pemluZ0pJ
VCAlZFxuIiwgaml0VHlwZSwgaml0VHlwZU5hbWUoaml0VHlwZSksIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKSk7CisgICAgICAgIElEVCwgZGF0YUxvZygiaXNJbmxpbmVkRnJhbWU6
ICIsIGlzSW5saW5lZEZyYW1lKCksICJcbiIpOworICAgICAgICBpZiAoaXNJbmxpbmVkRnJhbWUo
KSkKKyAgICAgICAgICAgIElEVCwgZGF0YUxvZ0YoIklubGluZUNhbGxGcmFtZTogJXBcbiIsIG1f
aW5saW5lQ2FsbEZyYW1lKTsKKyNlbmRpZgorCisgICAgICAgIElEVCwgZGF0YUxvZ0YoImNhbGxl
ZTogJXBcbiIsIGNhbGxlZSgpKTsKKyAgICAgICAgSURULCBkYXRhTG9nRigicmV0dXJuUEM6ICVw
XG4iLCByZXR1cm5QQyk7CisgICAgICAgIElEVCwgZGF0YUxvZ0YoImNhbGxlckZyYW1lOiAlcFxu
IiwgY2FsbGVyRnJhbWUpOworICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxs
RnJhbWUtPmxvY2F0aW9uQXNSYXdCaXRzKCk7CisgICAgICAgIElEVCwgZGF0YUxvZ0YoInJhd0xv
Y2F0aW9uQml0czogJXUgMHgleFxuIiwgbG9jYXRpb25SYXdCaXRzLCBsb2NhdGlvblJhd0JpdHMp
OworICAgICAgICBJRFQsIGRhdGFMb2dGKCJjb2RlQmxvY2s6ICVwICIsIGNvZGVCbG9jayk7Cisg
ICAgICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2spOwor
ICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGlu
ZWRGcmFtZSgpKSB7CisgICAgICAgICAgICBpbmRlbnQrKzsKKworICAgICAgICAgICAgaWYgKGNh
bGxGcmFtZS0+aGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2Rl
T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgSURULCBkYXRhTG9nKCJieXRlY29kZU9mZnNldDog
IiwgYnl0ZWNvZGVPZmZzZXQsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCksICJcbiIpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBwcmludGlmKGksICIgICAg
ICBoYXNDb2RlT3JpZ2lucyAlZFxuIiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKLSAg
ICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgewotICAgICAgICAgICAgSklU
Q29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOwotICAgICAgICAgICAg
cHJpbnRpZihpLCAiICAgICAgICAgaml0Q29kZSAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENv
ZGUsIGppdENvZGUtPnN0YXJ0KCksIGppdENvZGUtPmVuZCgpKTsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgfQotICAgIHByaW50aWYoaSwgIn1cbiIpOwotfQotCi0jZW5kaWYgLy8gTkRFQlVHCi0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jaWZuZGVmIE5ERUJVRwotdXNpbmcgSlNDOjpTdGFja1Zp
c2l0b3I7Ci0KLS8vIEZvciBkZWJ1Z2dpbmcgdXNlCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIGRl
YnVnUHJpbnRDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKLUpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGVidWdQcmludFN0YWNrKEpTQzo6Q2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpOwotCi1jbGFz
cyBEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjdGlvbiB7Ci0g
ICAgICAgIFByaW50T25lLAotICAgICAgICBQcmludEFsbAotICAgIH07Ci0KLSAgICBEZWJ1Z1By
aW50RnJhbWVGdW5jdG9yKEFjdGlvbiBhY3Rpb24pCi0gICAgICAgIDogbV9hY3Rpb24oYWN0aW9u
KQotICAgIHsKLSAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIElE
VCwgZGF0YUxvZygiaGFzQ29kZU9yaWdpbnM6ICIsIGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMo
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMo
KSkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXggPSBjYWxs
RnJhbWUtPmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
SURULCBkYXRhTG9nKCJjb2RlT3JpZ2luSW5kZXg6ICIsIGNvZGVPcmlnaW5JbmRleCwgIiBvZiAi
LCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpLCAiXG4iKTsKKworICAgICAgICAgICAg
ICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGppdFR5cGUgIT0gSklUQ29kZTo6RlRMSklUKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRD
b2RlKCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBJRFQsIGRhdGFMb2dGKCJqaXRD
b2RlOiAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENvZGUsIGppdENvZGUtPnN0YXJ0KCksIGpp
dENvZGUtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IDA7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW4gPSAwOworICAgICAgICAgICAgY29tcHV0ZUxpbmVB
bmRDb2x1bW4obGluZSwgY29sdW1uKTsKKyAgICAgICAgICAgIElEVCwgZGF0YUxvZygibGluZTog
IiwgbGluZSwgIlxuIik7CisgICAgICAgICAgICBJRFQsIGRhdGFMb2coImNvbHVtbjogIiwgY29s
dW1uLCAiXG4iKTsKIAotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tW
aXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgdmlzaXRvci0+cHJpbnQoMik7Ci0gICAg
ICAgIHJldHVybiBtX2FjdGlvbiA9PSBQcmludEFsbCA/IFN0YWNrVmlzaXRvcjo6Q29udGludWUg
OiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICBpbmRlbnQtLTsKKyAgICAgICAgfQor
ICAgICAgICBpbmRlbnQtLTsKICAgICB9CisgICAgSURULCBkYXRhTG9nKCJ9XG4iKTsKIAotcHJp
dmF0ZToKLSAgICBBY3Rpb24gbV9hY3Rpb247Ci19OwotCi12b2lkIGRlYnVnUHJpbnRDYWxsRnJh
bWUoSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAoIWNhbGxGcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIERlYnVnUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihEZWJ1Z1By
aW50RnJhbWVGdW5jdG9yOjpQcmludE9uZSk7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0
b3IpOwotfQotCi12b2lkIGRlYnVnUHJpbnRTdGFjayhKU0M6OkNhbGxGcmFtZSogdG9wQ2FsbEZy
YW1lKQotewotICAgIGlmICghdG9wQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRGVi
dWdQcmludEZyYW1lRnVuY3RvciBmdW5jdG9yKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50
QWxsKTsKLSAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisjdW5kZWYgSURUCiB9
CiAKLSNlbmRpZiAvLyAhTkRFQlVHCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHJldmlzaW9u
IDE4Mjg3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOSArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZN
RW50cnlGcmFtZSogdm1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9WTUVudHJ5RnJhbWU7
IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxG
cmFtZTsgfQogICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJpbnQoaW50IGluZGVudExldmVsKTsKLSNlbmRpZgogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgRnJhbWUoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4Mjg3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiRGVidWdn
ZXJTY29wZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkRvbGxh
clZNUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5cGUuaCIKQEAgLTcwLDYgKzcxLDcgQEAK
ICNpbmNsdWRlICJKU0NvbnNvbGUuaCIKICNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCiAjaW5jbHVk
ZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbk5hbWVTY29wZS5oIgogI2lu
Y2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCkBAIC00
NTIsNiArNDU0LDEzIEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIK
ICAgICBKU0NvbnNvbGUqIGNvbnNvbGVPYmplY3QgPSBKU0NvbnNvbGU6OmNyZWF0ZSh2bSwgbV9j
b25zb2xlU3RydWN0dXJlLmdldCgpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29uc29sZSIpLCBjb25zb2xlT2JqZWN0
LCBEb250RW51bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZW5hYmxlRG9sbGFyVk0o
KSkpIHsKKyAgICAgICAgRG9sbGFyVk1Qcm90b3R5cGUqIGRvbGxhclZNUHJvdG90eXBlID0gRG9s
bGFyVk1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgdGhpcywgRG9sbGFyVk1Qcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAg
bV9kb2xsYXJWTVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRG9sbGFyVk06OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgZG9sbGFyVk1Qcm90b3R5cGUpKTsKKyAgICAgICAgSlNEb2xsYXJWTSog
ZG9sbGFyVk0gPSBKU0RvbGxhclZNOjpjcmVhdGUodm0sIG1fZG9sbGFyVk1TdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAiJHZtIiksIGRvbGxhclZNLCBEb250RW51bSk7CisgICAgfQorCiAg
ICAgcmVzZXRQcm90b3R5cGUodm0sIHByb3RvdHlwZSgpKTsKIH0KIApAQCAtNzMwLDYgKzczOSw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29uc29sZVN0cnVjdHVyZSk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZG9sbGFyVk1TdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUpOwogCiAjaWYg
RU5BQkxFKFBST01JU0VTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxODI4NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiAr
MjMxLDcgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhw
TWF0Y2hlc0FycmF5U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVn
RXhwU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY29uc29sZVN0cnVj
dHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2RvbGxhclZNU3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsK
ICAgICAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0U3RydWN0
dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMTgyODcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDkgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdihib29sLCBlbmFibGVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enosIGZh
bHNlLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ekF0LCAwLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6ekF0T3JBZnRlciwgMCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdmVyYm9zZUV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6eiwgZmFsc2UsIG51bGxwdHIpCisgICAgdihib29sLCB2ZXJi
b3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LCBmYWxzZSwgbnVsbHB0cikgXAorICAgIFwKKyAg
ICB2KGJvb2wsIGVuYWJsZURvbGxhclZNLCBmYWxzZSwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKQogCiBjbGFzcyBPcHRpb25zIHsKIHB1YmxpYzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Eb2xsYXJWTVByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0RvbGxhclZNUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Eb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRG9sbGFyVk1Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgi
CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBm
b2xsb3dpbmcgYXJlIGV4cG9ydGVkIGJlY2F1c2UgdGhleSBhcmUgZGVzaWduZWQgdG8gYmUgY2Fs
bGFibGUgZnJvbQorLy8gbGxkYi4gVGhlIEpTIHZlcnNpb25zIGluIERvbGxhclZNUHJvdG90eXBl
IGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlc2UKKy8vIHRoZXNlLgorCitKU19FWFBPUlRf
UFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSopOworSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBnY0FuZFN3ZWVwKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmdWxsR0MoRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVkZW5H
QyhFeGVjU3RhdGUqKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNWYWxpZENvZGVCbG9jayhF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKK0pTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVt
YmVyKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKik7
CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50U3RhY2soQ2FsbEZyYW1lKiB0b3BDYWxsRnJh
bWUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKEpTVmFsdWUpOworCiti
b29sIGN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZXhlYy0+dm0oKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKK30K
Kworc3RhdGljIGJvb2wgZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIGlmIChjdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGF0YUxvZygiRVJST1I6IGN1cnJlbnQgdGhyZWFkIGRvZXMgbm90
IG93biB0aGUgSlNMb2NrXG4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworY29uc3QgQ2xh
c3NJbmZvIERvbGxhclZNUHJvdG90eXBlOjpzX2luZm8gPSB7ICJEb2xsYXJWTVByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRG9sbGFyVk1Qcm90b3R5cGUp
IH07CisKKy8vIFdlJ2xsIHBhc3MgQysrIHBvaW50ZXJzIGludG8gSlMgYXMgYSBkb3VibGUgdG9r
ZW4gYW5kIGNvbnZlcnQgYmFjayB3aGVuCisvLyB3ZSBjb25zdW1lIHRoZW0uIFRoZXNlIGFyZSBj
b252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gZG8gdGhhdCBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0YXRpYyBkb3VibGUgcHRyVG9Eb3VibGUoVCogcHRyKQoreworICAgIHVuaW9u
IHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIFQqIHB0cjsKKyAgICB9IHU7CisgICAgdS5w
dHIgPSBwdHI7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0
YXRpYyBUKiBkb3VibGVUb1B0cihkb3VibGUgZCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRv
dWJsZSBkOworICAgICAgICBUKiBwdHI7CisgICAgfSB1OworICAgIHUuZCA9IGQ7CisgICAgcmV0
dXJuIHUucHRyOworfQorCit2b2lkIERvbGxhclZNUHJvdG90eXBlOjphZGRGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCit7CisgICAgSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKK30KKworc3Rh
dGljIE5PX1JFVFVSTiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jhc2go
RXhlY1N0YXRlKikKK3sKKyAgICBDUkFTSCgpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRGR1RydWUoRXhlY1N0YXRlKikKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworfQorCitjbGFzcyBDYWxsZXJGcmFt
ZUpJVFR5cGVGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9y
KCkKKyAgICAgICAgOiBtX2N1cnJlbnRGcmFtZSgwKQorICAgICAgICAsIG1faml0VHlwZShKSVRD
b2RlOjpOb25lKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVy
YXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChtX2N1cnJl
bnRGcmFtZSsrID4gMSkgeworICAgICAgICAgICAgbV9qaXRUeXBlID0gdmlzaXRvci0+Y29kZUJs
b2NrKCktPmppdFR5cGUoKTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAg
fQorICAgIAorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSgpIHsgcmV0dXJuIG1faml0VHlw
ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fY3VycmVudEZyYW1lOworICAgIEpJVENv
ZGU6OkpJVFR5cGUgbV9qaXRUeXBlOworfTsKKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25MTGludFRydWUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICgh
ZXhlYykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yIGZ1bmN0b3I7CisgICAgZXhlYy0+aXRlcmF0ZShm
dW5jdG9yKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSklUVHJ1ZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKCFleGVjKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKKyAgICBl
eGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGZ1bmN0b3Iuaml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Cit9CisKK3Zv
aWQgZ2NBbmRTd2VlcChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50
VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV4ZWMtPmhlYXAo
KS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Z2NBbmRTd2VlcChleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworfQorCit2b2lkIGZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFlbnN1
cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV4
ZWMtPmhlYXAoKS0+Y29sbGVjdChGdWxsQ29sbGVjdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBmdWxsR0MoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKwordm9pZCBlZGVuR0MoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZW5z
dXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCisgICAgICAgIHJldHVybjsKKyAgICBl
eGVjLT5oZWFwKCktPmNvbGxlY3QoRWRlbkNvbGxlY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgZWRlbkdDKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Cit9CisKK2Jvb2wgaXNWYWxpZENvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVC
bG9jayogY2FuZGlkYXRlKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xv
Y2soZXhlYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29kZUJs
b2NrVmFsaWRhdGlvbkZ1bmN0b3IgeworICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3Rv
cihDb2RlQmxvY2sqIGNhbmRpZGF0ZSkKKyAgICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9y
KCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb2Rl
QmxvY2sgPT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBmb3VuZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29kZUJs
b2NrKiBjYW5kaWRhdGU7CisgICAgICAgIGJvb2wgZm91bmQgeyBmYWxzZSB9OworICAgIH07Cisg
ICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVu
Y3RvciBmdW5jdG9yKGNhbmRpZGF0ZSk7CisgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1
bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmZvdW5kOworfQorCitDb2RlQmxvY2sqIGNvZGVC
bG9ja0ZvckZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZU51bWJl
cikKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKHRvcENhbGxGcmFt
ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGlmICghdG9wQ2FsbEZyYW1l
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdHJ1Y3QgRmV0Y2hDb2RlQmxv
Y2tGdW5jdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZldGNoQ29kZUJsb2NrRnVuY3Rvcih1
bnNpZ25lZCB0YXJnZXRGcmFtZU51bWJlcikKKyAgICAgICAgICAgIDogdGFyZ2V0RnJhbWUodGFy
Z2V0RnJhbWVOdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
U3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZSsrOworICAgICAgICAgICAgaWYgKGN1
cnJlbnRGcmFtZSA9PSB0YXJnZXRGcmFtZSkgeworICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9
IHZpc2l0b3ItPmNvZGVCbG9jaygpOworICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpDb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0
RnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRGcmFtZSB7IDAgfTsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgfTsKKyAgICAKKyAgICBGZXRjaENv
ZGVCbG9ja0Z1bmN0b3IgZnVuY3RvcihmcmFtZU51bWJlcik7CisgICAgdG9wQ2FsbEZyYW1lLT5p
dGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmNvZGVCbG9jazsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFt
ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBK
U1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgaWYgKCF2YWx1
ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworCisgICAgLy8gV2UgbmVlZCB0byBpbmMgdGhlIGZyYW1lIG51bWJlciBiZWNhdXNlIHRo
ZSBjYWxsZXIgd291bGQgY29uc2lkZXIKKyAgICAvLyBpdHMgb3duIGZyYW1lIGFzIGZyYW1lIDAu
IEhlbmNlLCB3ZSBuZWVkIGRpc2NvdW50IHRoZSBmcmFtZSBmb3IgdGhpcworICAgIC8vIGZ1bmN0
aW9uLgorICAgIHVuc2lnbmVkIGZyYW1lTnVtYmVyID0gdmFsdWUuYXNVSW50MzIoKSArIDE7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFtZU51
bWJlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKHB0clRvRG91YmxlKGNv
ZGVCbG9jaykpKTsKK30KKworc3RhdGljIENvZGVCbG9jayogY29kZUJsb2NrRnJvbUFyZyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIGlmICghdmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBkYXRh
TG9nKCJJbnZhbGlkIGNvZGVCbG9jazogIiwgdmFsdWUsICJcbiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRvdWJsZVRvUHRy
PENvZGVCbG9jaz4odmFsdWUuYXNEb3VibGUoKSk7CisgICAgaWYgKGlzVmFsaWRDb2RlQmxvY2so
ZXhlYywgY29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKworICAgIGRhdGFM
b2dGKCJJbnZhbGlkIGNvZGVCbG9jazogJXAgIiwgY29kZUJsb2NrKTsKKyAgICBkYXRhTG9nKHZh
bHVlLCAiXG4iKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFNvdXJjZUZvcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tGcm9tQXJnKGV4
ZWMpOworICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgIGNvZGVCbG9jay0+ZHVtcFNvdXJjZSgp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRCeXRlQ29kZUZvcihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tG
cm9tQXJnKGV4ZWMpOworICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgIGNvZGVCbG9jay0+ZHVt
cEJ5dGVjb2RlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpKQorICAgICAgICAgICAgZGF0YUxv
ZygiICIpOworICAgICAgICBkYXRhTG9nKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK2NsYXNzIFByaW50RnJhbWVGdW5jdG9yIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIEFjdGlvbiB7CisgICAgICAgIFByaW50T25lLAorICAgICAgICBQcmludEFs
bAorICAgIH07CisgICAgCisgICAgUHJpbnRGcmFtZUZ1bmN0b3IoQWN0aW9uIGFjdGlvbiwgdW5z
aWduZWQgZnJhbWVzVG9Ta2lwKQorICAgICAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAgICAg
LCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
dGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKKyAg
ICB7CisgICAgICAgIG1fY3VycmVudEZyYW1lKys7CisgICAgICAgIGlmIChtX2N1cnJlbnRGcmFt
ZSA+IG1fZnJhbWVzVG9Ta2lwKQorICAgICAgICAgICAgdmlzaXRvci0+cHJpbnQoMik7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9hY3Rpb24gPT0gUHJpbnRPbmUgJiYgbV9jdXJyZW50RnJhbWUg
PiBtX2ZyYW1lc1RvU2tpcCkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7
CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lw
OworICAgIHVuc2lnbmVkIG1fY3VycmVudEZyYW1lIHsgMCB9OworfTsKKworc3RhdGljIHZvaWQg
cHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCkKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGNhbGxGcmFtZSkp
CisgICAgICAgIHJldHVybjsKKyAgICBQcmludEZyYW1lRnVuY3RvciBmdW5jdG9yKFByaW50RnJh
bWVGdW5jdG9yOjpQcmludE9uZSwgZnJhbWVzVG9Ta2lwKTsKKyAgICBjYWxsRnJhbWUtPml0ZXJh
dGUoZnVuY3Rvcik7Cit9CisKK3ZvaWQgcHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCit7CisgICAgcHJpbnRDYWxsRnJhbWUoY2FsbEZyYW1lLCAwKTsKK30KKworc3RhdGljIHZv
aWQgcHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWduZWQgZnJhbWVzVG9T
a2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sodG9wQ2FsbEZy
YW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdG9wQ2FsbEZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihQcmludEZyYW1lRnVuY3Rvcjo6
UHJpbnRBbGwsIGZyYW1lc1RvU2tpcCk7CisgICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0
b3IpOworfQorCit2b2lkIHByaW50U3RhY2soQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCit7Cisg
ICAgcHJpbnRTdGFjayh0b3BDYWxsRnJhbWUsIDApOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhleSBhcmUg
ZXhwZWN0aW5nIHRvIHByaW50IHRoZWlyCisgICAgLy8gb3duIGZyYW1lLiBTbyBza2lwIDEgZm9y
IHRoaXMgZnJhbWUuCisgICAgcHJpbnRDYWxsRnJhbWUoZXhlYywgMSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhleSBhcmUgZXhwZWN0
aW5nIHRvIHByaW50IHRoZQorICAgIC8vIHN0YWNrIHN0YXJ0aW5nIHRoZWlyIG93biBmcmFtZS4g
U28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgorICAgIHByaW50U3RhY2soZXhlYywgMSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordm9pZCBwcmludElu
dGVybmFsKEpTVmFsdWUgdmFsdWUpCit7CisgICAgZGF0YUxvZyh2YWx1ZSk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpKQorICAgICAgICAgICAgZGF0YUxvZygi
ICIpOworICAgICAgICBkYXRhTG9nKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordm9pZCBE
b2xsYXJWTVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAg
ICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiY3Jhc2giLCBmdW5jdGlvbkNyYXNoLCAw
KTsKKyAgICAKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVuY3Rpb25ERkdUcnVl
LCBERkdUcnVlSW50cmluc2ljLCBEb250RW51bSB8IEpTQzo6RnVuY3Rpb24pOworICAgIAorICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJsbGludFRydWUiLCBmdW5jdGlvbkxMaW50
VHJ1ZSwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImppdFRydWUiLCBm
dW5jdGlvbkpJVFRydWUsIDApOworICAgIAorICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsICJnYyIsIGZ1bmN0aW9uR0NBbmRTd2VlcCwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgImZ1bGxHQyIsIGZ1bmN0aW9uRnVsbEdDLCAwKTsKKyAgICBhZGRGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCAiZWRlbkdDIiwgZnVuY3Rpb25FZGVuR0MsIDApOworICAgIAor
ICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJjb2RlQmxvY2tGb3JGcmFtZSIsIGZ1
bmN0aW9uQ29kZUJsb2NrRm9yRnJhbWUsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsICJwcmludFNvdXJjZUZvciIsIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IsIDEpOworICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludEJ5dGVDb2RlRm9yIiwgZnVuY3Rp
b25QcmludEJ5dGVDb2RlRm9yLCAxKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCAicHJpbnQiLCBmdW5jdGlvblByaW50LCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCAicHJpbnRDYWxsRnJhbWUiLCBmdW5jdGlvblByaW50Q2FsbEZyYW1lLCAw
KTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTdGFjayIsIGZ1bmN0
aW9uUHJpbnRTdGFjaywgMCk7CisKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAi
cHJpbnRJbnRlcm5hbCIsIGZ1bmN0aW9uUHJpbnRJbnRlcm5hbCwgMSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0RvbGxhclZNUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0RvbGxh
clZNUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvRG9sbGFyVk1Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEb2xs
YXJWTVByb3RvdHlwZV9oCisjZGVmaW5lIERvbGxhclZNUHJvdG90eXBlX2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBEb2xsYXJWTVByb3RvdHlw
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBEb2xs
YXJWTVByb3RvdHlwZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBEb2xsYXJWTVByb3RvdHlw
ZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RG9sbGFyVk1Qcm90b3R5
cGU+KHZtLmhlYXApKSBEb2xsYXJWTVByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIHByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERvbGxhclZNUHJvdG90eXBlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKKyAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRG9sbGFyVk1Qcm90b3R5cGVfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRG9sbGFyVk0u
aCIKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRG9sbGFy
Vk06OnNfaW5mbyA9IHsgIkRvbGxhclZNIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0RvbGxhclZNKSB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSlNEb2xsYXJWTV9oCisjZGVmaW5lIEpTRG9sbGFyVk1faAorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitjbGFzcyBKU0RvbGxhclZNIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIAorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBKU0RvbGxhclZNKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIEpTRG9sbGFyVk0qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNEb2xsYXJWTT4odm0uaGVhcCkpIEpTRG9sbGFyVk0odm0sIHN0cnVjdHVyZSk7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEpTRG9sbGFyVk0oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgewor
ICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEb2xsYXJWTV9o
Cg==
</data>
<flag name="review"
          id="275744"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250960</attachid>
            <date>2015-04-16 15:48:17 -0700</date>
            <delta_ts>2015-04-16 16:11:06 -0700</delta_ts>
            <desc>patch 2: applied Geoff&apos;s suggestions and fixes.</desc>
            <filename>bug-143809.patch</filename>
            <type>text/plain</type>
            <size>48974</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyOTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBA
QAorMjAxNS0wNC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkICR2bSBkZWJ1Z2dpbmcgdG9vbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MzgwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvciBkZWJ1Z2dpbmcgVk0gYnVncywgaXQgd291bGQgYmUgdXNlZnVs
IHRvIGJlIGFibGUgdG8gZHVtcCBWTSBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgZnJvbSBKUyBj
b2RlIHRoYXQgd2UgaW5zdHJ1bWVudC4gIFRvIHRoaXMgZW5kLCBsZXQncyBpbnRyb2R1Y2UgYQor
ICAgICAgICBKU19lbmFibGVEb2xsYXJWTSBvcHRpb24gdGhhdCwgaWYgdHJ1ZSwgaW5zdGFsbHMg
YW4gJHZtIHByb3BlcnR5IGludG8gZWFjaCBKUworICAgICAgICBnbG9iYWwgb2JqZWN0IGF0IGNy
ZWF0aW9uIHRpbWUuICBUaGUgJHZtIHByb3BlcnR5IHJlZmVycyB0byBhbiBvYmplY3QgdGhhdAor
ICAgICAgICBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXNlZnVsIHV0aWxpdHkgZnVuY3Rpb25z
LiAgRm9yIHRoaXMgaW5pdGlhbAorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgJHZtIHdpbGwgaGF2
ZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgICBjcmFzaCgpIC0gdHJpZ2dlciBhbiBpbnRl
bnRpb25hbCBjcmFzaC4KKworICAgICAgICAgICAgZGZnVHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlm
IHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIERGRyBjb21waWxlZCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorICAgICAgICAgICAgaml0VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGZ1
bmN0aW9uIGlzIGNvbXBpbGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQsIGVsc2UgcmV0dXJucyBmYWxz
ZS4KKyAgICAgICAgICAgIGxsaW50VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50
IGZ1bmN0aW9uIGlzIGludGVycHJldGVkIGJ5IHRoZSBMTElOVCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorCisgICAgICAgICAgICBnYygpIC0gcnVucyBhIGZ1bGwgR0MuCisgICAgICAgICAgICBlZGVu
R0MoKSAtIHJ1bnMgYW4gZWRlbiBHQy4KKworICAgICAgICAgICAgY29kZUJsb2NrRm9yRnJhbWUo
ZnJhbWVOdW1iZXIpIC0gZ2V0cyB0aGUgY29kZUJsb2NrIGF0IHRoZSBzcGVjaWZpZWQgZnJhbWUg
KDAgPSBjdXJyZW50LCAxID0gY2FsbGVyLCBldGMpLgorICAgICAgICAgICAgcHJpbnRTb3VyY2VG
b3IoY29kZUJsb2NrKSAtIHByaW50cyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBjb2RlQmxvY2su
CisgICAgICAgICAgICBwcmludEJ5dGVDb2RlRm9yKGNvZGVCbG9jaykgLSBwcmludHMgdGhlIGJ5
dGVjb2RlIGZvciB0aGUgY29kZUJsb2NrLgorCisgICAgICAgICAgICBwcmludChzdHIpIC0gcHJp
bnRzIGEgc3RyaW5nIHRvIGRhdGFMb2cgb3V0cHV0LgorICAgICAgICAgICAgcHJpbnRDYWxsRnJh
bWUoKSAtIHByaW50cyB0aGUgY3VycmVudCBDYWxsRnJhbWUuCisgICAgICAgICAgICBwcmludFN0
YWNrKCkgLSBwcmludHMgdGhlIEpTIHN0YWNrLgorICAgICAgICAgICAgcHJpbnRJbnRlcm5hbCh2
YWx1ZSkgLSBwcmludHMgdGhlIEpTQyBpbnRlcm5hbCBpbmZvIGZvciB0aGUgc3BlY2lmaWVkIHZh
bHVlLgorCisgICAgICAgIFdpdGggSlNfZW5hYmxlRG9sbGFyVk09dHJ1ZSwgSlMgY29kZSBjYW4g
dXNlIHRoZSBhYm92ZSBmdW5jdGlvbnMgbGlrZSBzbzoKKworICAgICAgICAgICAgJHZtLnByaW50
KCJVc2luZyAkdm0gZmVhdHVyZXNcbiIpOworCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIC0gRlRMIGNvbXBpbGVkIGZ1bmN0aW9ucyBk
b24ndCBsaWtlIGl0IHdoZW4gd2UgdHJ5IHRvIGNvbXB1dGUgdGhlIENhbGxMaW5rU3RhdHVzLgor
ICAgICAgICAgIEhlbmNlLCB3ZSBza2lwIHRoaXMgc3RlcCBpZiB3ZSdyZSBkdW1waW5nIGFuIEZU
TCBjb2RlQmxvY2suCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0QW5kU3dlZXApOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0QWxsR2Fy
YmFnZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBkbyBhbiBF
ZGVuIGNvbGxlY3Rpb24gYW5kIHN3ZWVwLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6cHJpbnRJbmRlbnRzKToKKyAgICAgICAgKEpTQzo6
bG9nKToKKyAgICAgICAgKEpTQzo6bG9nRik6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6
RnJhbWU6OnByaW50KToKKyAgICAgICAgKEpTQzo6aml0VHlwZU5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpwcmludGlmKTogRGVsZXRlZC4KKyAgICAgICAgLSBNb2Rlcm5pemUgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KCksIGFuZCByZW1vdmUg
c29tZQorICAgICAgICAgIG5vdyByZWR1bmRhbnQgY29kZS4KKyAgICAgICAgLSBBbHNvIGZpeCBp
dCBzbyB0aGF0IGl0IGRvd25ncmFkZXMgZ3JhY2VmdWxseSB3aGVuIGVuY291bnRlcmluZyBpbmxp
bmVkIERGRworICAgICAgICAgIGFuZCBjb21waWxlZCBGVEwgZnVuY3Rpb25zLgorCisgICAgICAg
IChEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yOjpEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVk
LgorICAgICAgICAoZGVidWdQcmludENhbGxGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChkZWJ1
Z1ByaW50U3RhY2spOiBEZWxldGVkLgorICAgICAgICAtIHRoZXNlIGhhdmUgYmVlbiBtb3ZlZCBp
bnRvIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwLiAKKworICAgICAgICAqIGludGVycHJldGVyL1N0
YWNrVmlzaXRvci5oOgorICAgICAgICAtIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KCkgaXMg
bm93IGVuYWJsZWQgZm9yIHJlbGVhc2UgYnVpbGRzIGFzIHdlbGwgc28gdGhhdAorICAgICAgICAg
IHdlIGNhbiBjYWxsIGl0IGZyb20gJHZtLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgLSBBZGRlZCB0aGUgJHZtIGluc3RhbmNlIHRvIGds
b2JhbCBvYmplY3RzIGNvbmRpdGlvbmFsIG9uIHRoZSBKU0NfZW5hYmxlRG9sbGFyVk0KKyAgICAg
ICAgICBvcHRpb24uCisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgLSBB
ZGRlZCB0aGUgSlNDX2VuYWJsZURvbGxhclZNIG9wdGlvbi4KKworICAgICAgICAqIHRvb2xzL0pT
RG9sbGFyVk0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU0RvbGxhclZNOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpKU0Rv
bGxhclZNKToKKworICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgLSBUaGlzIGZpbGUgY29udGFpbnMgMiBzZXRzIG9mIGZ1bmN0aW9uczoKKwor
ICAgICAgICAgIGEuIGEgQysrIGltcGxlbWVudGF0aW9uIG9mIGRlYnVnZ2luZyB1dGlsaXR5IGZ1
bmN0aW9ucyB0aGF0IGFyZSBjYWxsYWJsZSB3aGVuCisgICAgICAgICAgICAgZG9pbmcgZGVidWdn
aW5nIGZyb20gbGxkYi4gIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZXNlIGZ1bmN0aW9ucyB0
cnkgdG8KKyAgICAgICAgICAgICBiZSBjYXV0aW91cyBhbmQgbm90IGNhdXNlIHVuaW50ZW5kZWQg
Y3Jhc2hlcyBzaG91bGQgdGhlIHVzZXIgY2FsbCB0aGVtIHdpdGgKKyAgICAgICAgICAgICB0aGUg
d3JvbmcgaW5mby4gIEhlbmNlLCB0aGV5IGFyZSBkZXNpZ25lZCB0byBiZSByb2J1c3QgcmF0aGVy
IHRoYW4gc3BlZWR5LgorCisgICAgICAgICAgYi4gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMg
b2YgSlMgZnVuY3Rpb25zIGluIHRoZSAkdm0gb2JqZWN0LiAgV2hlcmUgdGhlcmUKKyAgICAgICAg
ICAgICBpcyBvdmVybGFwcGluZyBmdW5jdGlvbmFsaXR5LCB0aGVzZSBhcmUgYnVpbHQgb24gdG9w
IG9mIHRoZSBDKysgZnVuY3Rpb25zCisgICAgICAgICAgICAgYWJvdmUgdG8gZG8gdGhlIHdvcmsu
CisKKyAgICAgICAgICBOb3RlOiBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBhbGwgb2YgdGhl
ICR2bSBmdW5jdGlvbnMgdG8gaGF2ZSBhIEMrKworICAgICAgICAgIGNvdW50ZXJwYXJ0IGZvciBs
bGRiIGRlYnVnZ2luZy4gIEZvciBleGFtcGxlLCB0aGUgJHZtLmRmZ1RydWUoKSBmdW5jdGlvbiBp
cworICAgICAgICAgIG9ubHkgdXNlZnVsIGZvciBKUyBjb2RlLCBhbmQgd29ya3MgdmlhIHRoZSBE
RkcgaW50cmluc2ljcyBtZWNoYW5pc20uCisgICAgICAgICAgV2hlbiBkb2luZyBkZWJ1Z2dpbmcg
dmlhIGxsZGIsIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGN1cnJlbnRseQorICAgICAg
ICAgIGV4ZWN1dGluZyBKUyBmdW5jdGlvbiBjYW4gYmUgZ290dGVuIGJ5IGR1bXBpbmcgdGhlIGN1
cnJlbnQgQ2FsbEZyYW1lIGluc3RlYWQuCisKKyAgICAgICAgKEpTQzo6Y3VycmVudFRocmVhZE93
bnNKU0xvY2spOgorICAgICAgICAoSlNDOjplbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayk6
CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6IC0gJHZtLmNyYXNoKCkKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25ERkdUcnVlKTogLSAkdm0uZGZnVHJ1ZSgpCisgICAgICAgIChKU0M6OkNhbGxlckZyYW1l
SklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IpOgorICAgICAgICAoSlND
OjpDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6
Q2FsbGVyRnJhbWVKSVRUeXBlRnVuY3Rvcjo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uTExpbnRUcnVlKTogLSAkdm0ubGxpbnRUcnVlKCkKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25K
SVRUcnVlKTogLSAkdm0uaml0VHJ1ZSgpCisgICAgICAgIChKU0M6OmdjKToKKyAgICAgICAgKEpT
Qzo6ZnVuY3Rpb25HQyk6IC0gJHZtLmdjKCkKKyAgICAgICAgKEpTQzo6ZWRlbkdDKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25FZGVuR0MpOiAtICR2bS5lZGVuR0MoKQorICAgICAgICAoSlNDOjpp
c1ZhbGlkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Y29kZUJsb2NrRm9yRnJhbWUpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lKTogLSAkdm0uY29kZUJsb2NrRm9y
RnJhbWUoZnJhbWVOdW1iZXIpCisgICAgICAgIChKU0M6OmNvZGVCbG9ja0Zyb21BcmcpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvblByaW50U291cmNlRm9yKTogLSAkdm0ucHJpbnRTb3VyY2VGb3Io
Y29kZUJsb2NrKQorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IpOiAtICR2
bS5wcmludEJ5dGVjb2RlRm9yKGNvZGVCbG9jaykKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcmlu
dCk6IC0gJHZtLnByaW50KHN0cikKKyAgICAgICAgKEpTQzo6UHJpbnRGcmFtZUZ1bmN0b3I6OlBy
aW50RnJhbWVGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6UHJpbnRGcmFtZUZ1bmN0b3I6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoSlNDOjpwcmludENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OnBy
aW50U3RhY2spOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Q2FsbEZyYW1lKTogLSAkdm0u
cHJpbnRDYWxsRnJhbWUoKQorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50U3RhY2spOiAtICR2
bS5wcmludFN0YWNrKCkKKyAgICAgICAgKEpTQzo6cHJpbnRWYWx1ZSk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uUHJpbnRWYWx1ZSk6IC0gJHZtLnByaW50VmFsdWUoKQorICAgICAgICAoSlNDOjpK
U0RvbGxhclZNUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTVByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3Rv
dHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6SlNEb2xsYXJW
TVByb3RvdHlwZSk6CisKIDIwMTUtMDQtMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gVXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgQEBp
dGVyYXRvciBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE4MjkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCiAgICAgdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHAKICAgICB0b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKKyAgICB0b29scy9KU0RvbGxh
clZNLmNwcAorICAgIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCiAKICAgICB5YXJyL1Jl
Z3VsYXJFeHByZXNzaW9uLmNwcAogICAgIHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4Mjkx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1Miw2ICs4NTIsOCBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGUuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xGdW5jdGlvbk92ZXJyaWRlcy5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZNLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxSZWd1bGFyRXhwcmVzc2lvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyckludGVycHJldGVyLmNwcCIg
Lz4KQEAgLTE2OTgsNiArMTcwMCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29s
c1xDb2RlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29k
ZVByb2ZpbGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcRnVuY3Rp
b25PdmVycmlkZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9s
bGFyVk0uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk1Q
cm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVU
cmVlTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcVGllcmVkTU1h
cEFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFJlZ3VsYXJFeHBy
ZXNzaW9uLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHRvb2xzXEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCI+CiAgICAgICA8RmlsdGVyPnRvb2xz
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0
b29sc1xKU0RvbGxhclZNLmNwcCI+CisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCI+CisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CisgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFJlZ3VsYXJFeHByZXNzaW9u
LmNwcCI+CiAgICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAg
LTI5NzIsNiArMjk3OCwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcRnVu
Y3Rpb25PdmVycmlkZXMuaCI+CiAgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZNLmgi
PgorICAgICAgPEZpbHRlcj50b29sczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcSlNEb2xsYXJWTVByb3RvdHlwZS5oIj4KKyAgICAg
IDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5oIj4KICAgICAgIDxGaWx0ZXI+dG9v
bHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY0
NCw2ICsxNjQ0LDEwIEBACiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5
QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEJGRjJCMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
Y3BwICovOyB9OwogCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlk
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEJG
RjJBMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovOyB9OworCQlGRTM4
NEVFNTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyog
SlNEb2xsYXJWTS5jcHAgKi87IH07CisJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0Rv
bGxhclZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTM4NEVFMjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzg0RUUzMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9s
bGFyVk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1OTMy
QTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyog
Vk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZN
RW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFN0JBNjBGMUExQTdDRUMw
MEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmll
ci5jcHAgKi87IH07CkBAIC0zNDIwLDYgKzM0MjQsMTAgQEAKIAkJRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlk
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25PdmVy
cmlkZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRCRkYyQTFBRDQ3NkU3
MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25PdmVycmlkZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEb2xsYXJWTS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRG9sbGFyVk0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
b2xsYXJWTVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzg0
RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRG9sbGFyVk1Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29w
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZN
RW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRDFBMUE3
Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00NzQ2LDYgKzQ3NTQsMTAgQEAKIAkJCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyog
Q29kZVByb2ZpbGluZy5oICovLAogCQkJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5j
dGlvbk92ZXJyaWRlcy5jcHAgKi8sCiAJCQkJRkU0QkZGMkExQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1
bmN0aW9uT3ZlcnJpZGVzLmggKi8sCisJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk0uY3BwICovLAorCQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggKi8sCisJCQkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90
b3R5cGUuY3BwICovLAorCQkJCUZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggKi8sCiAJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVU
cmVlTm9kZS5oICovLAogCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFw
QXJyYXkuaCAqLywKIAkJCSk7CkBAIC01NTQ3LDYgKzU1NTksOCBAQAogCQkJCUE1RUE3MEVDMTlG
NUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYg
LyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGOUIx
NTFBMUQ0M0ZBMDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM4NEVFNjFB
RERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkFEMkNC
NEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUVGOUIxNjFBMUQ0NDAwMDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCkBAIC03MDE0LDYgKzcw
MjgsNyBAQAogCQkJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTgg
LyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNG
NTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRTM4NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBDNzI1MzIg
LyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcy
RjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03MjY5LDYgKzcyODQsNyBAQAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkQ0REU4
MTk4MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkUzODRFRTUxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFMDUwMTcxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMxLDcg
KzUzMSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYKICAgICAg
ICAgICAgIGlmICh0YXJnZXQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCglcCwg
ZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKICAgICAgICAgfQotICAg
ICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhp
cywgbG9jYXRpb24sIG1hcCksICIpIik7CisgICAgICAgIAorICAgICAgICBpZiAoaml0VHlwZSgp
ICE9IEpJVENvZGU6OkZUTEpJVCkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHN0YXR1cygiLCBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwgIikiKTsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MiwxMiArOTkyLDEyIEBA
IHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX3Nsb3RWaXNp
dG9yLnVuY29uZGl0aW9uYWxseUFwcGVuZChjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKIH0K
IAotdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCit2b2lkIEhlYXA6OmNvbGxlY3RBbmRT
d2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAgIGlmICghbV9pc1NhZmVU
b0NvbGxlY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbGxlY3QoRnVsbENvbGxlY3Rpb24p
OworICAgIGNvbGxlY3QoY29sbGVjdGlvblR5cGUpOwogCiAgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbjogU3dlZXBpbmciKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDggQEAg
cHVibGljOgogICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29s
bGVjdCA9IHRydWU7IH0KICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxl
Y3RBbGxHYXJiYWdlKCk7CisgICAgdm9pZCBjb2xsZWN0QWxsR2FyYmFnZSgpIHsgY29sbGVjdEFu
ZFN3ZWVwKEZ1bGxDb2xsZWN0aW9uKTsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29s
bGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUgPSBBbnlDb2xsZWN0aW9u
KTsKICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOwog
ICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYg
aXQgZGlkIGNvbGxlY3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxMywzNCArMzEzLDIzIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6c2V0VG9FbmQo
KQogI2VuZGlmCiB9CiAKLSNpZm5kZWYgTkRFQlVHCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBqaXRU
eXBlTmFtZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBl
KSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpOb25lOiByZXR1cm4gIk5vbmUiOwotICAgIGNhc2UgSklU
Q29kZTo6SG9zdENhbGxUaHVuazogcmV0dXJuICJIb3N0Q2FsbFRodW5rIjsKLSAgICBjYXNlIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bms6IHJldHVybiAiSW50ZXJwcmV0ZXJUaHVuayI7Ci0gICAg
Y2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDogcmV0dXJuICJCYXNlbGluZUpJVCI7Ci0gICAgY2Fz
ZSBKSVRDb2RlOjpERkdKSVQ6IHJldHVybiAiREZHSklUIjsKLSAgICBjYXNlIEpJVENvZGU6OkZU
TEpJVDogcmV0dXJuICJGVExKSVQiOwotICAgIH0KLSAgICByZXR1cm4gIjx1bmtub3duPiI7Ci19
Ci0KIHN0YXRpYyB2b2lkIHByaW50SW5kZW50cyhpbnQgbGV2ZWxzKQogewogICAgIHdoaWxlIChs
ZXZlbHMtLSkKLSAgICAgICAgZGF0YUxvZ0ZTdHJpbmcoIiAgICIpOworICAgICAgICAgZGF0YUxv
Z0ZTdHJpbmcoIiAgICIpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludGlmKGludCBpbmRlbnRMZXZl
bHMsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+
Cit2b2lkIGxvZyh1bnNpZ25lZCBpbmRlbnQsIGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiB7Ci0g
ICAgdmFfbGlzdCBhcmdMaXN0OwotICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZvcm1hdCk7CisgICAg
cHJpbnRJbmRlbnRzKGluZGVudCk7CisgICAgZGF0YUxvZyh2YWx1ZXMuLi4pOworfQogCi0gICAg
aWYgKGluZGVudExldmVscykKLSAgICAgICAgcHJpbnRJbmRlbnRzKGluZGVudExldmVscyk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3ZvaWQgbG9nRih1bnNpZ25lZCBpbmRlbnQsIGNv
bnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKK3sKKyAgICBwcmludElu
ZGVudHMoaW5kZW50KTsKIAogI2lmIENPTVBJTEVSKENMQU5HKSB8fCBDT01QSUxFUihHQ0MpCiAj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKQEAgLTM0OCwxMjEgKzMzNyw4MCBAQCBzdGF0aWMg
dm9pZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNvCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIgogI2VuZGlmCiAKLSAgICBXVEY6
OmRhdGFMb2dGVihmb3JtYXQsIGFyZ0xpc3QpOworICAgIGRhdGFMb2dGKGZvcm1hdCwgdmFsdWVz
Li4uKTsKIAogI2lmIENPTVBJTEVSKENMQU5HKSB8fCBDT01QSUxFUihHQ0MpCiAjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCi0KLSAgICB2YV9lbmQoYXJnTGlzdCk7CiB9CiAKLXZv
aWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGVudExldmVsKQordm9pZCBTdGFj
a1Zpc2l0b3I6OkZyYW1lOjpwcmludChpbnQgaW5kZW50KQogewotICAgIGludCBpID0gaW5kZW50
TGV2ZWw7Ci0KICAgICBpZiAoIXRoaXMtPmNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIHByaW50aWYo
aSwgImZyYW1lIDB4MFxuIik7CisgICAgICAgIGxvZyhpbmRlbnQsICJmcmFtZSAweDBcbiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlz
LT5jb2RlQmxvY2soKTsKLSAgICBwcmludGlmKGksICJmcmFtZSAlcCB7XG4iLCB0aGlzLT5jYWxs
RnJhbWUoKSk7CisgICAgbG9nRihpbmRlbnQsICJmcmFtZSAlcCB7XG4iLCB0aGlzLT5jYWxsRnJh
bWUoKSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IG1fY2FsbEZyYW1lOwotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFtZSgpOwotICAgIHZvaWQqIHJl
dHVyblBDID0gY2FsbEZyYW1lLT5oYXNSZXR1cm5QQygpID8gY2FsbEZyYW1lLT5yZXR1cm5QQygp
LnZhbHVlKCkgOiBudWxscHRyOworICAgIHsKKyAgICAgICAgaW5kZW50Kys7CiAKLSAgICBwcmlu
dGlmKGksICIgICBuYW1lICclcydcbiIsIGZ1bmN0aW9uTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHByaW50aWYoaSwgIiAgIHNvdXJjZVVSTCAnJXMnXG4iLCBzb3VyY2VVUkwoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKKyAg
ICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IHRoaXMtPmNhbGxlckZyYW1lKCk7CisgICAg
ICAgIHZvaWQqIHJldHVyblBDID0gY2FsbEZyYW1lLT5oYXNSZXR1cm5QQygpID8gY2FsbEZyYW1l
LT5yZXR1cm5QQygpLnZhbHVlKCkgOiBudWxscHRyOwogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgcHJpbnRpZihpLCAiICAgaXNJbmxpbmVkRnJhbWUgJWRcbiIsIGlzSW5saW5lZEZyYW1lKCkp
OwotICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAgICAgICBwcmludGlmKGksICIgICBJbmxp
bmVDYWxsRnJhbWUgJXBcbiIsIG1faW5saW5lQ2FsbEZyYW1lKTsKLSNlbmRpZgorICAgICAgICBs
b2coaW5kZW50LCAibmFtZTogIiwgZnVuY3Rpb25OYW1lKCksICJcbiIpOworICAgICAgICBsb2co
aW5kZW50LCAic291cmNlVVJMOiAiLCBzb3VyY2VVUkwoKSwgIlxuIik7CiAKLSAgICBwcmludGlm
KGksICIgICBjYWxsZWUgJXBcbiIsIGNhbGxlZSgpKTsKLSAgICBwcmludGlmKGksICIgICByZXR1
cm5QQyAlcFxuIiwgcmV0dXJuUEMpOwotICAgIHByaW50aWYoaSwgIiAgIGNhbGxlckZyYW1lICVw
XG4iLCBjYWxsZXJGcmFtZSk7Ci0gICAgdW5zaWduZWQgbG9jYXRpb25SYXdCaXRzID0gY2FsbEZy
YW1lLT5sb2NhdGlvbkFzUmF3Qml0cygpOwotICAgIHByaW50aWYoaSwgIiAgIHJhd0xvY2F0aW9u
Qml0cyAldSAweCV4XG4iLCBsb2NhdGlvblJhd0JpdHMsIGxvY2F0aW9uUmF3Qml0cyk7Ci0gICAg
cHJpbnRpZihpLCAiICAgY29kZUJsb2NrICVwXG4iLCBjb2RlQmxvY2spOwotICAgIGlmIChjb2Rl
QmxvY2spIHsKLSAgICAgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlID0gY29kZUJsb2NrLT5q
aXRUeXBlKCk7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPmhhc0xvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFt
ZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAgICAgICBwcmludGlmKGksICIg
ICAgICBieXRlY29kZU9mZnNldCAldSAlcCAvICV6dVxuIiwgYnl0ZWNvZGVPZmZzZXQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCkpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFz
Q29kZU9yaWdpbkluZGV4KCk7Ci0gICAgICAgICAgICBwcmludGlmKGksICIgICAgICBjb2RlT3Jp
Z2luSWRleCAldSAlcCAvICV6dVxuIiwgY29kZU9yaWdpbkluZGV4LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihjb2RlT3JpZ2luSW5kZXgpLCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgp
KTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBjb2x1bW4gPSAwOwotICAgICAgICBjb21wdXRlTGluZUFuZENvbHVtbihsaW5l
LCBjb2x1bW4pOwotICAgICAgICBwcmludGlmKGksICIgICAgICBsaW5lICVkXG4iLCBsaW5lKTsK
LSAgICAgICAgcHJpbnRpZihpLCAiICAgICAgY29sdW1uICVkXG4iLCBjb2x1bW4pOwotICAgICAg
ICBwcmludGlmKGksICIgICAgICBqaXRUeXBlICVkIDwlcz4gaXNPcHRpbWl6aW5nSklUICVkXG4i
LCBqaXRUeXBlLCBqaXRUeXBlTmFtZShqaXRUeXBlKSwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUpKTsKKyAgICAgICAgbG9nKGluZGVudCwgImlzSW5saW5lZEZyYW1lOiAiLCBpc0lu
bGluZWRGcmFtZSgpLCAiXG4iKTsKKyAgICAgICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpCisgICAg
ICAgICAgICBsb2dGKGluZGVudCwgIklubGluZUNhbGxGcmFtZTogJXBcbiIsIG1faW5saW5lQ2Fs
bEZyYW1lKTsKKyNlbmRpZgorCisgICAgICAgIGxvZ0YoaW5kZW50LCAiY2FsbGVlOiAlcFxuIiwg
Y2FsbGVlKCkpOworICAgICAgICBsb2dGKGluZGVudCwgInJldHVyblBDOiAlcFxuIiwgcmV0dXJu
UEMpOworICAgICAgICBsb2dGKGluZGVudCwgImNhbGxlckZyYW1lOiAlcFxuIiwgY2FsbGVyRnJh
bWUpOworICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmxvY2F0
aW9uQXNSYXdCaXRzKCk7CisgICAgICAgIGxvZ0YoaW5kZW50LCAicmF3TG9jYXRpb25CaXRzOiAl
dSAweCV4XG4iLCBsb2NhdGlvblJhd0JpdHMsIGxvY2F0aW9uUmF3Qml0cyk7CisgICAgICAgIGxv
Z0YoaW5kZW50LCAiY29kZUJsb2NrOiAlcCAiLCBjb2RlQmxvY2spOworICAgICAgICBpZiAoY29k
ZUJsb2NrKQorICAgICAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrKTsKKyAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkRnJhbWUoKSkgewor
ICAgICAgICAgICAgaW5kZW50Kys7CisKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPmhhc0xv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAg
ICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJieXRlY29kZU9mZnNldDogIiwgYnl0ZWNvZGVPZmZz
ZXQsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCksICJcbiIpOwogI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICBwcmludGlmKGksICIgICAgICBoYXNDb2RlT3JpZ2lu
cyAlZFxuIiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKLSAgICAgICAgaWYgKGNvZGVC
bG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgewotICAgICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9
IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOwotICAgICAgICAgICAgcHJpbnRpZihpLCAiICAg
ICAgICAgaml0Q29kZSAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENvZGUsIGppdENvZGUtPnN0
YXJ0KCksIGppdENvZGUtPmVuZCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbG9nKGluZGVudCwgImhhc0NvZGVPcmlnaW5zOiAiLCBjb2RlQmxvY2stPmhhc0NvZGVP
cmlnaW5zKCksICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVP
cmlnaW5zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4
ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGxvZyhpbmRlbnQsICJjb2RlT3JpZ2luSW5kZXg6ICIsIGNvZGVPcmlnaW5JbmRleCwg
IiBvZiAiLCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpLCAiXG4iKTsKKworICAgICAg
ICAgICAgICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmppdFR5
cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGppdFR5cGUgIT0gSklUQ29kZTo6RlRMSklU
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dGKGluZGVudCwg
ImppdENvZGU6ICVwIHN0YXJ0ICVwIGVuZCAlcFxuIiwgaml0Q29kZSwgaml0Q29kZS0+c3RhcnQo
KSwgaml0Q29kZS0+ZW5kKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBsaW5lID0g
MDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9IDA7CisgICAgICAgICAgICBjb21wdXRl
TGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOworICAgICAgICAgICAgbG9nKGluZGVudCwgImxp
bmU6ICIsIGxpbmUsICJcbiIpOworICAgICAgICAgICAgbG9nKGluZGVudCwgImNvbHVtbjogIiwg
Y29sdW1uLCAiXG4iKTsKKworICAgICAgICAgICAgaW5kZW50LS07CiAgICAgICAgIH0KLSNlbmRp
ZgorICAgICAgICBpbmRlbnQtLTsKICAgICB9Ci0gICAgcHJpbnRpZihpLCAifVxuIik7CisgICAg
bG9nKGluZGVudCwgIn1cbiIpOwogfQogCi0jZW5kaWYgLy8gTkRFQlVHCi0KIH0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jaWZuZGVmIE5ERUJVRwotdXNpbmcgSlNDOjpTdGFja1Zpc2l0b3I7Ci0KLS8v
IEZvciBkZWJ1Z2dpbmcgdXNlCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlYnVnUHJpbnRDYWxs
RnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVidWdQcmlu
dFN0YWNrKEpTQzo6Q2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpOwotCi1jbGFzcyBEZWJ1Z1ByaW50
RnJhbWVGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjdGlvbiB7Ci0gICAgICAgIFByaW50
T25lLAotICAgICAgICBQcmludEFsbAotICAgIH07Ci0KLSAgICBEZWJ1Z1ByaW50RnJhbWVGdW5j
dG9yKEFjdGlvbiBhY3Rpb24pCi0gICAgICAgIDogbV9hY3Rpb24oYWN0aW9uKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHZpc2l0b3ItPnByaW50KDIpOwotICAgICAgICByZXR1
cm4gbV9hY3Rpb24gPT0gUHJpbnRBbGwgPyBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlIDogU3RhY2tW
aXNpdG9yOjpEb25lOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBY3Rpb24gbV9hY3Rpb247Ci19
OwotCi12b2lkIGRlYnVnUHJpbnRDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIERlYnVnUHJpbnRG
cmFtZUZ1bmN0b3IgZnVuY3RvcihEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yOjpQcmludE9uZSk7Ci0g
ICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwotfQotCi12b2lkIGRlYnVnUHJpbnRTdGFj
ayhKU0M6OkNhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQotewotICAgIGlmICghdG9wQ2FsbEZyYW1l
KQotICAgICAgICByZXR1cm47Ci0gICAgRGVidWdQcmludEZyYW1lRnVuY3RvciBmdW5jdG9yKERl
YnVnUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50QWxsKTsKLSAgICB0b3BDYWxsRnJhbWUtPml0ZXJh
dGUoZnVuY3Rvcik7Ci19Ci0KLSNlbmRpZiAvLyAhTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCShyZXZpc2lvbiAxODI5
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fVk1FbnRyeUZyYW1lOyB9CiAg
ICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7
IH0KICAgICAgICAgCi0jaWZuZGVmIE5ERUJVRwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50KGludCBpbmRlbnRMZXZlbCk7Ci0jZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEZyYW1lKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDggQEAKICNpbmNsdWRlICJKU0NvbnNvbGUuaCIKICNpbmNsdWRlICJKU0RhdGFWaWV3
LmgiCiAjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTRG9sbGFy
Vk0uaCIKKyNpbmNsdWRlICJKU0RvbGxhclZNUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25OYW1lU2NvcGUuaCIKICNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgpAQCAtNDUwLDYgKzQ1Miwx
MyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgSlNDb25z
b2xlKiBjb25zb2xlT2JqZWN0ID0gSlNDb25zb2xlOjpjcmVhdGUodm0sIG1fY29uc29sZVN0cnVj
dHVyZS5nZXQoKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbnNvbGUiKSwgY29uc29sZU9iamVjdCwgRG9udEVudW0p
OwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmVuYWJsZURvbGxhclZNKCkpKSB7CisgICAg
ICAgIEpTRG9sbGFyVk1Qcm90b3R5cGUqIGRvbGxhclZNUHJvdG90eXBlID0gSlNEb2xsYXJWTVBy
b3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBKU0RvbGxhclZNUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fZG9s
bGFyVk1TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMsIGRvbGxhclZNUHJvdG90eXBlKSk7CisgICAgICAgIEpTRG9sbGFyVk0qIGRvbGxh
clZNID0gSlNEb2xsYXJWTTo6Y3JlYXRlKHZtLCBtX2RvbGxhclZNU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgIiR2bSIpLCBkb2xsYXJWTSwgRG9udEVudW0pOworICAgIH0KKwogICAgIHJl
c2V0UHJvdG90eXBlKHZtLCBwcm90b3R5cGUoKSk7CiB9CiAKQEAgLTcyOSw2ICs3MzgsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdFeHBTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NvbnNvbGVTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2RvbGxhclZNU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKIAogI2lmIEVOQUJM
RShQUk9NSVNFUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3
IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNo
ZXNBcnJheVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0
cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NvbnNvbGVTdHJ1Y3R1cmU7
CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9kb2xsYXJWTVN0cnVjdHVyZTsKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAg
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4
MjkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIHYodW5zaWduZWQsIGZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0
ZXIsIDAsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlv
bkZ1enosIGZhbHNlLCBudWxscHRyKSBcCiAgICAgXAorICAgIHYoYm9vbCwgZW5hYmxlRG9sbGFy
Vk0sIGZhbHNlLCAiaW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2Jq
ZWN0cyIpIFwKICAgICB2KG9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIs
ICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVzIikgXAog
CiBjbGFzcyBPcHRpb25zIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0RvbGxhclZNLmgiCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8gPSB7ICJEb2xsYXJWTSIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEb2xsYXJWTSkgfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTRG9sbGFyVk1faAorI2RlZmluZSBKU0Rv
bGxhclZNX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworICAg
IAorY2xhc3MgSlNEb2xsYXJWTSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNEb2xsYXJWTSogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU0RvbGxhclZNKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9sbGFyVk0+KHZtLmhlYXApKSBKU0RvbGxh
clZNKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBK
U0RvbGxhclZNKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTRG9sbGFyVk1faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RvbGxhclZNUHJv
dG90eXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZm9sbG93aW5nIGFyZSBleHBvcnRlZCBiZWNh
dXNlIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxhYmxlIGZyb20KKy8vIGxsZGIuIFRoZSBK
UyB2ZXJzaW9ucyBpbiBKU0RvbGxhclZNUHJvdG90eXBlIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Ag
b2YgdGhlc2UuCisKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZE93bnNKU0xv
Y2soRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdjKEV4ZWNTdGF0ZSopOwor
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlZGVuR0MoRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJ
VkFURSBib29sIGlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CitKU19F
WFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckZyYW1lKENhbGxGcmFtZSogdG9w
Q2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZU51bWJlcik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50Q2FsbEZyYW1lKENhbGxGcmFtZSopOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJpbnRWYWx1ZShKU1ZhbHVlKTsKKworYm9vbCBjdXJyZW50VGhyZWFkT3duc0pTTG9jayhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4ZWMtPnZtKCkuYXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCk7Cit9CisKK3N0YXRpYyBib29sIGVuc3VyZUN1cnJlbnRUaHJl
YWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoY3VycmVudFRocmVhZE93
bnNKU0xvY2soZXhlYykpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRhdGFMb2coIkVSUk9S
OiBjdXJyZW50IHRocmVhZCBkb2VzIG5vdCBvd24gdGhlIEpTTG9ja1xuIik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCisKK2NvbnN0IENsYXNzSW5mbyBKU0RvbGxhclZNUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJEb2xsYXJWTVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNEb2xsYXJWTVByb3RvdHlwZSkgfTsKKworCit2b2lkIEpTRG9sbGFyVk1Qcm90
b3R5cGU6OmFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3Vt
ZW50cykKK3sKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygp
LCBmdW5jdGlvbikpOworfQorCitzdGF0aWMgTk9fUkVUVVJOIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmFzaChFeGVjU3RhdGUqKQoreworICAgIENSQVNIKCk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uREZHVHJ1ZShFeGVj
U3RhdGUqKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7
Cit9CisKK2NsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgeworcHVibGljOgorICAgIENh
bGxlckZyYW1lSklUVHlwZUZ1bmN0b3IoKQorICAgICAgICA6IG1fY3VycmVudEZyYW1lKDApCisg
ICAgICAgICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUpCisgICAgeworICAgIH0KKworICAgIFN0
YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQorICAg
IHsKKyAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysgPiAxKSB7CisgICAgICAgICAgICBtX2pp
dFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpOworICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisgICAgCisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9j
dXJyZW50RnJhbWU7CisgICAgSklUQ29kZTo6SklUVHlwZSBtX2ppdFR5cGU7Cit9OworCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxMaW50VHJ1ZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3Rv
cjsKKyAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25K
SVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgQ2FsbGVyRnJhbWVKSVRUeXBl
RnVuY3RvciBmdW5jdG9yOworICAgIGV4ZWMtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZnVuY3Rvci5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpKTsKK30KKwordm9pZCBnYyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYg
KCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKK30KKyAgICAKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIGdjKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Cit9CisKK3ZvaWQgZWRlbkdDKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWVuc3Vy
ZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGV4ZWMpKQorICAgICAgICByZXR1cm47CisgICAgZXhl
Yy0+aGVhcCgpLT5jb2xsZWN0QW5kU3dlZXAoRWRlbkNvbGxlY3Rpb24pOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgZWRlbkdDKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK2Jvb2wgaXNWYWxpZENvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY2FuZGlkYXRlKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93
bnNKU0xvY2soZXhlYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzdHJ1Y3Qg
Q29kZUJsb2NrVmFsaWRhdGlvbkZ1bmN0b3IgeworICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9u
RnVuY3RvcihDb2RlQmxvY2sqIGNhbmRpZGF0ZSkKKyAgICAgICAgICAgIDogY2FuZGlkYXRlKGNh
bmRpZGF0ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb2RlQmxvY2sgPT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Q29kZUJsb2NrKiBjYW5kaWRhdGU7CisgICAgICAgIGJvb2wgZm91bmQgeyBmYWxzZSB9OworICAg
IH07CisgICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2tWYWxpZGF0
aW9uRnVuY3RvciBmdW5jdG9yKGNhbmRpZGF0ZSk7CisgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJs
b2NrKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmZvdW5kOworfQorCitDb2RlQmxvY2sq
IGNvZGVCbG9ja0ZvckZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFt
ZU51bWJlcikKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKHRvcENh
bGxGcmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGlmICghdG9wQ2Fs
bEZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdHJ1Y3QgRmV0Y2hD
b2RlQmxvY2tGdW5jdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZldGNoQ29kZUJsb2NrRnVu
Y3Rvcih1bnNpZ25lZCB0YXJnZXRGcmFtZU51bWJlcikKKyAgICAgICAgICAgIDogdGFyZ2V0RnJh
bWUodGFyZ2V0RnJhbWVOdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZSsrOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRGcmFtZSA9PSB0YXJnZXRGcmFtZSkgeworICAgICAgICAgICAgICAgIGNvZGVC
bG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOworICAgICAgICAgICAgICAgIHJldHVybiBTdGFj
a1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
dGFyZ2V0RnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRGcmFtZSB7IDAgfTsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgfTsKKyAgICAKKyAgICBG
ZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVuY3RvcihmcmFtZU51bWJlcik7CisgICAgdG9wQ2FsbEZy
YW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmNvZGVCbG9jazsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tG
b3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisK
KyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgaWYg
KCF2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworCisgICAgLy8gV2UgbmVlZCB0byBpbmMgdGhlIGZyYW1lIG51bWJlciBiZWNh
dXNlIHRoZSBjYWxsZXIgd291bGQgY29uc2lkZXIKKyAgICAvLyBpdHMgb3duIGZyYW1lIGFzIGZy
YW1lIDAuIEhlbmNlLCB3ZSBuZWVkIGRpc2NvdW50IHRoZSBmcmFtZSBmb3IgdGhpcworICAgIC8v
IGZ1bmN0aW9uLgorICAgIHVuc2lnbmVkIGZyYW1lTnVtYmVyID0gdmFsdWUuYXNVSW50MzIoKSAr
IDE7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tGb3JGcmFtZShleGVjLCBm
cmFtZU51bWJlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJpdHdpc2Vf
Y2FzdDxkb3VibGU+KGNvZGVCbG9jaykpKTsKK30KKworc3RhdGljIENvZGVCbG9jayogY29kZUJs
b2NrRnJvbUFyZyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGlmICghdmFsdWUuaXNEb3VibGUoKSkg
eworICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGNvZGVCbG9jazogIiwgdmFsdWUsICJcbiIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPih2YWx1ZS5hc0RvdWJsZSgpKTsKKyAgICBpZiAo
aXNWYWxpZENvZGVCbG9jayhleGVjLCBjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gY29kZUJs
b2NrOworCisgICAgZGF0YUxvZ0YoIkludmFsaWQgY29kZUJsb2NrOiAlcCAiLCBjb2RlQmxvY2sp
OworICAgIGRhdGFMb2codmFsdWUsICJcbiIpOworICAgIHJldHVybiBudWxscHRyOworICAgIAor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U291
cmNlRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNv
ZGVCbG9ja0Zyb21BcmcoZXhlYyk7CisgICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgY29kZUJs
b2NrLT5kdW1wU291cmNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Q
cmludEJ5dGVDb2RlRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CisgICAgaWYgKGNvZGVCbG9jaykKKyAgICAg
ICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgIik7CisgICAgICAgIGRhdGFMb2coZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworY2xhc3MgUHJpbnRGcmFt
ZUZ1bmN0b3IgeworcHVibGljOgorICAgIGVudW0gQWN0aW9uIHsKKyAgICAgICAgUHJpbnRPbmUs
CisgICAgICAgIFByaW50QWxsCisgICAgfTsKKyAgICAKKyAgICBQcmludEZyYW1lRnVuY3RvcihB
Y3Rpb24gYWN0aW9uLCB1bnNpZ25lZCBmcmFtZXNUb1NraXApCisgICAgICAgIDogbV9hY3Rpb24o
YWN0aW9uKQorICAgICAgICAsIG1fZnJhbWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNp
dG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnJhbWUrKzsKKyAgICAgICAg
aWYgKG1fY3VycmVudEZyYW1lID4gbV9mcmFtZXNUb1NraXApCisgICAgICAgICAgICB2aXNpdG9y
LT5wcmludCgyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2FjdGlvbiA9PSBQcmludE9uZSAm
JiBtX2N1cnJlbnRGcmFtZSA+IG1fZnJhbWVzVG9Ta2lwKQorICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBBY3Rpb24gbV9hY3Rpb247CisgICAgdW5zaWdu
ZWQgbV9mcmFtZXNUb1NraXA7CisgICAgdW5zaWduZWQgbV9jdXJyZW50RnJhbWUgeyAwIH07Cit9
OworCitzdGF0aWMgdm9pZCBwcmludENhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5z
aWduZWQgZnJhbWVzVG9Ta2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNK
U0xvY2soY2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIFByaW50RnJhbWVGdW5jdG9y
IGZ1bmN0b3IoUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50T25lLCBmcmFtZXNUb1NraXApOworICAg
IGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKK30KKwordm9pZCBwcmludENhbGxGcmFtZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBwcmludENhbGxGcmFtZShjYWxsRnJhbWUsIDAp
OworfQorCitzdGF0aWMgdm9pZCBwcmludFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1
bnNpZ25lZCBmcmFtZXNUb1NraXApCit7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3du
c0pTTG9jayh0b3BDYWxsRnJhbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF0b3BDYWxs
RnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQcmludEZyYW1lRnVuY3RvciBmdW5jdG9yKFBy
aW50RnJhbWVGdW5jdG9yOjpQcmludEFsbCwgZnJhbWVzVG9Ta2lwKTsKKyAgICB0b3BDYWxsRnJh
bWUtPml0ZXJhdGUoZnVuY3Rvcik7Cit9CisKK3ZvaWQgcHJpbnRTdGFjayhDYWxsRnJhbWUqIHRv
cENhbGxGcmFtZSkKK3sKKyAgICBwcmludFN0YWNrKHRvcENhbGxGcmFtZSwgMCk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRDYWxsRnJhbWUo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIFdoZW4gdGhlIGNhbGxlcnMgY2FsbCB0aGlzIGZ1
bmN0aW9uLCB0aGV5IGFyZSBleHBlY3RpbmcgdG8gcHJpbnQgdGhlaXIKKyAgICAvLyBvd24gZnJh
bWUuIFNvIHNraXAgMSBmb3IgdGhpcyBmcmFtZS4KKyAgICBwcmludENhbGxGcmFtZShleGVjLCAx
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RhY2soRXhlY1N0
YXRlKiBleGVjKQoreworICAgIC8vIFdoZW4gdGhlIGNhbGxlcnMgY2FsbCB0aGlzIGZ1bmN0aW9u
LCB0aGV5IGFyZSBleHBlY3RpbmcgdG8gcHJpbnQgdGhlCisgICAgLy8gc3RhY2sgc3RhcnRpbmcg
dGhlaXIgb3duIGZyYW1lLiBTbyBza2lwIDEgZm9yIHRoaXMgZnJhbWUuCisgICAgcHJpbnRTdGFj
ayhleGVjLCAxKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCit2b2lkIHByaW50VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkYXRhTG9nKHZhbHVl
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcmlu
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAg
ICBkYXRhTG9nKCIgIik7CisgICAgICAgIGRhdGFMb2coZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
aSkpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCit2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNyYXNoIiwgZnVu
Y3Rpb25DcmFzaCwgMCk7CisgICAgCisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZmdUcnVlIiksIDAsIGZ1
bmN0aW9uREZHVHJ1ZSwgREZHVHJ1ZUludHJpbnNpYywgRG9udEVudW0gfCBKU0M6OkZ1bmN0aW9u
KTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAibGxpbnRUcnVlIiwg
ZnVuY3Rpb25MTGludFRydWUsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
ICJqaXRUcnVlIiwgZnVuY3Rpb25KSVRUcnVlLCAwKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCAiZ2MiLCBmdW5jdGlvbkdDLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCAiZWRlbkdDIiwgZnVuY3Rpb25FZGVuR0MsIDApOworICAgIAorICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJjb2RlQmxvY2tGb3JGcmFtZSIsIGZ1bmN0
aW9uQ29kZUJsb2NrRm9yRnJhbWUsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsICJwcmludFNvdXJjZUZvciIsIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IsIDEpOworICAgIGFk
ZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludEJ5dGVDb2RlRm9yIiwgZnVuY3Rpb25Q
cmludEJ5dGVDb2RlRm9yLCAxKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCAicHJpbnQiLCBmdW5jdGlvblByaW50LCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCAicHJpbnRDYWxsRnJhbWUiLCBmdW5jdGlvblByaW50Q2FsbEZyYW1lLCAwKTsK
KyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTdGFjayIsIGZ1bmN0aW9u
UHJpbnRTdGFjaywgMCk7CisKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJp
bnRWYWx1ZSIsIGZ1bmN0aW9uUHJpbnRWYWx1ZSwgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk1Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0RvbGxh
clZNUHJvdG90eXBlX2gKKyNkZWZpbmUgSlNEb2xsYXJWTVByb3RvdHlwZV9oCisKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEb2xsYXJWTVByb3Rv
dHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBK
U0RvbGxhclZNUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTRG9sbGFyVk1Q
cm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9sbGFy
Vk1Qcm90b3R5cGU+KHZtLmhlYXApKSBKU0RvbGxhclZNUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUp
OworICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwor
ICAgICAgICByZXR1cm4gcHJvdG90eXBlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNEb2xsYXJW
TVByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3Vt
ZW50cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRG9sbGFyVk1Q
cm90b3R5cGVfaAo=
</data>
<flag name="review"
          id="275765"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250968</attachid>
            <date>2015-04-16 16:11:06 -0700</date>
            <delta_ts>2015-04-16 16:11:06 -0700</delta_ts>
            <desc>patch 3: with fix for bitwise_cast complaint.</desc>
            <filename>bug-143809.patch</filename>
            <type>text/plain</type>
            <size>48997</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyOTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBA
QAorMjAxNS0wNC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkICR2bSBkZWJ1Z2dpbmcgdG9vbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MzgwOQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgorCisgICAgICAgIEZvciBkZWJ1Z2dpbmcgVk0gYnVncywgaXQgd291bGQgYmUgdXNlZnVs
IHRvIGJlIGFibGUgdG8gZHVtcCBWTSBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgZnJvbSBKUyBj
b2RlIHRoYXQgd2UgaW5zdHJ1bWVudC4gIFRvIHRoaXMgZW5kLCBsZXQncyBpbnRyb2R1Y2UgYQor
ICAgICAgICBKU19lbmFibGVEb2xsYXJWTSBvcHRpb24gdGhhdCwgaWYgdHJ1ZSwgaW5zdGFsbHMg
YW4gJHZtIHByb3BlcnR5IGludG8gZWFjaCBKUworICAgICAgICBnbG9iYWwgb2JqZWN0IGF0IGNy
ZWF0aW9uIHRpbWUuICBUaGUgJHZtIHByb3BlcnR5IHJlZmVycyB0byBhbiBvYmplY3QgdGhhdAor
ICAgICAgICBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXNlZnVsIHV0aWxpdHkgZnVuY3Rpb25z
LiAgRm9yIHRoaXMgaW5pdGlhbAorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgJHZtIHdpbGwgaGF2
ZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgICBjcmFzaCgpIC0gdHJpZ2dlciBhbiBpbnRl
bnRpb25hbCBjcmFzaC4KKworICAgICAgICAgICAgZGZnVHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlm
IHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIERGRyBjb21waWxlZCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorICAgICAgICAgICAgaml0VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGZ1
bmN0aW9uIGlzIGNvbXBpbGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQsIGVsc2UgcmV0dXJucyBmYWxz
ZS4KKyAgICAgICAgICAgIGxsaW50VHJ1ZSgpIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50
IGZ1bmN0aW9uIGlzIGludGVycHJldGVkIGJ5IHRoZSBMTElOVCwgZWxzZSByZXR1cm5zIGZhbHNl
LgorCisgICAgICAgICAgICBnYygpIC0gcnVucyBhIGZ1bGwgR0MuCisgICAgICAgICAgICBlZGVu
R0MoKSAtIHJ1bnMgYW4gZWRlbiBHQy4KKworICAgICAgICAgICAgY29kZUJsb2NrRm9yRnJhbWUo
ZnJhbWVOdW1iZXIpIC0gZ2V0cyB0aGUgY29kZUJsb2NrIGF0IHRoZSBzcGVjaWZpZWQgZnJhbWUg
KDAgPSBjdXJyZW50LCAxID0gY2FsbGVyLCBldGMpLgorICAgICAgICAgICAgcHJpbnRTb3VyY2VG
b3IoY29kZUJsb2NrKSAtIHByaW50cyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBjb2RlQmxvY2su
CisgICAgICAgICAgICBwcmludEJ5dGVDb2RlRm9yKGNvZGVCbG9jaykgLSBwcmludHMgdGhlIGJ5
dGVjb2RlIGZvciB0aGUgY29kZUJsb2NrLgorCisgICAgICAgICAgICBwcmludChzdHIpIC0gcHJp
bnRzIGEgc3RyaW5nIHRvIGRhdGFMb2cgb3V0cHV0LgorICAgICAgICAgICAgcHJpbnRDYWxsRnJh
bWUoKSAtIHByaW50cyB0aGUgY3VycmVudCBDYWxsRnJhbWUuCisgICAgICAgICAgICBwcmludFN0
YWNrKCkgLSBwcmludHMgdGhlIEpTIHN0YWNrLgorICAgICAgICAgICAgcHJpbnRJbnRlcm5hbCh2
YWx1ZSkgLSBwcmludHMgdGhlIEpTQyBpbnRlcm5hbCBpbmZvIGZvciB0aGUgc3BlY2lmaWVkIHZh
bHVlLgorCisgICAgICAgIFdpdGggSlNfZW5hYmxlRG9sbGFyVk09dHJ1ZSwgSlMgY29kZSBjYW4g
dXNlIHRoZSBhYm92ZSBmdW5jdGlvbnMgbGlrZSBzbzoKKworICAgICAgICAgICAgJHZtLnByaW50
KCJVc2luZyAkdm0gZmVhdHVyZXNcbiIpOworCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIC0gRlRMIGNvbXBpbGVkIGZ1bmN0aW9ucyBk
b24ndCBsaWtlIGl0IHdoZW4gd2UgdHJ5IHRvIGNvbXB1dGUgdGhlIENhbGxMaW5rU3RhdHVzLgor
ICAgICAgICAgIEhlbmNlLCB3ZSBza2lwIHRoaXMgc3RlcCBpZiB3ZSdyZSBkdW1waW5nIGFuIEZU
TCBjb2RlQmxvY2suCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0QW5kU3dlZXApOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0QWxsR2Fy
YmFnZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBkbyBhbiBF
ZGVuIGNvbGxlY3Rpb24gYW5kIHN3ZWVwLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6cHJpbnRJbmRlbnRzKToKKyAgICAgICAgKEpTQzo6
bG9nKToKKyAgICAgICAgKEpTQzo6bG9nRik6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6
RnJhbWU6OnByaW50KToKKyAgICAgICAgKEpTQzo6aml0VHlwZU5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpwcmludGlmKTogRGVsZXRlZC4KKyAgICAgICAgLSBNb2Rlcm5pemUgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KCksIGFuZCByZW1vdmUg
c29tZQorICAgICAgICAgIG5vdyByZWR1bmRhbnQgY29kZS4KKyAgICAgICAgLSBBbHNvIGZpeCBp
dCBzbyB0aGF0IGl0IGRvd25ncmFkZXMgZ3JhY2VmdWxseSB3aGVuIGVuY291bnRlcmluZyBpbmxp
bmVkIERGRworICAgICAgICAgIGFuZCBjb21waWxlZCBGVEwgZnVuY3Rpb25zLgorCisgICAgICAg
IChEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yOjpEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVk
LgorICAgICAgICAoZGVidWdQcmludENhbGxGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChkZWJ1
Z1ByaW50U3RhY2spOiBEZWxldGVkLgorICAgICAgICAtIHRoZXNlIGhhdmUgYmVlbiBtb3ZlZCBp
bnRvIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwLiAKKworICAgICAgICAqIGludGVycHJldGVyL1N0
YWNrVmlzaXRvci5oOgorICAgICAgICAtIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KCkgaXMg
bm93IGVuYWJsZWQgZm9yIHJlbGVhc2UgYnVpbGRzIGFzIHdlbGwgc28gdGhhdAorICAgICAgICAg
IHdlIGNhbiBjYWxsIGl0IGZyb20gJHZtLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgLSBBZGRlZCB0aGUgJHZtIGluc3RhbmNlIHRvIGds
b2JhbCBvYmplY3RzIGNvbmRpdGlvbmFsIG9uIHRoZSBKU0NfZW5hYmxlRG9sbGFyVk0KKyAgICAg
ICAgICBvcHRpb24uCisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgLSBB
ZGRlZCB0aGUgSlNDX2VuYWJsZURvbGxhclZNIG9wdGlvbi4KKworICAgICAgICAqIHRvb2xzL0pT
RG9sbGFyVk0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU0RvbGxhclZNOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpKU0Rv
bGxhclZNKToKKworICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgLSBUaGlzIGZpbGUgY29udGFpbnMgMiBzZXRzIG9mIGZ1bmN0aW9uczoKKwor
ICAgICAgICAgIGEuIGEgQysrIGltcGxlbWVudGF0aW9uIG9mIGRlYnVnZ2luZyB1dGlsaXR5IGZ1
bmN0aW9ucyB0aGF0IGFyZSBjYWxsYWJsZSB3aGVuCisgICAgICAgICAgICAgZG9pbmcgZGVidWdn
aW5nIGZyb20gbGxkYi4gIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZXNlIGZ1bmN0aW9ucyB0
cnkgdG8KKyAgICAgICAgICAgICBiZSBjYXV0aW91cyBhbmQgbm90IGNhdXNlIHVuaW50ZW5kZWQg
Y3Jhc2hlcyBzaG91bGQgdGhlIHVzZXIgY2FsbCB0aGVtIHdpdGgKKyAgICAgICAgICAgICB0aGUg
d3JvbmcgaW5mby4gIEhlbmNlLCB0aGV5IGFyZSBkZXNpZ25lZCB0byBiZSByb2J1c3QgcmF0aGVy
IHRoYW4gc3BlZWR5LgorCisgICAgICAgICAgYi4gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMg
b2YgSlMgZnVuY3Rpb25zIGluIHRoZSAkdm0gb2JqZWN0LiAgV2hlcmUgdGhlcmUKKyAgICAgICAg
ICAgICBpcyBvdmVybGFwcGluZyBmdW5jdGlvbmFsaXR5LCB0aGVzZSBhcmUgYnVpbHQgb24gdG9w
IG9mIHRoZSBDKysgZnVuY3Rpb25zCisgICAgICAgICAgICAgYWJvdmUgdG8gZG8gdGhlIHdvcmsu
CisKKyAgICAgICAgICBOb3RlOiBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBhbGwgb2YgdGhl
ICR2bSBmdW5jdGlvbnMgdG8gaGF2ZSBhIEMrKworICAgICAgICAgIGNvdW50ZXJwYXJ0IGZvciBs
bGRiIGRlYnVnZ2luZy4gIEZvciBleGFtcGxlLCB0aGUgJHZtLmRmZ1RydWUoKSBmdW5jdGlvbiBp
cworICAgICAgICAgIG9ubHkgdXNlZnVsIGZvciBKUyBjb2RlLCBhbmQgd29ya3MgdmlhIHRoZSBE
RkcgaW50cmluc2ljcyBtZWNoYW5pc20uCisgICAgICAgICAgV2hlbiBkb2luZyBkZWJ1Z2dpbmcg
dmlhIGxsZGIsIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGN1cnJlbnRseQorICAgICAg
ICAgIGV4ZWN1dGluZyBKUyBmdW5jdGlvbiBjYW4gYmUgZ290dGVuIGJ5IGR1bXBpbmcgdGhlIGN1
cnJlbnQgQ2FsbEZyYW1lIGluc3RlYWQuCisKKyAgICAgICAgKEpTQzo6Y3VycmVudFRocmVhZE93
bnNKU0xvY2spOgorICAgICAgICAoSlNDOjplbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayk6
CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6IC0gJHZtLmNyYXNoKCkKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25ERkdUcnVlKTogLSAkdm0uZGZnVHJ1ZSgpCisgICAgICAgIChKU0M6OkNhbGxlckZyYW1l
SklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IpOgorICAgICAgICAoSlND
OjpDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6
Q2FsbGVyRnJhbWVKSVRUeXBlRnVuY3Rvcjo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uTExpbnRUcnVlKTogLSAkdm0ubGxpbnRUcnVlKCkKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25K
SVRUcnVlKTogLSAkdm0uaml0VHJ1ZSgpCisgICAgICAgIChKU0M6OmdjKToKKyAgICAgICAgKEpT
Qzo6ZnVuY3Rpb25HQyk6IC0gJHZtLmdjKCkKKyAgICAgICAgKEpTQzo6ZWRlbkdDKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25FZGVuR0MpOiAtICR2bS5lZGVuR0MoKQorICAgICAgICAoSlNDOjpp
c1ZhbGlkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Y29kZUJsb2NrRm9yRnJhbWUpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lKTogLSAkdm0uY29kZUJsb2NrRm9y
RnJhbWUoZnJhbWVOdW1iZXIpCisgICAgICAgIChKU0M6OmNvZGVCbG9ja0Zyb21BcmcpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvblByaW50U291cmNlRm9yKTogLSAkdm0ucHJpbnRTb3VyY2VGb3Io
Y29kZUJsb2NrKQorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IpOiAtICR2
bS5wcmludEJ5dGVjb2RlRm9yKGNvZGVCbG9jaykKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcmlu
dCk6IC0gJHZtLnByaW50KHN0cikKKyAgICAgICAgKEpTQzo6UHJpbnRGcmFtZUZ1bmN0b3I6OlBy
aW50RnJhbWVGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6UHJpbnRGcmFtZUZ1bmN0b3I6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoSlNDOjpwcmludENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OnBy
aW50U3RhY2spOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Q2FsbEZyYW1lKTogLSAkdm0u
cHJpbnRDYWxsRnJhbWUoKQorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50U3RhY2spOiAtICR2
bS5wcmludFN0YWNrKCkKKyAgICAgICAgKEpTQzo6cHJpbnRWYWx1ZSk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uUHJpbnRWYWx1ZSk6IC0gJHZtLnByaW50VmFsdWUoKQorICAgICAgICAoSlNDOjpK
U0RvbGxhclZNUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTVByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3Rv
dHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6SlNEb2xsYXJW
TVByb3RvdHlwZSk6CisKIDIwMTUtMDQtMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gVXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgQEBp
dGVyYXRvciBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE4MjkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCiAgICAgdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHAKICAgICB0b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKKyAgICB0b29scy9KU0RvbGxh
clZNLmNwcAorICAgIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCiAKICAgICB5YXJyL1Jl
Z3VsYXJFeHByZXNzaW9uLmNwcAogICAgIHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4Mjkx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1Miw2ICs4NTIsOCBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGUuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xGdW5jdGlvbk92ZXJyaWRlcy5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZNLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxSZWd1bGFyRXhwcmVzc2lvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyckludGVycHJldGVyLmNwcCIg
Lz4KQEAgLTE2OTgsNiArMTcwMCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29s
c1xDb2RlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29k
ZVByb2ZpbGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcRnVuY3Rp
b25PdmVycmlkZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9s
bGFyVk0uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXEpTRG9sbGFyVk1Q
cm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVU
cmVlTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcVGllcmVkTU1h
cEFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFJlZ3VsYXJFeHBy
ZXNzaW9uLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHRvb2xzXEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCI+CiAgICAgICA8RmlsdGVyPnRvb2xz
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0
b29sc1xKU0RvbGxhclZNLmNwcCI+CisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCI+CisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CisgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFJlZ3VsYXJFeHByZXNzaW9u
LmNwcCI+CiAgICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAg
LTI5NzIsNiArMjk3OCwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcRnVu
Y3Rpb25PdmVycmlkZXMuaCI+CiAgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xKU0RvbGxhclZNLmgi
PgorICAgICAgPEZpbHRlcj50b29sczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcSlNEb2xsYXJWTVByb3RvdHlwZS5oIj4KKyAgICAg
IDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5oIj4KICAgICAgIDxGaWx0ZXI+dG9v
bHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY0
NCw2ICsxNjQ0LDEwIEBACiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5
QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEJGRjJCMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
Y3BwICovOyB9OwogCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlk
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEJG
RjJBMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovOyB9OworCQlGRTM4
NEVFNTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyog
SlNEb2xsYXJWTS5jcHAgKi87IH07CisJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0Rv
bGxhclZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTM4NEVFMjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzg0RUUzMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9s
bGFyVk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1OTMy
QTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyog
Vk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZN
RW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFN0JBNjBGMUExQTdDRUMw
MEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmll
ci5jcHAgKi87IH07CkBAIC0zNDIwLDYgKzM0MjQsMTAgQEAKIAkJRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlk
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25PdmVy
cmlkZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRCRkYyQTFBRDQ3NkU3
MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25PdmVycmlkZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEb2xsYXJWTS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRG9sbGFyVk0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
b2xsYXJWTVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzg0
RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRG9sbGFyVk1Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29w
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZN
RW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRDFBMUE3
Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00NzQ2LDYgKzQ3NTQsMTAgQEAKIAkJCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyog
Q29kZVByb2ZpbGluZy5oICovLAogCQkJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5j
dGlvbk92ZXJyaWRlcy5jcHAgKi8sCiAJCQkJRkU0QkZGMkExQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1
bmN0aW9uT3ZlcnJpZGVzLmggKi8sCisJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk0uY3BwICovLAorCQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggKi8sCisJCQkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90
b3R5cGUuY3BwICovLAorCQkJCUZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggKi8sCiAJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVU
cmVlTm9kZS5oICovLAogCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFw
QXJyYXkuaCAqLywKIAkJCSk7CkBAIC01NTQ3LDYgKzU1NTksOCBAQAogCQkJCUE1RUE3MEVDMTlG
NUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYg
LyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGOUIx
NTFBMUQ0M0ZBMDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM4NEVFNjFB
RERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkFEMkNC
NEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUVGOUIxNjFBMUQ0NDAwMDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCkBAIC03MDE0LDYgKzcw
MjgsNyBAQAogCQkJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTgg
LyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNG
NTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRTM4NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBDNzI1MzIg
LyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcy
RjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03MjY5LDYgKzcyODQsNyBAQAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkQ0REU4
MTk4MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkUzODRFRTUxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFMDUwMTcxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMxLDcg
KzUzMSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYKICAgICAg
ICAgICAgIGlmICh0YXJnZXQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCglcCwg
ZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKICAgICAgICAgfQotICAg
ICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhp
cywgbG9jYXRpb24sIG1hcCksICIpIik7CisgICAgICAgIAorICAgICAgICBpZiAoaml0VHlwZSgp
ICE9IEpJVENvZGU6OkZUTEpJVCkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHN0YXR1cygiLCBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwgIikiKTsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MiwxMiArOTkyLDEyIEBA
IHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX3Nsb3RWaXNp
dG9yLnVuY29uZGl0aW9uYWxseUFwcGVuZChjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKIH0K
IAotdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCit2b2lkIEhlYXA6OmNvbGxlY3RBbmRT
d2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAgIGlmICghbV9pc1NhZmVU
b0NvbGxlY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbGxlY3QoRnVsbENvbGxlY3Rpb24p
OworICAgIGNvbGxlY3QoY29sbGVjdGlvblR5cGUpOwogCiAgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbjogU3dlZXBpbmciKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDggQEAg
cHVibGljOgogICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29s
bGVjdCA9IHRydWU7IH0KICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxl
Y3RBbGxHYXJiYWdlKCk7CisgICAgdm9pZCBjb2xsZWN0QWxsR2FyYmFnZSgpIHsgY29sbGVjdEFu
ZFN3ZWVwKEZ1bGxDb2xsZWN0aW9uKTsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29s
bGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUgPSBBbnlDb2xsZWN0aW9u
KTsKICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOwog
ICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYg
aXQgZGlkIGNvbGxlY3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTgyOTExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxMywzNCArMzEzLDIzIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6c2V0VG9FbmQo
KQogI2VuZGlmCiB9CiAKLSNpZm5kZWYgTkRFQlVHCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBqaXRU
eXBlTmFtZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBl
KSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpOb25lOiByZXR1cm4gIk5vbmUiOwotICAgIGNhc2UgSklU
Q29kZTo6SG9zdENhbGxUaHVuazogcmV0dXJuICJIb3N0Q2FsbFRodW5rIjsKLSAgICBjYXNlIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bms6IHJldHVybiAiSW50ZXJwcmV0ZXJUaHVuayI7Ci0gICAg
Y2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDogcmV0dXJuICJCYXNlbGluZUpJVCI7Ci0gICAgY2Fz
ZSBKSVRDb2RlOjpERkdKSVQ6IHJldHVybiAiREZHSklUIjsKLSAgICBjYXNlIEpJVENvZGU6OkZU
TEpJVDogcmV0dXJuICJGVExKSVQiOwotICAgIH0KLSAgICByZXR1cm4gIjx1bmtub3duPiI7Ci19
Ci0KIHN0YXRpYyB2b2lkIHByaW50SW5kZW50cyhpbnQgbGV2ZWxzKQogewogICAgIHdoaWxlIChs
ZXZlbHMtLSkKICAgICAgICAgZGF0YUxvZ0ZTdHJpbmcoIiAgICIpOwogfQogCi1zdGF0aWMgdm9p
ZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQordGVt
cGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGxvZyh1bnNpZ25lZCBpbmRlbnQsIGNvbnN0
IFR5cGVzJi4uLiB2YWx1ZXMpCiB7Ci0gICAgdmFfbGlzdCBhcmdMaXN0OwotICAgIHZhX3N0YXJ0
KGFyZ0xpc3QsIGZvcm1hdCk7CisgICAgcHJpbnRJbmRlbnRzKGluZGVudCk7CisgICAgZGF0YUxv
Zyh2YWx1ZXMuLi4pOworfQogCi0gICAgaWYgKGluZGVudExldmVscykKLSAgICAgICAgcHJpbnRJ
bmRlbnRzKGluZGVudExldmVscyk7Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3ZvaWQg
bG9nRih1bnNpZ25lZCBpbmRlbnQsIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgVHlwZXMmLi4u
IHZhbHVlcykKK3sKKyAgICBwcmludEluZGVudHMoaW5kZW50KTsKIAogI2lmIENPTVBJTEVSKENM
QU5HKSB8fCBDT01QSUxFUihHQ0MpCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKQEAgLTM0
OCwxMjEgKzMzNyw4MCBAQCBzdGF0aWMgdm9pZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNv
CiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1mb3JtYXQtYXR0cmli
dXRlIgogI2VuZGlmCiAKLSAgICBXVEY6OmRhdGFMb2dGVihmb3JtYXQsIGFyZ0xpc3QpOworICAg
IGRhdGFMb2dGKGZvcm1hdCwgdmFsdWVzLi4uKTsKIAogI2lmIENPTVBJTEVSKENMQU5HKSB8fCBD
T01QSUxFUihHQ0MpCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCi0KLSAgICB2
YV9lbmQoYXJnTGlzdCk7CiB9CiAKLXZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50
IGluZGVudExldmVsKQordm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpwcmludChpbnQgaW5kZW50
KQogewotICAgIGludCBpID0gaW5kZW50TGV2ZWw7Ci0KICAgICBpZiAoIXRoaXMtPmNhbGxGcmFt
ZSgpKSB7Ci0gICAgICAgIHByaW50aWYoaSwgImZyYW1lIDB4MFxuIik7CisgICAgICAgIGxvZyhp
bmRlbnQsICJmcmFtZSAweDBcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBwcmludGlmKGksICJm
cmFtZSAlcCB7XG4iLCB0aGlzLT5jYWxsRnJhbWUoKSk7CisgICAgbG9nRihpbmRlbnQsICJmcmFt
ZSAlcCB7XG4iLCB0aGlzLT5jYWxsRnJhbWUoKSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IG1fY2FsbEZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxs
ZXJGcmFtZSgpOwotICAgIHZvaWQqIHJldHVyblBDID0gY2FsbEZyYW1lLT5oYXNSZXR1cm5QQygp
ID8gY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCkgOiBudWxscHRyOworICAgIHsKKyAgICAg
ICAgaW5kZW50Kys7CiAKLSAgICBwcmludGlmKGksICIgICBuYW1lICclcydcbiIsIGZ1bmN0aW9u
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHByaW50aWYoaSwgIiAgIHNvdXJjZVVSTCAnJXMn
XG4iLCBzb3VyY2VVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBtX2NhbGxGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IHRo
aXMtPmNhbGxlckZyYW1lKCk7CisgICAgICAgIHZvaWQqIHJldHVyblBDID0gY2FsbEZyYW1lLT5o
YXNSZXR1cm5QQygpID8gY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCkgOiBudWxscHRyOwog
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgcHJpbnRpZihpLCAiICAgaXNJbmxpbmVkRnJhbWUg
JWRcbiIsIGlzSW5saW5lZEZyYW1lKCkpOwotICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAg
ICAgICBwcmludGlmKGksICIgICBJbmxpbmVDYWxsRnJhbWUgJXBcbiIsIG1faW5saW5lQ2FsbEZy
YW1lKTsKLSNlbmRpZgorICAgICAgICBsb2coaW5kZW50LCAibmFtZTogIiwgZnVuY3Rpb25OYW1l
KCksICJcbiIpOworICAgICAgICBsb2coaW5kZW50LCAic291cmNlVVJMOiAiLCBzb3VyY2VVUkwo
KSwgIlxuIik7CiAKLSAgICBwcmludGlmKGksICIgICBjYWxsZWUgJXBcbiIsIGNhbGxlZSgpKTsK
LSAgICBwcmludGlmKGksICIgICByZXR1cm5QQyAlcFxuIiwgcmV0dXJuUEMpOwotICAgIHByaW50
aWYoaSwgIiAgIGNhbGxlckZyYW1lICVwXG4iLCBjYWxsZXJGcmFtZSk7Ci0gICAgdW5zaWduZWQg
bG9jYXRpb25SYXdCaXRzID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzUmF3Qml0cygpOwotICAgIHBy
aW50aWYoaSwgIiAgIHJhd0xvY2F0aW9uQml0cyAldSAweCV4XG4iLCBsb2NhdGlvblJhd0JpdHMs
IGxvY2F0aW9uUmF3Qml0cyk7Ci0gICAgcHJpbnRpZihpLCAiICAgY29kZUJsb2NrICVwXG4iLCBj
b2RlQmxvY2spOwotICAgIGlmIChjb2RlQmxvY2spIHsKLSAgICAgICAgSklUQ29kZTo6SklUVHlw
ZSBqaXRUeXBlID0gY29kZUJsb2NrLT5qaXRUeXBlKCk7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUt
Pmhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBwcmludGlmKGksICIgICAgICBieXRlY29kZU9mZnNldCAldSAlcCAvICV6dVxu
IiwgYnl0ZWNvZGVPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5dGVjb2RlT2Zmc2V0
KSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogI2lmIEVOQUJMRShERkdfSklU
KQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4
ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAgICAgICAgICBw
cmludGlmKGksICIgICAgICBjb2RlT3JpZ2luSWRleCAldSAlcCAvICV6dVxuIiwgY29kZU9yaWdp
bkluZGV4LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb2RlT3JpZ2luSW5kZXgpLCBjb2RlQmxv
Y2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIHVu
c2lnbmVkIGxpbmUgPSAwOwotICAgICAgICB1bnNpZ25lZCBjb2x1bW4gPSAwOwotICAgICAgICBj
b21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwotICAgICAgICBwcmludGlmKGksICIg
ICAgICBsaW5lICVkXG4iLCBsaW5lKTsKLSAgICAgICAgcHJpbnRpZihpLCAiICAgICAgY29sdW1u
ICVkXG4iLCBjb2x1bW4pOwotICAgICAgICBwcmludGlmKGksICIgICAgICBqaXRUeXBlICVkIDwl
cz4gaXNPcHRpbWl6aW5nSklUICVkXG4iLCBqaXRUeXBlLCBqaXRUeXBlTmFtZShqaXRUeXBlKSwg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKTsKKyAgICAgICAgbG9nKGluZGVudCwg
ImlzSW5saW5lZEZyYW1lOiAiLCBpc0lubGluZWRGcmFtZSgpLCAiXG4iKTsKKyAgICAgICAgaWYg
KGlzSW5saW5lZEZyYW1lKCkpCisgICAgICAgICAgICBsb2dGKGluZGVudCwgIklubGluZUNhbGxG
cmFtZTogJXBcbiIsIG1faW5saW5lQ2FsbEZyYW1lKTsKKyNlbmRpZgorCisgICAgICAgIGxvZ0Yo
aW5kZW50LCAiY2FsbGVlOiAlcFxuIiwgY2FsbGVlKCkpOworICAgICAgICBsb2dGKGluZGVudCwg
InJldHVyblBDOiAlcFxuIiwgcmV0dXJuUEMpOworICAgICAgICBsb2dGKGluZGVudCwgImNhbGxl
ckZyYW1lOiAlcFxuIiwgY2FsbGVyRnJhbWUpOworICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJh
d0JpdHMgPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNSYXdCaXRzKCk7CisgICAgICAgIGxvZ0YoaW5k
ZW50LCAicmF3TG9jYXRpb25CaXRzOiAldSAweCV4XG4iLCBsb2NhdGlvblJhd0JpdHMsIGxvY2F0
aW9uUmF3Qml0cyk7CisgICAgICAgIGxvZ0YoaW5kZW50LCAiY29kZUJsb2NrOiAlcCAiLCBjb2Rl
QmxvY2spOworICAgICAgICBpZiAoY29kZUJsb2NrKQorICAgICAgICAgICAgZGF0YUxvZygqY29k
ZUJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jayAm
JiAhaXNJbmxpbmVkRnJhbWUoKSkgeworICAgICAgICAgICAgaW5kZW50Kys7CisKKyAgICAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmxvY2F0aW9u
QXNCeXRlY29kZU9mZnNldCgpOworICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJieXRlY29k
ZU9mZnNldDogIiwgYnl0ZWNvZGVPZmZzZXQsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCksICJcbiIpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBwcmludGlm
KGksICIgICAgICBoYXNDb2RlT3JpZ2lucyAlZFxuIiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lu
cygpKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgewotICAgICAg
ICAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOwotICAg
ICAgICAgICAgcHJpbnRpZihpLCAiICAgICAgICAgaml0Q29kZSAlcCBzdGFydCAlcCBlbmQgJXBc
biIsIGppdENvZGUsIGppdENvZGUtPnN0YXJ0KCksIGppdENvZGUtPmVuZCgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nKGluZGVudCwgImhhc0NvZGVPcmlnaW5z
OiAiLCBjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCksICJcbiIpOworICAgICAgICAgICAgICAg
IGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdp
bkluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJjb2RlT3JpZ2luSW5k
ZXg6ICIsIGNvZGVPcmlnaW5JbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCku
c2l6ZSgpLCAiXG4iKTsKKworICAgICAgICAgICAgICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGpp
dFR5cGUgIT0gSklUQ29kZTo6RlRMSklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKSVRD
b2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCkuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dGKGluZGVudCwgImppdENvZGU6ICVwIHN0YXJ0ICVwIGVuZCAlcFxuIiwg
aml0Q29kZSwgaml0Q29kZS0+c3RhcnQoKSwgaml0Q29kZS0+ZW5kKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnNpZ25lZCBsaW5lID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9
IDA7CisgICAgICAgICAgICBjb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOworICAg
ICAgICAgICAgbG9nKGluZGVudCwgImxpbmU6ICIsIGxpbmUsICJcbiIpOworICAgICAgICAgICAg
bG9nKGluZGVudCwgImNvbHVtbjogIiwgY29sdW1uLCAiXG4iKTsKKworICAgICAgICAgICAgaW5k
ZW50LS07CiAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICBpbmRlbnQtLTsKICAgICB9Ci0gICAg
cHJpbnRpZihpLCAifVxuIik7CisgICAgbG9nKGluZGVudCwgIn1cbiIpOwogfQogCi0jZW5kaWYg
Ly8gTkRFQlVHCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwotCi0jaWZuZGVmIE5ERUJVRwotdXNpbmcg
SlNDOjpTdGFja1Zpc2l0b3I7Ci0KLS8vIEZvciBkZWJ1Z2dpbmcgdXNlCi1KU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGRlYnVnUHJpbnRDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKLUpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVidWdQcmludFN0YWNrKEpTQzo6Q2FsbEZyYW1lKiB0b3BDYWxsRnJh
bWUpOwotCi1jbGFzcyBEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVt
IEFjdGlvbiB7Ci0gICAgICAgIFByaW50T25lLAotICAgICAgICBQcmludEFsbAotICAgIH07Ci0K
LSAgICBEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yKEFjdGlvbiBhY3Rpb24pCi0gICAgICAgIDogbV9h
Y3Rpb24oYWN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBv
cGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHZpc2l0b3It
PnByaW50KDIpOwotICAgICAgICByZXR1cm4gbV9hY3Rpb24gPT0gUHJpbnRBbGwgPyBTdGFja1Zp
c2l0b3I6OkNvbnRpbnVlIDogU3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBBY3Rpb24gbV9hY3Rpb247Ci19OwotCi12b2lkIGRlYnVnUHJpbnRDYWxsRnJhbWUoSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIERlYnVnUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihEZWJ1Z1ByaW50RnJh
bWVGdW5jdG9yOjpQcmludE9uZSk7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwot
fQotCi12b2lkIGRlYnVnUHJpbnRTdGFjayhKU0M6OkNhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQot
ewotICAgIGlmICghdG9wQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRGVidWdQcmlu
dEZyYW1lRnVuY3RvciBmdW5jdG9yKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50QWxsKTsK
LSAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLSNlbmRpZiAvLyAhTkRF
QlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5oCShyZXZpc2lvbiAxODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDcgQEAg
cHVibGljOgogICAgICAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fVk1FbnRyeUZyYW1lOyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KICAgICAgICAgCi0jaWZuZGVmIE5ERUJVRwogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50KGludCBpbmRlbnRMZXZlbCk7Ci0jZW5k
aWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1lKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAx
ODI5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAKICNpbmNsdWRlICJKU0NvbnNvbGUu
aCIKICNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCiAjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlw
ZS5oIgorI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKKyNpbmNsdWRlICJKU0RvbGxhclZNUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25OYW1l
U2NvcGUuaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oIgpAQCAtNDUwLDYgKzQ1MiwxMyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVyCiAgICAgSlNDb25zb2xlKiBjb25zb2xlT2JqZWN0ID0gSlNDb25zb2xlOjpj
cmVhdGUodm0sIG1fY29uc29sZVN0cnVjdHVyZS5nZXQoKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbnNvbGUiKSwg
Y29uc29sZU9iamVjdCwgRG9udEVudW0pOwogCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmVu
YWJsZURvbGxhclZNKCkpKSB7CisgICAgICAgIEpTRG9sbGFyVk1Qcm90b3R5cGUqIGRvbGxhclZN
UHJvdG90eXBlID0gSlNEb2xsYXJWTVByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBKU0RvbGxh
clZNUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSk7CisgICAgICAgIG1fZG9sbGFyVk1TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0Rv
bGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGRvbGxhclZNUHJvdG90eXBlKSk7Cisg
ICAgICAgIEpTRG9sbGFyVk0qIGRvbGxhclZNID0gSlNEb2xsYXJWTTo6Y3JlYXRlKHZtLCBtX2Rv
bGxhclZNU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIiR2bSIpLCBkb2xsYXJWTSwgRG9u
dEVudW0pOworICAgIH0KKwogICAgIHJlc2V0UHJvdG90eXBlKHZtLCBwcm90b3R5cGUoKSk7CiB9
CiAKQEAgLTcyOSw2ICs3MzgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnRXhwTWF0Y2hlc0Fy
cmF5U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdFeHBT
dHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NvbnNvbGVTdHJ1
Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2RvbGxhclZNU3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9u
U3RydWN0dXJlKTsKIAogI2lmIEVOQUJMRShQUk9NSVNFUykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTgyOTExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX2NvbnNvbGVTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9k
b2xsYXJWTVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFs
RnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9p
dGVyYXRvclJlc3VsdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4MjkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIGZpcmVFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0ZXIsIDAsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZl
cmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enosIGZhbHNlLCBudWxscHRyKSBcCiAgICAgXAor
ICAgIHYoYm9vbCwgZW5hYmxlRG9sbGFyVk0sIGZhbHNlLCAiaW5zdGFsbHMgdGhlICR2bSBkZWJ1
Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2JqZWN0cyIpIFwKICAgICB2KG9wdGlvblN0cmluZywgZnVu
Y3Rpb25PdmVycmlkZXMsIG51bGxwdHIsICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBm
b3IgZnVuY3Rpb24gYm9kaWVzIikgXAogCiBjbGFzcyBPcHRpb25zIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RvbGxhclZNLmgiCisKKyNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8g
PSB7ICJEb2xsYXJWTSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNE
b2xsYXJWTSkgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpT
RG9sbGFyVk1faAorI2RlZmluZSBKU0RvbGxhclZNX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworICAgIAorY2xhc3MgSlNEb2xsYXJWTSA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNEb2xs
YXJWTSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBKU0RvbGxhclZNKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9s
bGFyVk0+KHZtLmhlYXApKSBKU0RvbGxhclZNKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBKU0RvbGxhclZNKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRG9sbGFyVk1faApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0RvbGxhclZNUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZm9s
bG93aW5nIGFyZSBleHBvcnRlZCBiZWNhdXNlIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxh
YmxlIGZyb20KKy8vIGxsZGIuIFRoZSBKUyB2ZXJzaW9ucyBpbiBKU0RvbGxhclZNUHJvdG90eXBl
IGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlc2UuCisKK0pTX0VYUE9SVF9QUklWQVRFIGJv
b2wgY3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGdjKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlZGVuR0MoRXhl
Y1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSBib29sIGlzVmFsaWRDb2RlQmxvY2soRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKik7CitKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGNvZGVCbG9j
a0ZvckZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZU51bWJlcik7
CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50Q2FsbEZyYW1lKENhbGxGcmFtZSopOworSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsK
K0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRWYWx1ZShKU1ZhbHVlKTsKKworYm9vbCBjdXJy
ZW50VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4ZWMt
PnZtKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7Cit9CisKK3N0YXRp
YyBib29sIGVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBpZiAoY3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRhdGFMb2coIkVSUk9SOiBjdXJyZW50IHRocmVhZCBkb2VzIG5vdCBvd24gdGhl
IEpTTG9ja1xuIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2NvbnN0IENsYXNzSW5mbyBK
U0RvbGxhclZNUHJvdG90eXBlOjpzX2luZm8gPSB7ICJEb2xsYXJWTVByb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEb2xsYXJWTVByb3RvdHlwZSkgfTsK
KworCit2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24g
ZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKK3sKKyAgICBJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0KHZt
LCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1l
bnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOworfQorCitzdGF0aWMgTk9fUkVU
VVJOIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmFzaChFeGVjU3RhdGUq
KQoreworICAgIENSQVNIKCk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uREZHVHJ1ZShFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Cit9CisKK2NsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1
bmN0b3IgeworcHVibGljOgorICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IoKQorICAgICAg
ICA6IG1fY3VycmVudEZyYW1lKDApCisgICAgICAgICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUp
CisgICAgeworICAgIH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysg
PiAxKSB7CisgICAgICAgICAgICBtX2ppdFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0
VHlwZSgpOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisgICAgCisg
ICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9jdXJyZW50RnJhbWU7CisgICAgSklUQ29kZTo6SklUVHlw
ZSBtX2ppdFR5cGU7Cit9OworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxMaW50VHJ1ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIENhbGxlckZy
YW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKKyAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlwZSgpID09
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBp
ZiAoIWV4ZWMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgQ2FsbGVyRnJhbWVKSVRUeXBlRnVuY3RvciBmdW5jdG9yOworICAgIGV4ZWMtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZnVuY3Rv
ci5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKK30KKwordm9pZCBnYyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhl
eGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJh
Z2UoKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uR0MoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGdjKGV4ZWMpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3ZvaWQgZWRlbkdDKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGV4ZWMpKQor
ICAgICAgICByZXR1cm47CisgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0QW5kU3dlZXAoRWRlbkNv
bGxlY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZWRlbkdDKGV4ZWMpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK2Jvb2wgaXNWYWxpZENv
ZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY2FuZGlkYXRlKQoreworICAgIGlm
ICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29kZUJsb2NrVmFsaWRhdGlvbkZ1bmN0b3IgeworICAg
ICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvcihDb2RlQmxvY2sqIGNhbmRpZGF0ZSkKKyAg
ICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0ZSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgPT0gY2FuZGlkYXRlKQorICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRhdGU7CisgICAgICAgIGJv
b2wgZm91bmQgeyBmYWxzZSB9OworICAgIH07CisgICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvciBmdW5jdG9yKGNhbmRpZGF0ZSk7Cisg
ICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9y
LmZvdW5kOworfQorCitDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckZyYW1lKENhbGxGcmFtZSogdG9w
Q2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZU51bWJlcikKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJl
bnRUaHJlYWRPd25zSlNMb2NrKHRvcENhbGxGcmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGlmICghdG9wQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICBzdHJ1Y3QgRmV0Y2hDb2RlQmxvY2tGdW5jdG9yIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEZldGNoQ29kZUJsb2NrRnVuY3Rvcih1bnNpZ25lZCB0YXJnZXRGcmFtZU51bWJlcikK
KyAgICAgICAgICAgIDogdGFyZ2V0RnJhbWUodGFyZ2V0RnJhbWVOdW1iZXIpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJl
bnRGcmFtZSsrOworICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA9PSB0YXJnZXRGcmFtZSkg
eworICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOworICAg
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0RnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRGcmFtZSB7IDAgfTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgeyBudWxscHRy
IH07CisgICAgfTsKKyAgICAKKyAgICBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVuY3RvcihmcmFt
ZU51bWJlcik7CisgICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVy
biBmdW5jdG9yLmNvZGVCbG9jazsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgaWYgKCF2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgLy8gV2UgbmVlZCB0byBp
bmMgdGhlIGZyYW1lIG51bWJlciBiZWNhdXNlIHRoZSBjYWxsZXIgd291bGQgY29uc2lkZXIKKyAg
ICAvLyBpdHMgb3duIGZyYW1lIGFzIGZyYW1lIDAuIEhlbmNlLCB3ZSBuZWVkIGRpc2NvdW50IHRo
ZSBmcmFtZSBmb3IgdGhpcworICAgIC8vIGZ1bmN0aW9uLgorICAgIHVuc2lnbmVkIGZyYW1lTnVt
YmVyID0gdmFsdWUuYXNVSW50MzIoKSArIDE7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
b2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFtZU51bWJlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGJpdHdpc2VfY2FzdDxkb3VibGU+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KGNvZGVCbG9jaykpKSk7Cit9CisKK3N0YXRpYyBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zy
b21BcmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBpZiAoIXZhbHVlLmlzRG91YmxlKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygiSW52YWxpZCBjb2RlQmxvY2s6ICIsIHZhbHVlLCAiXG4iKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBy
ZWludGVycHJldF9jYXN0PENvZGVCbG9jayo+KGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUu
YXNEb3VibGUoKSkpOworICAgIGlmIChpc1ZhbGlkQ29kZUJsb2NrKGV4ZWMsIGNvZGVCbG9jaykp
CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisKKyAgICBkYXRhTG9nRigiSW52YWxpZCBjb2Rl
QmxvY2s6ICVwICIsIGNvZGVCbG9jayk7CisgICAgZGF0YUxvZyh2YWx1ZSwgIlxuIik7CisgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsKKyAgICBpZiAoY29k
ZUJsb2NrKQorICAgICAgICBjb2RlQmxvY2stPmR1bXBTb3VyY2UoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsKKyAg
ICBpZiAoY29kZUJsb2NrKQorICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29kZSgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsr
aSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAiKTsKKyAgICAgICAg
ZGF0YUxvZyhleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworfQorCitjbGFzcyBQcmludEZyYW1lRnVuY3RvciB7CitwdWJsaWM6CisgICAgZW51bSBBY3Rp
b24geworICAgICAgICBQcmludE9uZSwKKyAgICAgICAgUHJpbnRBbGwKKyAgICB9OworICAgIAor
ICAgIFByaW50RnJhbWVGdW5jdG9yKEFjdGlvbiBhY3Rpb24sIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCkKKyAgICAgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgICAgICwgbV9mcmFtZXNUb1NraXAo
ZnJhbWVzVG9Ta2lwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0
dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBtX2N1
cnJlbnRGcmFtZSsrOworICAgICAgICBpZiAobV9jdXJyZW50RnJhbWUgPiBtX2ZyYW1lc1RvU2tp
cCkKKyAgICAgICAgICAgIHZpc2l0b3ItPnByaW50KDIpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fYWN0aW9uID09IFByaW50T25lICYmIG1fY3VycmVudEZyYW1lID4gbV9mcmFtZXNUb1NraXAp
CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEFjdGlv
biBtX2FjdGlvbjsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lc1RvU2tpcDsKKyAgICB1bnNpZ25lZCBt
X2N1cnJlbnRGcmFtZSB7IDAgfTsKK307CisKK3N0YXRpYyB2b2lkIHByaW50Q2FsbEZyYW1lKENh
bGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZXNUb1NraXApCit7CisgICAgaWYgKCFl
bnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhjYWxsRnJhbWUpKQorICAgICAgICByZXR1cm47
CisgICAgUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihQcmludEZyYW1lRnVuY3Rvcjo6UHJpbnRP
bmUsIGZyYW1lc1RvU2tpcCk7CisgICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworfQor
Cit2b2lkIHByaW50Q2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHByaW50
Q2FsbEZyYW1lKGNhbGxGcmFtZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50U3RhY2soQ2Fs
bEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCkKK3sKKyAgICBpZiAo
IWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKHRvcENhbGxGcmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXRvcENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFByaW50
RnJhbWVGdW5jdG9yIGZ1bmN0b3IoUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50QWxsLCBmcmFtZXNU
b1NraXApOworICAgIHRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKK30KKwordm9pZCBw
cmludFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQoreworICAgIHByaW50U3RhY2sodG9w
Q2FsbEZyYW1lLCAwKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gV2hlbiB0
aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGluZyB0byBwcmlu
dCB0aGVpcgorICAgIC8vIG93biBmcmFtZS4gU28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgorICAg
IHByaW50Q2FsbEZyYW1lKGV4ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUHJpbnRTdGFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gV2hlbiB0aGUgY2Fs
bGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGluZyB0byBwcmludCB0aGUK
KyAgICAvLyBzdGFjayBzdGFydGluZyB0aGVpciBvd24gZnJhbWUuIFNvIHNraXAgMSBmb3IgdGhp
cyBmcmFtZS4KKyAgICBwcmludFN0YWNrKGV4ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3ZvaWQgcHJpbnRWYWx1ZShKU1ZhbHVlIHZhbHVl
KQoreworICAgIGRhdGFMb2codmFsdWUpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblByaW50VmFsdWUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAg
ICAgICBpZiAoaSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAiKTsKKyAgICAgICAgZGF0YUxvZyhl
eGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3ZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCAiY3Jhc2giLCBmdW5jdGlvbkNyYXNoLCAwKTsKKyAgICAKKyAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVuY3Rpb25ERkdUcnVlLCBERkdUcnVlSW50cmluc2ljLCBE
b250RW51bSB8IEpTQzo6RnVuY3Rpb24pOworICAgIAorICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsICJsbGludFRydWUiLCBmdW5jdGlvbkxMaW50VHJ1ZSwgMCk7CisgICAgYWRkRnVu
Y3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImppdFRydWUiLCBmdW5jdGlvbkpJVFRydWUsIDApOwor
ICAgIAorICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJnYyIsIGZ1bmN0aW9uR0Ms
IDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJlZGVuR0MiLCBmdW5jdGlv
bkVkZW5HQywgMCk7CisgICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNv
ZGVCbG9ja0ZvckZyYW1lIiwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZSwgMSk7CisgICAgYWRk
RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50U291cmNlRm9yIiwgZnVuY3Rpb25Qcmlu
dFNvdXJjZUZvciwgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50
Qnl0ZUNvZGVGb3IiLCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IsIDEpOworICAgIAorICAgIGFk
ZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwor
ICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludENhbGxGcmFtZSIsIGZ1bmN0
aW9uUHJpbnRDYWxsRnJhbWUsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
ICJwcmludFN0YWNrIiwgZnVuY3Rpb25QcmludFN0YWNrLCAwKTsKKworICAgIGFkZEZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsICJwcmludFZhbHVlIiwgZnVuY3Rpb25QcmludFZhbHVlLCAxKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEpTRG9sbGFyVk1Qcm90b3R5cGVfaAorI2RlZmluZSBKU0RvbGxhclZN
UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU0RvbGxhclZNUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisgICAgREVDTEFS
RV9JTkZPOworCisgICAgc3RhdGljIEpTRG9sbGFyVk1Qcm90b3R5cGUqIGNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNEb2xsYXJWTVByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNEb2xsYXJWTVByb3RvdHlwZT4odm0uaGVhcCkpIEpTRG9sbGFyVk1Q
cm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRp
b24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwcm90b3R5cGU7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBKU0RvbGxhclZNUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGFk
ZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNEb2xsYXJWTVByb3RvdHlwZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>