<?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>142031</bug_id>
          
          <creation_ts>2015-02-25 17:39:31 -0800</creation_ts>
          <short_desc>compile DFA to bytecode</short_desc>
          <delta_ts>2015-02-27 11:21:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1072220</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-25 17:39:31 -0800</bug_when>
    <thetext>Like https://bugs.webkit.org/show_bug.cgi?id=141017 but to byte code instead of machine code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072225</commentid>
    <comment_count>1</comment_count>
      <attachid>247374</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-25 17:49:37 -0800</bug_when>
    <thetext>Created attachment 247374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072239</commentid>
    <comment_count>2</comment_count>
      <attachid>247380</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-25 18:08:26 -0800</bug_when>
    <thetext>Created attachment 247380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072312</commentid>
    <comment_count>3</comment_count>
      <attachid>247380</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 00:06:57 -0800</bug_when>
    <thetext>Comment on attachment 247380
Patch

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

Partial review :(
I did not get a chance to read everything :(

&gt; Source/WebCore/ChangeLog:31
&gt; +        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):

I can&apos;t wait to see a DFABytecodeDebugger ;)

&gt; Source/WebCore/contentextensions/ContentExtensionRule.h:38
&gt; -enum class ExtensionActionType {
&gt; +// FIXME: make this smaller.
&gt; +enum class ExtensionActionType : uint64_t {

Small mixup here.

The output should be the index of the matched rule, not it&apos;s action type.

Some actions will have additional meta data. For example, when adding the CSS support, each Action will have a selector list.

&gt; Source/WebCore/contentextensions/DFABytecode.h:35
&gt; +enum class DFABytecode : uint8_t {

IMHO, this is abusing enum class.

I would typedef uint8_t to DFABytecode, since the bytecode contains Instruction+data in a dense form.
Then I would have a enum class DFABytecodeInstruction with all the instructions types.

&gt; Source/WebCore/contentextensions/DFABytecode.h:38
&gt; +    // CheckValue is followed by the value to check (1 byte),
&gt; +    // then the index to jump to if the values are equal (4 bytes).

Oh thank Jibbers you started with documentation for the bytecode.

The JSC bytecode is completely undocumented, quite a pain.

If you want some idea on how to document this, you should have a look how LLVM IR is documented (e.g. http://llvm.org/docs/LangRef.html#add-instruction)

&gt; Source/WebCore/contentextensions/DFABytecode.h:41
&gt; +    // AppendAction is followed by the action to append (8 bytes).

The &quot;action&quot; we will eventually add is the offset in the action file, we can limit ourself to 4 bytes IMHO.

&gt; Source/WebCore/contentextensions/DFABytecode.h:44
&gt; +    // Terminate is not followed by anything.

This comments is a bit vague.

Maybe &quot;Terminate ends the execution even if there is input left.&quot;

&gt; Source/WebCore/contentextensions/DFABytecode.h:50
&gt; +    // FIXME: There should be a CheckBit bytecode to do binary searches if there are lots of edges from this node.

No need for the FIXME, we&apos;ll likely do tons of extensions. I already have ideas :)

Just an idea of a new bytecode to make the code more compact and faster:
If all the characters exists in lower and upper case version, there could be a ChangeInputToASCIILower bytecode. Then CheckValue only need to check for lowercase characters, we can dismiss the uppercase characters.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:42
&gt; +    // There&apos;s got to be a better way to do this, but this works.

No need for the comment.

The fast way to do this is to use memcpy() and let clang optimize it out. On x86, we can do unaligned memory accesses by design. On Apple ARM, we can too but I don&apos;t know if Clang knows about that.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:62
&gt; +    // There&apos;s got to be a better way to do this, but this works.

You can remove this comment too.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:78
&gt; +        append&lt;DFABytecode&gt;(bytecode, DFABytecode::AppendAction);
&gt; +        append&lt;ExtensionActionType&gt;(bytecode, static_cast&lt;ExtensionActionType&gt;(action));

I would use the &quot;emitInstruction&quot; pattern to make the code more modular.

For example, this would be
   emitAppendAction(actionId);

For example, take BytecodeGenerator::emitLoad() of JSC.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:85
&gt; +        append&lt;uint32_t&gt;(bytecode, -1); // This value will be set when linking.

It&apos;s probably better to put zero here. Any linker mistake would be stuck in an infinite loop on the invalid jump.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:96
&gt; +void DFABytecodeCompiler::linkNode(Vector&lt;DFABytecode&gt;&amp; bytecode, unsigned index)

IMHO, a static linker will quickly get in the way of optimizations.

What I would do it:
1) Every time the compiler emits a jump, it stores the pair (offset where to write the jump, target node) in a list.
2) Then for linking you go over the pair, and do
    bytecode[offset where to write the jump] nodeStarts[target node index]

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:120
&gt; +    WTFLogAlways(&quot;COMPILING\n&quot;); // This happens too often (OOPS!)

Whaaaaaaat

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:133
&gt; +    // link

Link.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:137
&gt; +    WTFLogAlways(&quot;BUFFER SIZE: %d\n&quot;, (int)bytecode.size());

Nope.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:44
&gt; +    { }

The coding style is to use 
{
}
in this case: http://www.webkit.org/coding/coding-style.html#punctuation-member-init

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:45
&gt; +    Vector&lt;DFABytecode&gt; compile();

We should find a way to give up the ownership, we are dealing with really big objects.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:43
&gt; +    uint32_t bytecodeIndex = 0;

I would name that program counter if it always point to an instruction and never to an argument.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:61
&gt; +                bytecodeIndex += sizeof(DFABytecode) + sizeof(uint8_t) + sizeof(uint32_t);

There must be a better way.

Usually the Instruction are encoded somewhere with their arguments so the size is known.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072459</commentid>
    <comment_count>4</comment_count>
      <attachid>247438</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 12:18:29 -0800</bug_when>
    <thetext>Created attachment 247438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072503</commentid>
    <comment_count>5</comment_count>
      <attachid>247438</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 15:00:23 -0800</bug_when>
    <thetext>Comment on attachment 247438
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:57
&gt; +            if (url.data()[urlIndex] == getBits&lt;uint8_t&gt;(bytecode, programCounter + sizeof(DFABytecode))) {

To correctly match regexes that match right at the end of a string, we need to check for a null character before this.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:60
&gt; +                if (!url.data()[urlIndex])

Not here.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:69
&gt; +            if (!url.data()[urlIndex])

And not here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072529</commentid>
    <comment_count>6</comment_count>
      <attachid>247455</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 15:46:39 -0800</bug_when>
    <thetext>Created attachment 247455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072547</commentid>
    <comment_count>7</comment_count>
      <attachid>247465</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 16:15:56 -0800</bug_when>
    <thetext>Created attachment 247465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072560</commentid>
    <comment_count>8</comment_count>
      <attachid>247465</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 17:00:19 -0800</bug_when>
    <thetext>Comment on attachment 247465
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecode.h:56
&gt; +static inline size_t instructionSizeWithArguments(DFABytecodeInstruction instruction)

nice

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:48
&gt; +    for (;;) {

while (true)?

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:56
&gt; +            ASSERT(url.data());

This could be out of the loop.

You should put url.data() in a temporary to be safe. If you add any function call in the future, clang would have have to test for m_buffer every time if you have a temporary.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:79
&gt; +        ASSERT(urlIndex &lt; url.length()); // We should always terminate at a null character at the end of a String.

good

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:31
&gt; +#include &quot;ContentExtensionRule.h&quot;

?

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:34
&gt; +#include &lt;wtf/text/CString.h&gt;

You just need to declare CString.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:44
&gt; +    { };

Semi colon.
WebKit Style.

&gt; Source/WebCore/contentextensions/DFANode.h:31
&gt; +#include &quot;ContentExtensionRule.h&quot;

? That does not seem right, the state machine should know nothing about ContentExtensions.

&gt; Source/WebCore/contentextensions/NFAToDFA.cpp:31
&gt; +#include &quot;ContentExtensionRule.h&quot;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072567</commentid>
    <comment_count>9</comment_count>
      <attachid>247471</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 17:08:40 -0800</bug_when>
    <thetext>Created attachment 247471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072575</commentid>
    <comment_count>10</comment_count>
      <attachid>247471</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-26 17:21:41 -0800</bug_when>
    <thetext>Comment on attachment 247471
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:47
&gt; +    HashSet&lt;uint64_t, DefaultHash&lt;uint64_t&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;uint64_t&gt;&gt; interpret(const CString&amp;);

Suggestion:
typedef HashSet&lt;uint64_t, DefaultHash&lt;uint64_t&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;uint64_t&gt;&gt; Actions;

... and use Actions (or DFABytecodeInterpreter::Actions) everywhere you would use this.  That way, you get to express its purpose rather than its implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072580</commentid>
    <comment_count>11</comment_count>
      <attachid>247473</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 17:30:39 -0800</bug_when>
    <thetext>Created attachment 247473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072634</commentid>
    <comment_count>12</comment_count>
      <attachid>247473</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 21:09:36 -0800</bug_when>
    <thetext>Comment on attachment 247473
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:86
&gt; +    linkRecords.reserveCapacity(linkRecords.size() + node.transitions.size() * instructionSizeWithArguments(DFABytecodeInstruction::CheckValue));

This should be changed.  Right now there is one link record per transition and one CheckValue with arguments per transition.
linkRecords.reserveCapacity(linkRecords.size() + node.transitions.size());
bytecode.reserveCapacity(bytecode.size() + node.transitions.size() * instructionSizeWithArguments(DFABytecodeInstruction::CheckValue));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072645</commentid>
    <comment_count>13</comment_count>
      <attachid>247496</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-26 21:34:20 -0800</bug_when>
    <thetext>Created attachment 247496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072671</commentid>
    <comment_count>14</comment_count>
      <attachid>247496</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 23:57:24 -0800</bug_when>
    <thetext>Comment on attachment 247496
Patch

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

This looks completely correct to me, I could not find any problem.

Great work on the bytecode compiler and the interpreter. Clean design and well documented.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:29
&gt; +#include &quot;ContentExtensionRule.h&quot;

This is fishy.

Why is it not with the other #include after #if ENABLE(CONTENT_EXTENSIONS)?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:77
&gt; +void DFABytecodeCompiler::compileNode(Vector&lt;DFABytecode&gt;&amp; bytecode, unsigned index)

You can drop the argument now, you have a reference to the bytecode as an attribute.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:86
&gt; +    bytecode.reserveCapacity(bytecode.size() + node.transitions.size() * instructionSizeWithArguments(DFABytecodeInstruction::CheckValue));

You could have a reserveOutputBufferCapacity(numberOfActions, numberOfTransitions, hasFallback) to help with each node.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:87
&gt; +    linkRecords.reserveCapacity(linkRecords.size() + node.transitions.size());

We should really have a nicer way to do that with a Vector. This is a common pattern. :(

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:31
&gt; +#include &quot;ContentExtensionRule.h&quot;

This include is fishy.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:43
&gt; +    DFABytecodeCompiler(const DFA&amp; dfa, Vector&lt;DFABytecode&gt;&amp; bytecode)

I wonder if we&apos;ll en up taking a file descriptor as argument, and write the bytecode directly in the file.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:59
&gt; +    Vector&lt;DFABytecode&gt;&amp; bytecode;

m_bytecode.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:60
&gt; +    const DFA&amp; dfa;

m_dfa

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:62
&gt; +    Vector&lt;unsigned&gt; nodeStarts;

m_nodeStarts

Maybe m_nodeStartOffsets

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:65
&gt; +    // The first value is the index in the bytecode buffer where the jump is to be written.
&gt; +    // The second value is the index of the node to jump to.

This is why I hate std::pair so much: we cannot name the fields :)

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:66
&gt; +    Vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; linkRecords;

m_linkRecords

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:46
&gt; +    ASSERT(url.data());

ASSERT(url);

I have a feeling you don&apos;t work with a debug build ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072752</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-27 11:21:48 -0800</bug_when>
    <thetext>Addressed comments, tested debug builds, and committed to http://trac.webkit.org/changeset/180769

(In reply to comment #14)
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:86
&gt; &gt; +    bytecode.reserveCapacity(bytecode.size() + node.transitions.size() * instructionSizeWithArguments(DFABytecodeInstruction::CheckValue));
&gt; 
&gt; You could have a reserveOutputBufferCapacity(numberOfActions,
&gt; numberOfTransitions, hasFallback) to help with each node.
reserveCapacity was making it compile VERY slowly (10 seconds in release).  I removed all reserveCapacity calls.  We can add them later.
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:43
&gt; &gt; +    DFABytecodeCompiler(const DFA&amp; dfa, Vector&lt;DFABytecode&gt;&amp; bytecode)
&gt; 
&gt; I wonder if we&apos;ll en up taking a file descriptor as argument, and write the
&gt; bytecode directly in the file.
That would be cool, but I&apos;m not sure how linking would work.  I think we should compile and link in a Vector, then write the whole Vector to a file to avoid lots of unnecessary rewinding and seeking in the file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247374</attachid>
            <date>2015-02-25 17:49:37 -0800</date>
            <delta_ts>2015-02-25 18:08:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150225174923.patch</filename>
            <type>text/plain</type>
            <size>33969</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTAyLTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6Om5l
eHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9kZUF0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpsaW5rTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxl
cjo6Y29tcGlsZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUNvbXBpbGVyOjpERkFCeXRlY29kZUNvbXBpbGVyKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0Qml0cyk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQU5vZGUuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6
CisKIDIwMTUtMDItMjUgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgRGF0YWJhc2VGb29UYXNrOjpjcmVhdGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE4MDU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjE0MCw2ICsyMTQwLDEwIEBACiAJ
CTVDNDMwNEIxMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4
MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OwogCQk1QzQzMDRCNTE5MUFF
RjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEIzMTkxQUVGNDYwMDBFMkJDMCAv
KiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwICovOyB9OwogCQk1QzQzMDRCNjE5MUFFRjQ2MDAw
RTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRT
aGFkZXJUZXh0dXJlTE9ELmggKi87IH07CisJCTVDN0FGMEZGMUE5RTNEM0YwMDQ4OEMyNiAvKiBE
RkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDN0FGMEZEMUE5RTNEM0YwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUNvbXBp
bGVyLmNwcCAqLzsgfTsKKwkJNUM3QUYxMDAxQTlFM0QzRjAwNDg4QzI2IC8qIERGQUJ5dGVjb2Rl
Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDN0FGMEZFMUE5RTNEM0YwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi87IH07
CisJCTVDN0FGMTAzMUE5RTQ3M0EwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0FGMTAx
MUE5RTQ3M0EwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCAqLzsgfTsKKwkJ
NUM3QUYxMDQxQTlFNDczQTAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0FGMTAyMUE5RTQ3
M0EwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi87IH07CiAJCTVDRkM0MzUw
MTkyNDA5RTMwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQzNEUxOTI0MDZBOTAwQTBE
M0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTVEMjFBODAyMTNFQ0U1
REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUQyMUE4MDAxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBh
cnNlci5jcHAgKi87IH07CiAJCTVEMjFBODAzMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEMjFB
ODAxMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCAqLzsgfTsKQEAgLTkyODMsNiAr
OTI4NywxMSBAQAogCQk1QzQzMDRBRjE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVy
ZUxPRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRVhUU2hhZGVyVGV4dHVyZUxPRC5pZGw7
IHBhdGggPSBjYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDNDMwNEIzMTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1
cmVMT0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRTaGFk
ZXJUZXh0dXJlTE9ELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjQx
OTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVFNoYWRlclRleHR1cmVMT0QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUM3QUYwRkMxQTlFM0JGNzAwNDg4QzI2IC8qIERGQUJ5dGVjb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDN0FGMEZEMUE5RTNEM0YwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGQUJ5dGVjb2RlQ29tcGls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzdBRjBGRTFBOUUzRDNGMDA0
ODhDMjYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBERkFCeXRlY29kZUNvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDN0FGMTAxMUE5RTQ3M0EwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzdBRjEwMjFBOUU0NzNB
MDA0ODhDMjYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkFCeXRlY29kZUludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDRkM0MzRFMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckxv
Y2tDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGQzQzNEYx
OTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQyMUE4MDAxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWVFRQYXJzZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzODksNiArMTUzOTgsMTEgQEAK
IAkJCQkyNjc3MjVGQjFBNUIzQUQ5MDAzQzI0REQgLyogTkZBVG9ERkEuaCAqLywKIAkJCQkyNjc3
MjYwMjFBNURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2VyLmNwcCAqLywKIAkJCQkyNjc3
MjYwMzFBNURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2VyLmggKi8sCisJCQkJNUM3QUYw
RkMxQTlFM0JGNzAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlLmggKi8sCisJCQkJNUM3QUYwRkQxQTlF
M0QzRjAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovLAorCQkJCTVDN0FGMEZF
MUE5RTNEM0YwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8sCisJCQkJNUM3QUYx
MDExQTlFNDczQTAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovLAorCQkJ
CTVDN0FGMTAyMUE5RTQ3M0EwMDQ4OEMyNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGNvbnRlbnRleHRlbnNpb25zOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTIzNzE3LDYgKzIzNzMxLDcgQEAKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAz
RTdBNzEgLyogQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1MjM3MUExNUJE
QkUwMDg2NDQ4MCAvKiBDb3JlR3JhcGhpY3NTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0Mzgx
ODAwMUE5MUIyRjgwMDZFMDRGMiAvKiBDb3JlTWVkaWFTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUM3QUYxMDQxQTlFNDczQTAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ0NDlBNDA1MUE5NjRCMDAwMEI2NEFENSAvKiBDb3JlTWVk
aWFTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNjQ2NjI1MUExMkMzOEUwMDk0NjAzQyAvKiBD
b3JlVGV4dFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyRjEyOUUxOEMxNTc2RjAwNUM1NEFG
IC8qIENvdW50ZWRVc2VyQWN0aXZpdHkuaCBpbiBIZWFkZXJzICovLApAQCAtMjQzODgsNiArMjQ0
MDMsNyBAQAogCQkJCTFBODhBOTA1MTc1NTNDRDcwMDBDNzRGOSAvKiBGaWxlSWNvbkxvYWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkUxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBG
aWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM3QUYxMDAxQTlFM0QzRjAwNDg4QzI2IC8q
IERGQUJ5dGVjb2RlQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODlGMUFGMTI2N0JB
RTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzg5
MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNzM1NSw2ICsyNzM3MSw3IEBACiAJCQkJNUYyREJCRTkxNzhFM0M4MTAwMTQxNDg2IC8q
IENlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxQThFNTY2MTc1NTJC
MkEwMDc0ODhFNyAvKiBDRlVSTEV4dHJhcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNjlE
QzE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUM3QUYwRkYxQTlFM0QzRjAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzJGMUFEQTIxQTM5MDREQzAwMDE0RTE4IC8qIEVYVEZy
YWdEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNUZGRTEyQjAyNjc2MDBDMUEzNTkg
LyogQ2hhbm5lbE1lcmdlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMDExMkIw
MjY3NjAwQzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yOTMwNCw2ICsyOTMyMSw3IEBACiAJCQkJNDM5MDQ2RTMxMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFJvdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFNzEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QjdB
MjA4RDJFMTI5NzlCNEFFMTlERTYgLyogUmVuZGVyTWF0aE1MU3BhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUM3QUYxMDMxQTlFNDczQTAwNDg4QzI2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RTUxMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RUIxMkRB
MjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlzaW9uIDE4MDU0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1lbnVtIGNsYXNzIEV4dGVuc2lvbkFjdGlvblR5
cGUgeworLy8gRklYTUU6IG1ha2UgdGhpcyBzbWFsbGVyLgorZW51bSBjbGFzcyBFeHRlbnNpb25B
Y3Rpb25UeXBlIDogdWludDY0X3QgewogICAgIEJsb2NrTG9hZCwKICAgICBJZ25vcmVQcmV2aW91
c1J1bGVzCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODA1
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdn
aW5nLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVDb21waWxlci5oIgorI2luY2x1ZGUgIkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJORkEuaCIKICNpbmNsdWRlICJORkFUb0RG
QS5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0ID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IE5GQVRvREZBOjpjb252
ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpjb252
ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5H
CiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOwpAQCAtOTUsOSArOTcsMTAgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNl
dFJ1bGVMaQogICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNoZXMg
dGhlIGVtcHR5IHNldC4KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RF
QlVHR0lORwotICAgIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEuZGVidWdQcmludERvdCgp
OworICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKLQorICAgIERGQUJ5dGVjb2RlQ29t
cGlsZXIgY29tcGlsZXIoZGZhKTsKKyAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb24gY29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uID0geyBjb21waWxlci5jb21waWxlKCksIHJ1bGVMaXN0IH07CiAg
ICAgbV9ydWxlTGlzdHMuc2V0KGlkZW50aWZpZXIsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7
CiB9CiAKQEAgLTExNSwyOSArMTE4LDE2IEBAIGJvb2wgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
OjpzaG91bGRCbG8KIHsKICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmco
KTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHVybFN0cmluZy5jb250YWluc09ubHlBU0NJSSgp
LCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnMuIFRo
ZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1lcyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7CisgICAg
Y29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKICAgICBmb3Ig
KGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVsZUxpc3RzKSB7Ci0gICAgICAgIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZh
bHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5k
ZmEucm9vdCgpOwotCi0gICAgICAgIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2
NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+
IHRyaWdnZXJlZEFjdGlvbnM7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVy
bFN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHN0
YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tpXSk7Ci0gICAgICAgICAgICBib29sIG9rOwotICAg
ICAgICAgICAgc3RhdGUgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLm5leHRTdGF0ZShz
dGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25z
ID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5hY3Rpb25zKHN0YXRlKTsKLSAgICAgICAg
ICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dlcmVkQWN0
aW9ucy5hZGQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8dWludDY0X3Q+IHNvcnRlZEFjdGlvbnM7Ci0gICAgICAgICAgICBjb3B5VG9WZWN0b3IodHJp
Z2dlcmVkQWN0aW9ucywgc29ydGVkQWN0aW9ucyk7Ci0gICAgICAgICAgICBzdGQ6OnNvcnQoc29y
dGVkQWN0aW9ucy5iZWdpbigpLCBzb3J0ZWRBY3Rpb25zLmVuZCgpKTsKLSAgICAgICAgICAgIHNp
emVfdCBsYXN0QWN0aW9uID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3J0ZWRBY3Rpb25zLmxhc3Qo
KSk7CisgICAgICAgIGNvbnN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZhbHVlOworICAgICAgICBERkFCeXRlY29kZUlu
dGVycHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5ieXRlY29kZSk7
CisgICAgICAgIFZlY3RvcjxFeHRlbnNpb25BY3Rpb25UeXBlPiBhY3Rpb25zID0gaW50ZXJwcmV0
ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2
ZW50dWFsbHkgZG8gc29tZXRoaW5nIHdpdGggZWFjaCBhY3Rpb24gcmF0aGVyIHRoYW4ganVzdCBy
ZXR1cm5pbmcgYSBib29sLgorICAgICAgICBpZiAoIWFjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBzdGQ6OnNvcnQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKKyAgICAg
ICAgICAgIHNpemVfdCBsYXN0QWN0aW9uID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihhY3Rpb25zLmxh
c3QoKSk7CiAgICAgICAgICAgICBpZiAoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLnJ1bGVMaXN0
W2xhc3RBY3Rpb25dLmFjdGlvbigpLnR5cGUgPT0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6QmxvY2tM
b2FkKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQuaAkocmV2aXNpb24gMTgwNTQwKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAj
aW5jbHVkZSAiREZBLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGUuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYwLDcgKzYxLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHN0cnVjdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewotICAgICAgICBERkEgZGZh
OworICAgICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwogICAgICAgICBWZWN0b3I8
Q29udGVudEV4dGVuc2lvblJ1bGU+IHJ1bGVMaXN0OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkocmV2aXNpb24gMTgwNTQwKQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksMzEgKzU5LDYgQEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRmYSkKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0YXRlKHVuc2lnbmVkIGN1cnJl
bnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdAotewotICAgIEFTU0VSVChj
dXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBERkFOb2RlJiBub2Rl
ID0gbV9ub2Rlc1tjdXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4dE5vZGUgPSBub2RlLnRyYW5z
aXRpb25zLmZpbmQoY2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5vZGUgIT0gbm9kZS50cmFuc2l0
aW9ucy5lbmQoKSkgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuZXh0Tm9k
ZS0+dmFsdWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikgewot
ICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBub2RlLmZhbGxiYWNrVHJhbnNpdGlv
bjsKLSAgICB9Ci0gICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLQotfQotCi1jb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25z
dAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0gICAgcmV0
dXJuIG1fbm9kZXNbY3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQotCiAjaWYgQ09OVEVOVF9FWFRF
TlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmludFJhbmdlKGJv
b2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJKHJldmlzaW9uIDE4MDU0MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsOCBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29uc3QgREZBJik7
CiAKICAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAgLy8g
SWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNoYXJhY3RlciIs
IHJldHVybiB0aGF0IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBPdGhlcndpc2Us
IHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4KLSAgICB1bnNp
Z25lZCBuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJhY3RlciwgYm9v
bCYgb2spIGNvbnN0OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnModW5zaWdu
ZWQgY3VycmVudFN0YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ub2Rlcy5zaXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQodW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90KCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERGQUJ5dGVjb2RlX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVfaAorCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworZW51bSBjbGFzcyBERkFCeXRlY29kZSA6IHVpbnQ4
X3QgeworCisgICAgLy8gQ2hlY2tWYWx1ZSBpcyBmb2xsb3dlZCBieSB0aGUgdmFsdWUgdG8gY2hl
Y2sgKDEgYnl0ZSksCisgICAgLy8gdGhlbiB0aGUgaW5kZXggdG8ganVtcCB0byBpZiB0aGUgdmFs
dWVzIGFyZSBlcXVhbCAoNCBieXRlcykuCisgICAgQ2hlY2tWYWx1ZSwKKworICAgIC8vIEFwcGVu
ZEFjdGlvbiBpcyBmb2xsb3dlZCBieSB0aGUgYWN0aW9uIHRvIGFwcGVuZCAoOCBieXRlcykuCisg
ICAgQXBwZW5kQWN0aW9uLAorCisgICAgLy8gVGVybWluYXRlIGlzIG5vdCBmb2xsb3dlZCBieSBh
bnl0aGluZy4KKyAgICBUZXJtaW5hdGUsCisKKyAgICAvLyBKdW1wIGlzIGZvbGxvd2VkIGJ5IHRo
ZSBpbmRleCB0byBqdW1wIHRvIHVuY29uZGl0aW9uYWxseSAoNCBieXRlcykuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIGEgQ2hlY2tCaXQgYnl0ZWNvZGUg
dG8gZG8gYmluYXJ5IHNlYXJjaGVzIGlmIHRoZXJlIGFyZSBsb3RzIG9mIGVkZ2VzIGZyb20gdGhp
cyBub2RlLgorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorCisjZW5kaWYgLy8gREZBQnl0ZWNvZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZUNvbXBpbGVy
LmgiCisKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgorCisjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkRGQS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW50VHlwZT4KK2lubGluZSB2b2lkIGFwcGVuZChWZWN0b3I8REZBQnl0ZWNvZGU+JiBi
eXRlY29kZSwgSW50VHlwZSB2YWx1ZSkKK3sKKyAgICAvLyBUaGVyZSdzIGdvdCB0byBiZSBhIGJl
dHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IHRoaXMgd29ya3MuCisgICAgYnl0ZWNvZGUuYXBwZW5k
KHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpID4+
IDApKTsKKyAgICBpZiAoc2l6ZW9mKEludFR5cGUpID4gMSkKKyAgICAgICAgYnl0ZWNvZGUuYXBw
ZW5kKHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
ID4+IDgpKTsKKyAgICBpZiAoc2l6ZW9mKEludFR5cGUpID4gMikKKyAgICAgICAgYnl0ZWNvZGUu
YXBwZW5kKHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFs
dWUpID4+IDE2KSk7CisgICAgaWYgKHNpemVvZihJbnRUeXBlKSA+IDMpCisgICAgICAgIGJ5dGVj
b2RlLmFwcGVuZChzdGF0aWNfY2FzdDxERkFCeXRlY29kZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlKSA+PiAyNCkpOworICAgIGlmIChzaXplb2YoSW50VHlwZSkgPiA0KQorICAgICAgICBi
eXRlY29kZS5hcHBlbmQoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+KHN0YXRpY19jYXN0PHVpbnQ2
NF90Pih2YWx1ZSkgPj4gMzIpKTsKKyAgICBpZiAoc2l6ZW9mKEludFR5cGUpID4gNSkKKyAgICAg
ICAgYnl0ZWNvZGUuYXBwZW5kKHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1
aW50NjRfdD4odmFsdWUpID4+IDQwKSk7CisgICAgaWYgKHNpemVvZihJbnRUeXBlKSA+IDYpCisg
ICAgICAgIGJ5dGVjb2RlLmFwcGVuZChzdGF0aWNfY2FzdDxERkFCeXRlY29kZT4oc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZhbHVlKSA+PiA0OCkpOworICAgIGlmIChzaXplb2YoSW50VHlwZSkgPiA3
KQorICAgICAgICBieXRlY29kZS5hcHBlbmQoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+KHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPj4gNTYpKTsKK30KKworaW5saW5lIHZvaWQgc2V0MzJC
aXRzKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCwgdWludDMy
X3QgdmFsdWUpCit7CisgICAgLy8gVGhlcmUncyBnb3QgdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRv
IHRoaXMsIGJ1dCB0aGlzIHdvcmtzLgorICAgIGJ5dGVjb2RlW2luZGV4ICsgMF0gPSBzdGF0aWNf
Y2FzdDxERkFCeXRlY29kZT4odmFsdWUgPj4gMCk7CisgICAgYnl0ZWNvZGVbaW5kZXggKyAxXSA9
IHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPih2YWx1ZSA+PiA4KTsKKyAgICBieXRlY29kZVtpbmRl
eCArIDJdID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+KHZhbHVlID4+IDE2KTsKKyAgICBieXRl
Y29kZVtpbmRleCArIDNdID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+KHZhbHVlID4+IDI0KTsK
K30KKyAgICAKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUoVmVjdG9yPERG
QUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIC8vIFJlY29yZCBz
dGFydGluZyBpbmRleCBmb3IgbGlua2luZy4KKyAgICBub2RlU3RhcnRzW2luZGV4XSA9IGJ5dGVj
b2RlLnNpemUoKTsKKyAgICAKKyAgICAvLyBBcHBlbmQgYWN0aW9ucy4KKyAgICBjb25zdCBERkFO
b2RlJiBub2RlID0gZGZhLm5vZGVBdChpbmRleCk7CisgICAgZm9yICh1aW50NjRfdCBhY3Rpb24g
OiBub2RlLmFjdGlvbnMpIHsKKyAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlPihieXRlY29kZSwg
REZBQnl0ZWNvZGU6OkFwcGVuZEFjdGlvbik7CisgICAgICAgIGFwcGVuZDxFeHRlbnNpb25BY3Rp
b25UeXBlPihieXRlY29kZSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uQWN0aW9uVHlwZT4oYWN0aW9u
KSk7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrIHRyYW5zaXRpb25zLgorICAgIGZvciAoY29u
c3QgYXV0byYgdHJhbnNpdGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpIHsKKyAgICAgICAgYXBwZW5k
PERGQUJ5dGVjb2RlPihieXRlY29kZSwgREZBQnl0ZWNvZGU6OkNoZWNrVmFsdWUpOworICAgICAg
ICBhcHBlbmQ8dWludDhfdD4oYnl0ZWNvZGUsIHRyYW5zaXRpb24ua2V5KTsKKyAgICAgICAgYXBw
ZW5kPHVpbnQzMl90PihieXRlY29kZSwgLTEpOyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdo
ZW4gbGlua2luZy4KKyAgICB9CisgICAgCisgICAgLy8gRmFsbGJhY2sgb3IgdGVybWluYXRlLgor
ICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikgeworICAgICAgICBhcHBlbmQ8REZB
Qnl0ZWNvZGU+KGJ5dGVjb2RlLCBERkFCeXRlY29kZTo6SnVtcCk7CisgICAgICAgIGFwcGVuZDx1
aW50MzJfdD4oYnl0ZWNvZGUsIC0xKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxp
bmtpbmcuCisgICAgfSBlbHNlCisgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZT4oYnl0ZWNvZGUs
IERGQUJ5dGVjb2RlOjpUZXJtaW5hdGUpOworfQorCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6
OmxpbmtOb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBjb25zdCBERkFOb2RlJiBub2RlID0gZGZhLm5vZGVBdChpbmRleCk7CisgICAgdW5z
aWduZWQgYWN0aW9uU3RhcnQgPSBub2RlU3RhcnRzW2luZGV4XTsKKyAgICB1bnNpZ25lZCB0cmFu
c2l0aW9uU3RhcnQgPSBhY3Rpb25TdGFydCArIG5vZGUuYWN0aW9ucy5zaXplKCkgKiAoc2l6ZW9m
KERGQUJ5dGVjb2RlKSArIHNpemVvZihFeHRlbnNpb25BY3Rpb25UeXBlKSk7CisgICAgCisgICAg
Ly8gTGluayB0cmFuc2l0aW9ucy4KKyAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0xpbmtlZCA9IDA7
CisgICAgY29uc3QgdW5zaWduZWQgdHJhbnNpdGlvbkNvbXBpbGVkU2l6ZSA9IHNpemVvZihERkFC
eXRlY29kZSkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOworICAgIC8vIEkn
bSBhc3N1bWluZyB0aGF0IHRoaXMgd2lsbCBpdGVyYXRlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHdo
ZW4gSSBjb21waWxlZC4gSXMgdGhhdCBhIHZhbGlkIGFzc3VtcHRpb24/CisgICAgZm9yIChjb25z
dCBhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykgeworICAgICAgICBzZXQzMkJp
dHMoYnl0ZWNvZGUsIHRyYW5zaXRpb25TdGFydCArIHRyYW5zaXRpb25zTGlua2VkICogdHJhbnNp
dGlvbkNvbXBpbGVkU2l6ZSArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCks
IG5vZGVTdGFydHNbdHJhbnNpdGlvbi52YWx1ZV0pOworICAgICAgICB0cmFuc2l0aW9uc0xpbmtl
ZCsrOworICAgIH0KKyAgICAKKyAgICAvLyBMaW5rIGZhbGxiYWNrLgorICAgIGlmIChub2RlLmhh
c0ZhbGxiYWNrVHJhbnNpdGlvbikgeworICAgICAgICB1bnNpZ25lZCBmYWxsYmFja1N0YXJ0ID0g
dHJhbnNpdGlvblN0YXJ0ICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkgKiAoc2l6ZW9mKERGQUJ5
dGVjb2RlKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBz
ZXQzMkJpdHMoYnl0ZWNvZGUsIGZhbGxiYWNrU3RhcnQgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBu
b2RlU3RhcnRzW25vZGUuZmFsbGJhY2tUcmFuc2l0aW9uXSk7CisgICAgfQorfQorICAgIAorVmVj
dG9yPERGQUJ5dGVjb2RlPiBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlKCkKK3sKKyAgICBX
VEZMb2dBbHdheXMoIkNPTVBJTElOR1xuIik7IC8vIFRoaXMgaGFwcGVucyB0b28gb2Z0ZW4gKE9P
UFMhKQorICAgIAorICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CisgICAgbm9kZVN0
YXJ0cy5yZXNpemUoZGZhLnNpemUoKSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZSByb290
IGlzIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRlY29kZS4KKyAgICBjb21waWxl
Tm9kZShieXRlY29kZSwgZGZhLnJvb3QoKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRmYS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSAhPSBkZmEucm9vdCgpKQor
ICAgICAgICAgICAgY29tcGlsZU5vZGUoYnl0ZWNvZGUsIGkpOworICAgIH0KKworICAgIC8vIGxp
bmsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhLnNpemUoKTsgaSsrKQorICAgICAg
ICBsaW5rTm9kZShieXRlY29kZSwgaSk7CisgICAgCisgICAgV1RGTG9nQWx3YXlzKCJCVUZGRVIg
U0laRTogJWRcbiIsIChpbnQpYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICAKKyAgICByZXR1cm4gYnl0
ZWNvZGU7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZUNvbXBpbGVyX2gKKyNk
ZWZpbmUgREZBQnl0ZWNvZGVDb21waWxlcl9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorCisjaW5jbHVkZSAiREZBQnl0ZWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsK
KworY2xhc3MgREZBOworCitjbGFzcyBERkFCeXRlY29kZUNvbXBpbGVyIHsKK3B1YmxpYzoKKyAg
ICBERkFCeXRlY29kZUNvbXBpbGVyKGNvbnN0IERGQSYgZGZhKQorICAgICAgICA6IGRmYShkZmEp
CisgICAgeyB9CisgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBjb21waWxlKCk7Citwcml2YXRlOgor
ICAgIHZvaWQgY29tcGlsZU5vZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYsIHVuc2lnbmVkIGluZGV4
KTsKKyAgICB2b2lkIGxpbmtOb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mLCB1bnNpZ25lZCBpbmRl
eCk7CisKKyAgICBjb25zdCBERkEmIGRmYTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG5vZGVTdGFy
dHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisj
ZW5kaWYgLy8gREZBQnl0ZWNvZGVDb21waWxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIEludFR5cGU+CitzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25z
dCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdWludDMyX3QgaW5kZXgpCit7CisgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhd
KTsKK30KKyAgICAKK1ZlY3RvcjxFeHRlbnNpb25BY3Rpb25UeXBlPiBERkFCeXRlY29kZUludGVy
cHJldGVyOjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsKQoreworICAgIHVpbnQzMl90IGJ5
dGVjb2RlSW5kZXggPSAwOworICAgIHVpbnQzMl90IHVybEluZGV4ID0gMDsKKyAgICBWZWN0b3I8
RXh0ZW5zaW9uQWN0aW9uVHlwZT4gYWN0aW9uczsKKyAgICAKKyAgICAvLyBUaGlzIHNob3VsZCBh
bHdheXMgdGVybWluYXRlIGlmIGludGVycHJldGluZyBjb3JyZWN0bHkgY29tcGlsZWQgYnl0ZWNv
ZGUuIEknbSBub3Qgc3VyZSBob3cgb2J2aW91cyB0aGF0IGlzIG9yIGlmIEkgc2hvdWxkIGFkZCBh
IGNoZWNrIHNvbWVob3cuCisgICAgZm9yICg7OykgeworICAgICAgICBzd2l0Y2ggKGJ5dGVjb2Rl
W2J5dGVjb2RlSW5kZXhdKSB7CisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGU6OlRlcm1pbmF0ZToK
KyAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOworICAgICAgICBjYXNlIERGQUJ5dGVjb2RlOjpD
aGVja1ZhbHVlOgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJh
Y3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0ZWNvZGUuCisg
ICAgICAgICAgICBBU1NFUlQodXJsLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAodXJsLmRhdGEo
KVt1cmxJbmRleF0gPT0gZ2V0Qml0czx1aW50OF90PihieXRlY29kZSwgYnl0ZWNvZGVJbmRleCAr
IHNpemVvZihERkFCeXRlY29kZSkpKSB7CisgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9
IGdldEJpdHM8dWludDMyX3Q+KGJ5dGVjb2RlLCBieXRlY29kZUluZGV4ICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSArIHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICAgICAgdXJsSW5kZXgrKzsg
Ly8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KKyAgICAgICAgICAgICAgICBp
ZiAoIXVybC5kYXRhKClbdXJsSW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0
aW9uczsgLy8gUmVhY2hlZCBudWxsIGNoYXJhY3RlciBhdCBlbmQuCisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ICs9IHNpemVvZihERkFCeXRlY29kZSkg
KyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGU6Okp1bXA6CisgICAgICAgICAgICBieXRlY29kZUlu
ZGV4ID0gZ2V0Qml0czx1aW50MzJfdD4oYnl0ZWNvZGUsIGJ5dGVjb2RlSW5kZXggKyBzaXplb2Yo
REZBQnl0ZWNvZGUpKTsKKyAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50
cyBhbiBlZGdlIGluIHRoZSBERkEuCisgICAgICAgICAgICBpZiAoIXVybC5kYXRhKClbdXJsSW5k
ZXhdKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hh
cmFjdGVyIGF0IGVuZC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGQUJ5dGVj
b2RlOjpBcHBlbmRBY3Rpb246CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChnZXRCaXRzPEV4
dGVuc2lvbkFjdGlvblR5cGU+KGJ5dGVjb2RlLCBieXRlY29kZUluZGV4ICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSkpOworICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCArPSBzaXplb2YoREZBQnl0ZWNv
ZGUpICsgc2l6ZW9mKEV4dGVuc2lvbkFjdGlvblR5cGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBJbnZhbGlkIGJ5dGVjb2RlLgorICAgICAgICB9CisgICAgICAgIEFTU0VSVCh1cmxJbmRl
eCA8IHVybC5sZW5ndGgoKSk7IC8vIFdlIHNob3VsZCBhbHdheXMgdGVybWluYXRlIGF0IGEgbnVs
bCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBhIFN0cmluZy4KKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXJfaAorI2RlZmluZSBERkFCeXRlY29kZUludGVycHJldGVyX2gK
KworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJDb250ZW50RXh0
ZW5zaW9uUnVsZS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgREZBQnl0
ZWNvZGVJbnRlcnByZXRlciB7CitwdWJsaWM6CisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcihj
b25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSkKKyAgICAgICAgOiBieXRlY29kZShi
eXRlY29kZSkKKyAgICB7IH07CisgICAgCisgICAgVmVjdG9yPEV4dGVuc2lvbkFjdGlvblR5cGU+
IGludGVycHJldChjb25zdCBDU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmVjdG9y
PERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8vIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaAkocmV2
aXNpb24gMTgwNTQwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAkocmV2aXNpb24gMTgwNTQwKQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9u
c0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgIkRGQU5vZGUuaCIKICNpbmNsdWRlICJORkEuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247380</attachid>
            <date>2015-02-25 18:08:26 -0800</date>
            <delta_ts>2015-02-26 12:18:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150225180812.patch</filename>
            <type>text/plain</type>
            <size>34799</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTAyLTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6Om5l
eHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9kZUF0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpsaW5rTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxl
cjo6Y29tcGlsZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUNvbXBpbGVyOjpERkFCeXRlY29kZUNvbXBpbGVyKToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0Qml0cyk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQU5vZGUuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6
CisKIDIwMTUtMDItMjUgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgRGF0YWJhc2VGb29UYXNrOjpjcmVhdGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjE0MCw2ICsyMTQwLDExIEBACiAJ
CTVDNDMwNEIxMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4
MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OwogCQk1QzQzMDRCNTE5MUFF
RjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEIzMTkxQUVGNDYwMDBFMkJDMCAv
KiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwICovOyB9OwogCQk1QzQzMDRCNjE5MUFFRjQ2MDAw
RTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRT
aGFkZXJUZXh0dXJlTE9ELmggKi87IH07CisJCTVDNTcyNUMxMUE5RUI2QUMwMDI0M0I1NiAvKiBE
RkFCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM1NzI1QUIxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggKi87IH07CisJCTVD
NTcyNUMyMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFDMUE5RUI2QUMw
MDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCAqLzsgfTsKKwkJNUM1NzI1QzMxQTlF
QjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBE
RkFCeXRlY29kZUNvbXBpbGVyLmggKi87IH07CisJCTVDNTcyNUM0MUE5RUI2QUMwMDI0M0I1NiAv
KiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFFMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29k
ZUludGVycHJldGVyLmNwcCAqLzsgfTsKKwkJNUM1NzI1QzUxQTlFQjZBQzAwMjQzQjU2IC8qIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVy
cHJldGVyLmggKi87IH07CiAJCTVDRkM0MzUwMTkyNDA5RTMwMEEwRDNCNSAvKiBQb2ludGVyTG9j
a0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNGQzQzNEUxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5j
cHAgKi87IH07CiAJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQyMUE4MDAx
M0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgKi87IH07CiAJCTVEMjFBODAzMTNF
Q0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEMjFBODAxMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQ
YXJzZXIuaCAqLzsgfTsKQEAgLTkyODUsNiArOTI5MCwxMSBAQAogCQk1QzQzMDRBRjE5MUFDOTA4
MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gRVhUU2hhZGVyVGV4dHVyZUxPRC5pZGw7IHBhdGggPSBjYW52YXMvRVhUU2hhZGVyVGV4dHVy
ZUxPRC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEIzMTkxQUVGNDYw
MDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVy
VGV4dHVyZUxPRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVFNoYWRl
clRleHR1cmVMT0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUIxQTlF
QjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERGQUJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNTcy
NUFDMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBRDFBOUVCNkFDMDAyNDNCNTYgLyogREZB
Qnl0ZWNvZGVDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFC
eXRlY29kZUNvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNTcyNUFF
MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBRjFBOUVCNkFDMDAyNDNCNTYgLyog
REZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBERkFCeXRlY29kZUludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDRkM0MzRFMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckxvY2tDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGQzQzNEYxOTI0MDZBOTAwQTBE
M0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUQyMUE4MDAxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWVFRQYXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzODcsNiArMTUzOTcsMTEgQEAKIAkJCQkyNkYwQzg5
NjFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmggKi8sCiAJCQkJ
MjY3NzI1RjYxQTVCM0FEOTAwM0MyNEREIC8qIERGQS5jcHAgKi8sCiAJCQkJMjY3NzI1RjcxQTVC
M0FEOTAwM0MyNEREIC8qIERGQS5oICovLAorCQkJCTVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAv
KiBERkFCeXRlY29kZS5oICovLAorCQkJCTVDNTcyNUFDMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFC
eXRlY29kZUNvbXBpbGVyLmNwcCAqLywKKwkJCQk1QzU3MjVBRDFBOUVCNkFDMDAyNDNCNTYgLyog
REZBQnl0ZWNvZGVDb21waWxlci5oICovLAorCQkJCTVDNTcyNUFFMUE5RUI2QUMwMDI0M0I1NiAv
KiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCAqLywKKwkJCQk1QzU3MjVBRjFBOUVCNkFDMDAy
NDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovLAogCQkJCTI2NzcyNUY5MUE1QjNB
RDkwMDNDMjRERCAvKiBERkFOb2RlLmggKi8sCiAJCQkJMjY5Mzk3MjUxQTRBNUZCRDAwRTgzNDlE
IC8qIE5GQS5jcHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRBNUI2NDAwRTgzNDlEIC8qIE5GQS5oICov
LApAQCAtMjQwNjEsNiArMjQwNzYsNyBAQAogCQkJCTg1RTcxMTlFMEFDNUQ1MzUwMDUzMjcwRiAv
KiBET01IVE1MQmFzZUZvbnRFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
OUE5QzQ5MEFBNUUzQkQwMEI2OTRCMiAvKiBET01IVE1MQm9keUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1RTcxMTlGMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MQm9keUVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM1NzI1QzMxQTlFQjZBQzAwMjQzQjU2IC8q
IERGQUJ5dGVjb2RlQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MTgzQjQyMEFBNjky
NjEwMEYxOUZBMyAvKiBET01IVE1MQlJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3
MTFBMDBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEJSRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NUJBNENERDBBQTY4NjFCMDA4ODA1MkQgLyogRE9NSFRNTEJ1dHRvbkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU3MDEsNiArMjU3MTcsNyBAQAogCQkJCTg2NTEy
RURGMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1p
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBQZXJp
b2RpY1dhdmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNTcyNUMxMUE5RUI2QUMwMDI0M0I1NiAv
KiBERkFCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQyM0E3MzAwOEYy
MEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlEMEZGMkE1RTExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDk5QjNFREQxMjhEQjUwMjAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCBp
biBIZWFkZXJzICovLApAQCAtMjY0NDAsNiArMjY0NTcsNyBAQAogCQkJCUIyMjI3QTdEMEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzQzFENDMzMTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzFENDM0MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxSZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNTcyNUM1MUE5
RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0E4MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg0NzZDOUU2MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NEEwODI5MTI4RDc4NjcwMDJEQjFGMSAvKiBT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY1Niw2
ICsyNzY3NCw3IEBACiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxQTM3QjMwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTUV2ZW50
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUM1NzI1QzIxQTlFQjZBQzAwMjQzQjU2IC8qIERG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUzQkMxMDkxMTdENDc5
ODAwQjk0MDlBIC8qIERPTUZpbGVFcnJvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMDBGMDA4
MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJF
RDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI5OTk0LDYgKzMwMDEzLDcgQEAKIAkJCQlDRDdFMDUyMjE2NTFDMjgyMDBDMTIwMUYgLyog
V2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQzRUY0NEIx
OTE3OTE1QzAwMDM0MTg0IC8qIFdlYkNvcmVDQUxheWVyRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RDNjlEREIxNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUM1NzI1QzQxQTlFQjZBQzAwMjQzQjU2
IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDNjlE
RDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4g
U291cmNlcyAqLywKIAkJCQlDRDEyN0RFRDE0RjMwOTdEMDBFODQ3NzkgLyogV2ViQ29yZUZ1bGxT
Y3JlZW5XaW5kb3cubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQw
RTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blJ1bGUuaAkocmV2aXNpb24gMTgwNTQwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7
CiAKLWVudW0gY2xhc3MgRXh0ZW5zaW9uQWN0aW9uVHlwZSB7CisvLyBGSVhNRTogbWFrZSB0aGlz
IHNtYWxsZXIuCitlbnVtIGNsYXNzIEV4dGVuc2lvbkFjdGlvblR5cGUgOiB1aW50NjRfdCB7CiAg
ICAgQmxvY2tMb2FkLAogICAgIElnbm9yZVByZXZpb3VzUnVsZXMKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDE4MDU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAj
aW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKKyNpbmNsdWRlICJERkFCeXRl
Y29kZUNvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIk5GQS5oIgogI2luY2x1ZGUgIk5GQVRvREZBLmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBA
IC04NSw3ICs4Nyw3IEBAIHZvaWQgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxlTGkK
ICAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKTsKICNlbmRpZgogCi0gICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiA9IHsgTkZBVG9ERkE6OmNvbnZlcnQobmZhKSwgcnVsZUxpc3QgfTsKKyAg
ICBjb25zdCBERkEgZGZhID0gTkZBVG9ERkE6OmNvbnZlcnQobmZhKTsKIAogI2lmIENPTlRFTlRf
RVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgZGZhQnVpbGRUaW1l
RW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CkBAIC05NSw5ICs5NywxMCBAQCB2
b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAgLy8gRklYTUU6IG5l
dmVyIGFkZCBhIERGQSB0aGF0IG9ubHkgbWF0Y2hlcyB0aGUgZW1wdHkgc2V0LgogCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmRmYS5kZWJ1Z1ByaW50RG90KCk7CisgICAgZGZhLmRlYnVnUHJpbnREb3Qo
KTsKICNlbmRpZgotCisgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEpOworICAg
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IGNv
bXBpbGVyLmNvbXBpbGUoKSwgcnVsZUxpc3QgfTsKICAgICBtX3J1bGVMaXN0cy5zZXQoaWRlbnRp
ZmllciwgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKTsKIH0KIApAQCAtMTE1LDI5ICsxMTgsMTYg
QEAgYm9vbCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNob3VsZEJsbwogewogICAgIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOwogICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UodXJsU3RyaW5nLmNvbnRhaW5zT25seUFTQ0lJKCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBv
bmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVycy4gVGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1
bWVzIHRoZSBpbnB1dCBpcyBBU0NJSS4iKTsKKyAgICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5n
ID0gdXJsU3RyaW5nLnV0ZjgoKTsKIAogICAgIGZvciAoYXV0byYgcnVsZUxpc3RTbG90IDogbV9y
dWxlTGlzdHMpIHsKLSAgICAgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENv
bnRlbnRFeHRlbnNpb24gPSBydWxlTGlzdFNsb3QudmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIHN0
YXRlID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5yb290KCk7Ci0KLSAgICAgICAgSGFz
aFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4gdHJpZ2dlcmVkQWN0aW9uczsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXJsU3RyaW5nLmxlbmd0aCgpOyArK2kpIHsK
LSAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8Y2hhcj4odXJsU3RyaW5n
W2ldKTsKLSAgICAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgICAgICBzdGF0ZSA9IGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5kZmEubmV4dFN0YXRlKHN0YXRlLCBjaGFyYWN0ZXIsIG9rKTsKLSAg
ICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnMgPSBjb21waWxlZENvbnRlbnRFeHRlbnNp
b24uZGZhLmFjdGlvbnMoc3RhdGUpOwotICAgICAgICAgICAgaWYgKCFhY3Rpb25zLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rpb25zLmJlZ2luKCks
IGFjdGlvbnMuZW5kKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdHJpZ2dlcmVkQWN0aW9u
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50NjRfdD4gc29ydGVkQWN0aW9u
czsKLSAgICAgICAgICAgIGNvcHlUb1ZlY3Rvcih0cmlnZ2VyZWRBY3Rpb25zLCBzb3J0ZWRBY3Rp
b25zKTsKLSAgICAgICAgICAgIHN0ZDo6c29ydChzb3J0ZWRBY3Rpb25zLmJlZ2luKCksIHNvcnRl
ZEFjdGlvbnMuZW5kKCkpOwotICAgICAgICAgICAgc2l6ZV90IGxhc3RBY3Rpb24gPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNvcnRlZEFjdGlvbnMubGFzdCgpKTsKKyAgICAgICAgY29uc3QgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBydWxlTGlzdFNs
b3QudmFsdWU7CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIoY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmJ5dGVjb2RlKTsKKyAgICAgICAgVmVjdG9yPEV4dGVuc2lv
bkFjdGlvblR5cGU+IGFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZyk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBkbyBzb21ldGhpbmcgd2l0
aCBlYWNoIGFjdGlvbiByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBhIGJvb2wuCisgICAgICAg
IGlmICghYWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25z
LmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOworICAgICAgICAgICAgc2l6ZV90IGxhc3RBY3Rpb24g
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFjdGlvbnMubGFzdCgpKTsKICAgICAgICAgICAgIGlmIChj
b21waWxlZENvbnRlbnRFeHRlbnNpb24ucnVsZUxpc3RbbGFzdEFjdGlvbl0uYWN0aW9uKCkudHlw
ZSA9PSBFeHRlbnNpb25BY3Rpb25UeXBlOjpCbG9ja0xvYWQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCShyZXZpc2lv
biAxODA1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJERkEuaCIKKyNpbmNsdWRl
ICJERkFCeXRlY29kZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAt
NjAsNyArNjEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiB7Ci0gICAgICAgIERGQSBkZmE7CisgICAgICAgIFZlY3RvcjxERkFCeXRl
Y29kZT4gYnl0ZWNvZGU7CiAgICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4gcnVs
ZUxpc3Q7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkEuY3BwCShyZXZpc2lvbiAxODA1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwzMSArNTksNiBAQCBERkEmIERGQTo6
b3BlcmF0b3I9KGNvbnN0IERGQSYgZGZhKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotdW5zaWdu
ZWQgREZBOjpuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJhY3Rlciwg
Ym9vbCYgb2spIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGN1cnJlbnRTdGF0ZSA8IG1fbm9kZXMuc2l6
ZSgpKTsKLQotICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX25vZGVzW2N1cnJlbnRTdGF0ZV07
Ci0gICAgYXV0byBuZXh0Tm9kZSA9IG5vZGUudHJhbnNpdGlvbnMuZmluZChjaGFyYWN0ZXIpOwot
ICAgIGlmIChuZXh0Tm9kZSAhPSBub2RlLnRyYW5zaXRpb25zLmVuZCgpKSB7Ci0gICAgICAgIG9r
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG5leHROb2RlLT52YWx1ZTsKLSAgICB9Ci0gICAgaWYg
KG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKSB7Ci0gICAgICAgIG9rID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uOwotICAgIH0KLSAgICBvayA9IGZhbHNl
OwotICAgIHJldHVybiAwOwotCi19Ci0KLWNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIERGQTo6YWN0
aW9ucyh1bnNpZ25lZCBjdXJyZW50U3RhdGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGN1cnJlbnRT
dGF0ZSA8IG1fbm9kZXMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9ub2Rlc1tjdXJyZW50U3RhdGVd
LmFjdGlvbnM7Ci19Ci0KICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJV
R0dJTkcKIHN0YXRpYyB2b2lkIHByaW50UmFuZ2UoYm9vbCBmaXJzdFJhbmdlLCBjaGFyIHJhbmdl
U3RhcnQsIGNoYXIgcmFuZ2VFbmQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkEuaAkocmV2aXNpb24gMTgwNTQwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niw4IEBAIHB1YmxpYzoK
ICAgICBERkEmIG9wZXJhdG9yPShjb25zdCBERkEmKTsKIAogICAgIHVuc2lnbmVkIHJvb3QoKSBj
b25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRyYW5zaXRpb24g
dG8gYSB2YWxpZCBzdGF0ZSBvbiAiY2hhcmFjdGVyIiwgcmV0dXJuIHRoYXQgc3RhdGUgYW5kIHNl
dCBvayB0byB0cnVlLgotICAgIC8vIE90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRl
ZmluZWQgYW5kIG9rIGlzIGZhbHNlLgotICAgIHVuc2lnbmVkIG5leHRTdGF0ZSh1bnNpZ25lZCBj
dXJyZW50U3RhdGUsIGNoYXIgY2hhcmFjdGVyLCBib29sJiBvaykgY29uc3Q7Ci0gICAgY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYgYWN0aW9ucyh1bnNpZ25lZCBjdXJyZW50U3RhdGUpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAg
IGNvbnN0IERGQU5vZGUmIG5vZGVBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVz
W2ldOyB9CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcK
ICAgICB2b2lkIGRlYnVnUHJpbnREb3QoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZBQnl0ZWNvZGVfaAorI2Rl
ZmluZSBERkFCeXRlY29kZV9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewor
CitlbnVtIGNsYXNzIERGQUJ5dGVjb2RlIDogdWludDhfdCB7CisKKyAgICAvLyBDaGVja1ZhbHVl
IGlzIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSB0byBjaGVjayAoMSBieXRlKSwKKyAgICAvLyB0aGVu
IHRoZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsICg0IGJ5dGVzKS4K
KyAgICBDaGVja1ZhbHVlLAorCisgICAgLy8gQXBwZW5kQWN0aW9uIGlzIGZvbGxvd2VkIGJ5IHRo
ZSBhY3Rpb24gdG8gYXBwZW5kICg4IGJ5dGVzKS4KKyAgICBBcHBlbmRBY3Rpb24sCisKKyAgICAv
LyBUZXJtaW5hdGUgaXMgbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nLgorICAgIFRlcm1pbmF0ZSwK
KworICAgIC8vIEp1bXAgaXMgZm9sbG93ZWQgYnkgdGhlIGluZGV4IHRvIGp1bXAgdG8gdW5jb25k
aXRpb25hbGx5ICg0IGJ5dGVzKS4KKyAgICBKdW1wLAorICAgIAorICAgIC8vIEZJWE1FOiBUaGVy
ZSBzaG91bGQgYmUgYSBDaGVja0JpdCBieXRlY29kZSB0byBkbyBiaW5hcnkgc2VhcmNoZXMgaWYg
dGhlcmUgYXJlIGxvdHMgb2YgZWRnZXMgZnJvbSB0aGlzIG5vZGUuCit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFC
eXRlY29kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25SdWxlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5j
bHVkZSAiREZBLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIHZv
aWQgYXBwZW5kKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCBJbnRUeXBlIHZhbHVlKQor
eworICAgIC8vIFRoZXJlJ3MgZ290IHRvIGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBidXQg
dGhpcyB3b3Jrcy4KKyAgICBieXRlY29kZS5hcHBlbmQoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPj4gMCkpOworICAgIGlmIChzaXplb2YoSW50
VHlwZSkgPiAxKQorICAgICAgICBieXRlY29kZS5hcHBlbmQoc3RhdGljX2Nhc3Q8REZBQnl0ZWNv
ZGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPj4gOCkpOworICAgIGlmIChzaXplb2Yo
SW50VHlwZSkgPiAyKQorICAgICAgICBieXRlY29kZS5hcHBlbmQoc3RhdGljX2Nhc3Q8REZBQnl0
ZWNvZGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPj4gMTYpKTsKKyAgICBpZiAoc2l6
ZW9mKEludFR5cGUpID4gMykKKyAgICAgICAgYnl0ZWNvZGUuYXBwZW5kKHN0YXRpY19jYXN0PERG
QUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpID4+IDI0KSk7CisgICAgaWYg
KHNpemVvZihJbnRUeXBlKSA+IDQpCisgICAgICAgIGJ5dGVjb2RlLmFwcGVuZChzdGF0aWNfY2Fz
dDxERkFCeXRlY29kZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSA+PiAzMikpOworICAg
IGlmIChzaXplb2YoSW50VHlwZSkgPiA1KQorICAgICAgICBieXRlY29kZS5hcHBlbmQoc3RhdGlj
X2Nhc3Q8REZBQnl0ZWNvZGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPj4gNDApKTsK
KyAgICBpZiAoc2l6ZW9mKEludFR5cGUpID4gNikKKyAgICAgICAgYnl0ZWNvZGUuYXBwZW5kKHN0
YXRpY19jYXN0PERGQUJ5dGVjb2RlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpID4+IDQ4
KSk7CisgICAgaWYgKHNpemVvZihJbnRUeXBlKSA+IDcpCisgICAgICAgIGJ5dGVjb2RlLmFwcGVu
ZChzdGF0aWNfY2FzdDxERkFCeXRlY29kZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSA+
PiA1NikpOworfQorCitpbmxpbmUgdm9pZCBzZXQzMkJpdHMoVmVjdG9yPERGQUJ5dGVjb2RlPiYg
Ynl0ZWNvZGUsIHVuc2lnbmVkIGluZGV4LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICAvLyBUaGVy
ZSdzIGdvdCB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IHRoaXMgd29ya3MuCisg
ICAgYnl0ZWNvZGVbaW5kZXggKyAwXSA9IHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlPih2YWx1ZSA+
PiAwKTsKKyAgICBieXRlY29kZVtpbmRleCArIDFdID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGU+
KHZhbHVlID4+IDgpOworICAgIGJ5dGVjb2RlW2luZGV4ICsgMl0gPSBzdGF0aWNfY2FzdDxERkFC
eXRlY29kZT4odmFsdWUgPj4gMTYpOworICAgIGJ5dGVjb2RlW2luZGV4ICsgM10gPSBzdGF0aWNf
Y2FzdDxERkFCeXRlY29kZT4odmFsdWUgPj4gMjQpOworfQorICAgIAordm9pZCBERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdW5z
aWduZWQgaW5kZXgpCit7CisgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZvciBsaW5raW5n
LgorICAgIG5vZGVTdGFydHNbaW5kZXhdID0gYnl0ZWNvZGUuc2l6ZSgpOworICAgIAorICAgIC8v
IEFwcGVuZCBhY3Rpb25zLgorICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBkZmEubm9kZUF0KGlu
ZGV4KTsKKyAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykgeworICAgICAg
ICBhcHBlbmQ8REZBQnl0ZWNvZGU+KGJ5dGVjb2RlLCBERkFCeXRlY29kZTo6QXBwZW5kQWN0aW9u
KTsKKyAgICAgICAgYXBwZW5kPEV4dGVuc2lvbkFjdGlvblR5cGU+KGJ5dGVjb2RlLCBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25BY3Rpb25UeXBlPihhY3Rpb24pKTsKKyAgICB9CisgICAgCisgICAgLy8g
Q2hlY2sgdHJhbnNpdGlvbnMuCisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9k
ZS50cmFuc2l0aW9ucykgeworICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGU+KGJ5dGVjb2RlLCBE
RkFCeXRlY29kZTo6Q2hlY2tWYWx1ZSk7CisgICAgICAgIGFwcGVuZDx1aW50OF90PihieXRlY29k
ZSwgdHJhbnNpdGlvbi5rZXkpOworICAgICAgICBhcHBlbmQ8dWludDMyX3Q+KGJ5dGVjb2RlLCAt
MSk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayBvciB0ZXJtaW5hdGUuCisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tU
cmFuc2l0aW9uKSB7CisgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZT4oYnl0ZWNvZGUsIERGQUJ5
dGVjb2RlOjpKdW1wKTsKKyAgICAgICAgYXBwZW5kPHVpbnQzMl90PihieXRlY29kZSwgLTEpOyAv
LyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICB9IGVsc2UKKyAgICAg
ICAgYXBwZW5kPERGQUJ5dGVjb2RlPihieXRlY29kZSwgREZBQnl0ZWNvZGU6OlRlcm1pbmF0ZSk7
Cit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6bGlua05vZGUoVmVjdG9yPERGQUJ5dGVj
b2RlPiYgYnl0ZWNvZGUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGNvbnN0IERGQU5vZGUmIG5v
ZGUgPSBkZmEubm9kZUF0KGluZGV4KTsKKyAgICB1bnNpZ25lZCBhY3Rpb25TdGFydCA9IG5vZGVT
dGFydHNbaW5kZXhdOworICAgIHVuc2lnbmVkIHRyYW5zaXRpb25TdGFydCA9IGFjdGlvblN0YXJ0
ICsgbm9kZS5hY3Rpb25zLnNpemUoKSAqIChzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKEV4
dGVuc2lvbkFjdGlvblR5cGUpKTsKKyAgICAKKyAgICAvLyBMaW5rIHRyYW5zaXRpb25zLgorICAg
IHVuc2lnbmVkIHRyYW5zaXRpb25zTGlua2VkID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCB0cmFu
c2l0aW9uQ29tcGlsZWRTaXplID0gc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90
KSArIHNpemVvZih1aW50MzJfdCk7CisgICAgLy8gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyB3aWxs
IGl0ZXJhdGUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgd2hlbiBJIGNvbXBpbGVkLiBJcyB0aGF0IGEg
dmFsaWQgYXNzdW1wdGlvbj8KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2Rl
LnRyYW5zaXRpb25zKSB7CisgICAgICAgIHNldDMyQml0cyhieXRlY29kZSwgdHJhbnNpdGlvblN0
YXJ0ICsgdHJhbnNpdGlvbnNMaW5rZWQgKiB0cmFuc2l0aW9uQ29tcGlsZWRTaXplICsgc2l6ZW9m
KERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSwgbm9kZVN0YXJ0c1t0cmFuc2l0aW9uLnZh
bHVlXSk7CisgICAgICAgIHRyYW5zaXRpb25zTGlua2VkKys7CisgICAgfQorICAgIAorICAgIC8v
IExpbmsgZmFsbGJhY2suCisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGZhbGxiYWNrU3RhcnQgPSB0cmFuc2l0aW9uU3RhcnQgKyBub2RlLnRy
YW5zaXRpb25zLnNpemUoKSAqIChzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3Qp
ICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHNldDMyQml0cyhieXRlY29kZSwgZmFsbGJh
Y2tTdGFydCArIHNpemVvZihERkFCeXRlY29kZSksIG5vZGVTdGFydHNbbm9kZS5mYWxsYmFja1Ry
YW5zaXRpb25dKTsKKyAgICB9Cit9CisgICAgCitWZWN0b3I8REZBQnl0ZWNvZGU+IERGQUJ5dGVj
b2RlQ29tcGlsZXI6OmNvbXBpbGUoKQoreworICAgIFdURkxvZ0Fsd2F5cygiQ09NUElMSU5HXG4i
KTsgLy8gVGhpcyBoYXBwZW5zIHRvbyBvZnRlbiAoT09QUyEpCisgICAgCisgICAgVmVjdG9yPERG
QUJ5dGVjb2RlPiBieXRlY29kZTsKKyAgICBub2RlU3RhcnRzLnJlc2l6ZShkZmEuc2l6ZSgpKTsK
KyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJvb3QgaXMgYWx3YXlzIGF0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGJ5dGVjb2RlLgorICAgIGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBkZmEucm9vdCgp
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmIChpICE9IGRmYS5yb290KCkpCisgICAgICAgICAgICBjb21waWxlTm9kZShi
eXRlY29kZSwgaSk7CisgICAgfQorCisgICAgLy8gbGluaworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmEuc2l6ZSgpOyBpKyspCisgICAgICAgIGxpbmtOb2RlKGJ5dGVjb2RlLCBpKTsK
KyAgICAKKyAgICBXVEZMb2dBbHdheXMoIkJVRkZFUiBTSVpFOiAlZFxuIiwgKGludClieXRlY29k
ZS5zaXplKCkpOworICAgIAorICAgIHJldHVybiBieXRlY29kZTsKK30KKyAgICAKK30gLy8gbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERGQUJ5dGVjb2RlQ29tcGlsZXJfaAorI2RlZmluZSBERkFCeXRlY29kZUNvbXBpbGVy
X2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJERkFCeXRl
Y29kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBERkE7CisKK2NsYXNzIERG
QUJ5dGVjb2RlQ29tcGlsZXIgeworcHVibGljOgorICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIoY29u
c3QgREZBJiBkZmEpCisgICAgICAgIDogZGZhKGRmYSkKKyAgICB7IH0KKyAgICBWZWN0b3I8REZB
Qnl0ZWNvZGU+IGNvbXBpbGUoKTsKK3ByaXZhdGU6CisgICAgdm9pZCBjb21waWxlTm9kZShWZWN0
b3I8REZBQnl0ZWNvZGU+JiwgdW5zaWduZWQgaW5kZXgpOworICAgIHZvaWQgbGlua05vZGUoVmVj
dG9yPERGQUJ5dGVjb2RlPiYsIHVuc2lnbmVkIGluZGV4KTsKKworICAgIGNvbnN0IERGQSYgZGZh
OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbm9kZVN0YXJ0czsKK307CisKK30gLy8gbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFCeXRlY29kZUNvbXBp
bGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZUludGVycHJldGVyLmgiCisKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK3N0
YXRpYyBpbmxpbmUgSW50VHlwZSBnZXRCaXRzKGNvbnN0IFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5
dGVjb2RlLCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgSW50VHlwZSo+KCZieXRlY29kZVtpbmRleF0pOworfQorICAgIAorVmVjdG9yPEV4dGVu
c2lvbkFjdGlvblR5cGU+IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBD
U3RyaW5nJiB1cmwpCit7CisgICAgdWludDMyX3QgYnl0ZWNvZGVJbmRleCA9IDA7CisgICAgdWlu
dDMyX3QgdXJsSW5kZXggPSAwOworICAgIFZlY3RvcjxFeHRlbnNpb25BY3Rpb25UeXBlPiBhY3Rp
b25zOworICAgIAorICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgaWYgaW50ZXJw
cmV0aW5nIGNvcnJlY3RseSBjb21waWxlZCBieXRlY29kZS4gSSdtIG5vdCBzdXJlIGhvdyBvYnZp
b3VzIHRoYXQgaXMgb3IgaWYgSSBzaG91bGQgYWRkIGEgY2hlY2sgc29tZWhvdy4KKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIHN3aXRjaCAoYnl0ZWNvZGVbYnl0ZWNvZGVJbmRleF0pIHsKKyAgICAg
ICAgY2FzZSBERkFCeXRlY29kZTo6VGVybWluYXRlOgorICAgICAgICAgICAgcmV0dXJuIGFjdGlv
bnM7CisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGU6OkNoZWNrVmFsdWU6CisgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZh
bHVlIHN0b3JlZCB3aXRoIHRoZSBieXRlY29kZS4KKyAgICAgICAgICAgIEFTU0VSVCh1cmwuZGF0
YSgpKTsKKyAgICAgICAgICAgIGlmICh1cmwuZGF0YSgpW3VybEluZGV4XSA9PSBnZXRCaXRzPHVp
bnQ4X3Q+KGJ5dGVjb2RlLCBieXRlY29kZUluZGV4ICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpIHsK
KyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gZ2V0Qml0czx1aW50MzJfdD4oYnl0ZWNv
ZGUsIGJ5dGVjb2RlSW5kZXggKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3Qp
KTsKKyAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRn
ZSBpbiB0aGUgREZBLgorICAgICAgICAgICAgICAgIGlmICghdXJsLmRhdGEoKVt1cmxJbmRleF0p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hh
cmFjdGVyIGF0IGVuZC4KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJ5dGVj
b2RlSW5kZXggKz0gc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSArIHNpemVv
Zih1aW50MzJfdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkFCeXRlY29k
ZTo6SnVtcDoKKyAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBnZXRCaXRzPHVpbnQzMl90Pihi
eXRlY29kZSwgYnl0ZWNvZGVJbmRleCArIHNpemVvZihERkFCeXRlY29kZSkpOworICAgICAgICAg
ICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KKyAg
ICAgICAgICAgIGlmICghdXJsLmRhdGEoKVt1cmxJbmRleF0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbnM7IC8vIFJlYWNoZWQgbnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGU6OkFwcGVuZEFjdGlvbjoKKyAgICAg
ICAgICAgIGFjdGlvbnMuYXBwZW5kKGdldEJpdHM8RXh0ZW5zaW9uQWN0aW9uVHlwZT4oYnl0ZWNv
ZGUsIGJ5dGVjb2RlSW5kZXggKyBzaXplb2YoREZBQnl0ZWNvZGUpKSk7CisgICAgICAgICAgICBi
eXRlY29kZUluZGV4ICs9IHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YoRXh0ZW5zaW9uQWN0
aW9uVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEludmFsaWQgYnl0ZWNvZGUuCisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHVybEluZGV4IDwgdXJsLmxlbmd0aCgpKTsgLy8gV2Ug
c2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgYXQgYSBudWxsIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9m
IGEgU3RyaW5nLgorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUludGVycHJldGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCisj
ZGVmaW5lIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXJfaAorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisjaW5jbHVkZSAi
REZBQnl0ZWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBERkFCeXRlY29kZUludGVycHJldGVyIHsKK3B1Ymxp
YzoKKyAgICBERkFCeXRlY29kZUludGVycHJldGVyKGNvbnN0IFZlY3RvcjxERkFCeXRlY29kZT4m
IGJ5dGVjb2RlKQorICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQorICAgIHsgfTsKKyAgICAK
KyAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uVHlwZT4gaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcm
KTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisj
ZW5kaWYgLy8gREZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBTm9kZS5oCShyZXZpc2lvbiAxODA1NDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVi
dWdnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEu
Y3BwCShyZXZpc2lvbiAxODA1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ORkFUb0RGQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVs
ZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAjaW5jbHVkZSAi
REZBTm9kZS5oIgogI2luY2x1ZGUgIk5GQS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247438</attachid>
            <date>2015-02-26 12:18:29 -0800</date>
            <delta_ts>2015-02-26 15:46:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226121816.patch</filename>
            <type>text/plain</type>
            <size>35813</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpFeHRlbnNpb25zTWFuYWdlcjo6bG9hZEFjdGlvbik6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkE6Om5leHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9k
ZUF0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6
OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6REZBQnl0ZWNvZGVD
b21waWxlcik6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omdl
dEJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpERkFCeXRlY29kZUludGVycHJldGVy
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmg6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwOgorCiAyMDE1LTAyLTI2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5nIG91dCByMTgwNjAyLCByMTgwNjA4
LCByMTgwNjEzLCByMTgwNjE3LCByMTgwNjcxLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwNjg2KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTQwLDYgKzIxNDAsMTEgQEAKIAkJNUM0MzA0QjExOTFBQzkwODAwMEUyQkMw
IC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmggKi87IH07CiAJCTVDNDMwNEI1MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5j
cHAgKi87IH07CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
NDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsK
KwkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBQjFBOUVCNkFDMDAyNDNC
NTYgLyogREZBQnl0ZWNvZGUuaCAqLzsgfTsKKwkJNUM1NzI1QzIxQTlFQjZBQzAwMjQzQjU2IC8q
IERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29t
cGlsZXIuY3BwICovOyB9OworCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM1NzI1QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLzsg
fTsKKwkJNUM1NzI1QzQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1
QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovOyB9Owor
CQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1QUYxQTlF
QjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgfTsKIAkJNUNGQzQz
NTAxOTI0MDlFMzAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RTE5MjQwNkE5MDBB
MEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDIxM0VD
RTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMDEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQy
MUE4MDExM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OwpAQCAtOTI4NSw2
ICs5MjkwLDExIEBACiAJCTVDNDMwNEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlk
bDsgcGF0aCA9IGNhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNo
YWRlclRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRC
NDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlQ29tcGlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGQzQzNEUxOTI0MDZBOTAwQTBEM0I1
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJMb2NrQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDIxQTgwMDEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlZUVFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTM4Nyw2ICsxNTM5NywxMSBAQAogCQkJCTI2RjBDODk2MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc01hbmFnZXIuaCAqLywKIAkJCQkyNjc3MjVGNjFBNUIzQUQ5MDAzQzI0REQg
LyogREZBLmNwcCAqLywKIAkJCQkyNjc3MjVGNzFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmggKi8s
CisJCQkJNUM1NzI1QUIxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggKi8sCisJCQkJ
NUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovLAor
CQkJCTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8s
CisJCQkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwICovLAorCQkJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVy
cHJldGVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCAq
LywKIAkJCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLywKIAkJCQkyNjkz
OTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8sCkBAIC0yNDA2MSw2ICsyNDA3Niw3IEBA
CiAJCQkJODVFNzExOUUwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxCYXNlRm9udEVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5QTlDNDkwQUE1RTNCRDAwQjY5NEIyIC8q
IERPTUhUTUxCb2R5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOUYwQUM1RDUz
NTAwNTMyNzBGIC8qIERPTUhUTUxCb2R5RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUxODNCNDIwQUE2OTI2MTAwRjE5RkEzIC8qIERPTUhUTUxCUkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUEwMEFDNUQ1MzUwMDUzMjcwRiAvKiBE
T01IVE1MQlJFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0Q0REMEFB
Njg2MUIwMDg4MDUyRCAvKiBET01IVE1MQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTcwMSw2ICsyNTcxNyw3IEBACiAJCQkJODY1MTJFREYxNTRBMkFFRjAwQTkwNDI2IC8qIFBl
cmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCThBRjRFNTVDMTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRF
MCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VERDEyOERCNTAyMDBF
NzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjQ0MCw2
ICsyNjQ1Nyw3IEBACiAJCQkJQjIyMjdBN0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMUQ0MzMxNzhENUFCNTAwMTQx
RTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODNDMUQ0MzQxNzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUM1NzI1QzUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURG
NkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg0QTA4MjkxMjhENzg2NzAwMkRCMUYxIC8qIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NjU2LDYgKzI3Njc0LDcgQEAKIAkJCQk4NUFGQTgy
MzBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzFB
MzdCMzA5N0M3MTVGMDAxOUYzRDggLyogRE9NRXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRTNCQzEwOTExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMEYwMDgwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVENjA5QkMxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk5OTQsNiArMzAwMTMsNyBAQAog
CQkJCUNEN0UwNTIyMTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDNFRjQ0QjE5MTc5MTVDMDAwMzQxODQgLyogV2ViQ29y
ZUNBTGF5ZXJFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM2OUREQjE2MzcxRkQ0MDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAq
LywKKwkJCQk1QzU3MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZDMDA3QzM4REYgLyogV2Vi
Q29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMTI3REVE
MTRGMzA5N0QwMEU4NDc3OSAvKiBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNDAzNzlDMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODA2ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotZW51bSBjbGFzcyBFeHRlbnNpb25B
Y3Rpb25UeXBlIHsKK2VudW0gY2xhc3MgRXh0ZW5zaW9uQWN0aW9uSW5kZXggOiB1aW50MzJfdCB7
CiAgICAgQmxvY2tMb2FkLAogICAgIElnbm9yZVByZXZpb3VzUnVsZXMKIH07CkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RydWN0IEFjdGlvbiB7Ci0gICAgICAgIEV4
dGVuc2lvbkFjdGlvblR5cGUgdHlwZTsKKyAgICAgICAgRXh0ZW5zaW9uQWN0aW9uSW5kZXggdHlw
ZTsKICAgICB9OwogCiAgICAgQ29udGVudEV4dGVuc2lvblJ1bGUoY29uc3QgVHJpZ2dlciYsIGNv
bnN0IEFjdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAx
ODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVi
dWdnaW5nLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVDb21waWxlci5oIgorI2luY2x1ZGUgIkRG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJORkEuaCIKICNpbmNsdWRlICJORkFU
b0RGQS5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIENvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JU
SU5HCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwpAQCAtOTUsOSArOTcsMTMgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OnNldFJ1bGVMaQogICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNo
ZXMgdGhlIGVtcHR5IHNldC4KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwotICAgIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEuZGVidWdQcmludERv
dCgpOworICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKIAorICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CisgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEs
IGJ5dGVjb2RlKTsKKyAgICBjb21waWxlci5jb21waWxlKCk7CisgICAgQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgYnl0ZWNvZGUsIHJ1bGVMaXN0
IH07CiAgICAgbV9ydWxlTGlzdHMuc2V0KGlkZW50aWZpZXIsIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbik7CiB9CiAKQEAgLTExNSwzMCArMTIxLDE3IEBAIGJvb2wgQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpzaG91bGRCbG8KIHsKICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5z
dHJpbmcoKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHVybFN0cmluZy5jb250YWluc09ubHlB
U0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3Rl
cnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1lcyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7
CisgICAgY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKICAg
ICBmb3IgKGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVsZUxpc3RzKSB7Ci0gICAgICAgIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RT
bG90LnZhbHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5kZmEucm9vdCgpOwotCi0gICAgICAgIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNo
PHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4+IHRyaWdnZXJlZEFjdGlvbnM7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVybFN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoYXJhY3Rl
ciA9IHN0YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tpXSk7Ci0gICAgICAgICAgICBib29sIG9r
OwotICAgICAgICAgICAgc3RhdGUgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLm5leHRT
dGF0ZShzdGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBh
Y3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5hY3Rpb25zKHN0YXRlKTsKLSAg
ICAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dl
cmVkQWN0aW9ucy5hZGQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dWludDY0X3Q+IHNvcnRlZEFjdGlvbnM7Ci0gICAgICAgICAgICBjb3B5VG9WZWN0
b3IodHJpZ2dlcmVkQWN0aW9ucywgc29ydGVkQWN0aW9ucyk7Ci0gICAgICAgICAgICBzdGQ6OnNv
cnQoc29ydGVkQWN0aW9ucy5iZWdpbigpLCBzb3J0ZWRBY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
ICAgIHNpemVfdCBsYXN0QWN0aW9uID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3J0ZWRBY3Rpb25z
Lmxhc3QoKSk7Ci0gICAgICAgICAgICBpZiAoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLnJ1bGVM
aXN0W2xhc3RBY3Rpb25dLmFjdGlvbigpLnR5cGUgPT0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkKQorICAgICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiA9IHJ1bGVMaXN0U2xvdC52YWx1ZTsKKyAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRlbnRFeHRlbnNpb24uYnl0ZWNv
ZGUpOworICAgICAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+IGFjdGlvbnMgPSBpbnRl
cnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZXZlbnR1YWxseSBkbyBzb21ldGhpbmcgd2l0aCBlYWNoIGFjdGlvbiByYXRoZXIgdGhhbiBq
dXN0IHJldHVybmluZyBhIGJvb2wuCisgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwor
ICAgICAgICAgICAgc2l6ZV90IGxhc3RBY3Rpb24gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFjdGlv
bnMubGFzdCgpKTsKKyAgICAgICAgICAgIGlmIChjb21waWxlZENvbnRlbnRFeHRlbnNpb24ucnVs
ZUxpc3RbbGFzdEFjdGlvbl0uYWN0aW9uKCkudHlwZSA9PSBFeHRlbnNpb25BY3Rpb25JbmRleDo6
QmxvY2tMb2FkKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uUnVsZS5oIgogI2luY2x1ZGUgIkRGQS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw3ICs2MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKLSAg
ICAgICAgREZBIGRmYTsKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAg
ICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc01h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAgc3RhdGljIGJvb2wgbG9hZEFjdGlvbihF
eGVjU3RhdGUmIGV4ZWMsIAogICAgIFN0cmluZyBhY3Rpb25UeXBlID0gdHlwZU9iamVjdC50b1dU
RlN0cmluZygmZXhlYyk7CiAKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2siKQotICAgICAg
ICBhY3Rpb24udHlwZSA9IEV4dGVuc2lvbkFjdGlvblR5cGU6OkJsb2NrTG9hZDsKKyAgICAgICAg
YWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6QmxvY2tMb2FkOwogICAgIGVsc2Ug
aWYgKGFjdGlvblR5cGUgPT0gImlnbm9yZS1wcmV2aW91cy1ydWxlcyIpCi0gICAgICAgIGFjdGlv
bi50eXBlID0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczsKKyAgICAg
ICAgYWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6SWdub3JlUHJldmlvdXNSdWxl
czsKICAgICBlbHNlIGlmIChhY3Rpb25UeXBlICE9ICJibG9jayIgJiYgYWN0aW9uVHlwZSAhPSAi
IikgewogICAgICAgICBXVEZMb2dBbHdheXMoIlVucmVjb2duaXplZCBhY3Rpb246IFwiJXNcIiIs
IGFjdGlvblR5cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkocmV2aXNpb24gMTgwNjg2
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMzEgKzU5LDYgQEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRm
YSkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0YXRlKHVuc2ln
bmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdAotewotICAg
IEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBERkFO
b2RlJiBub2RlID0gbV9ub2Rlc1tjdXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4dE5vZGUgPSBu
b2RlLnRyYW5zaXRpb25zLmZpbmQoY2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5vZGUgIT0gbm9k
ZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBuZXh0Tm9kZS0+dmFsdWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNp
dGlvbikgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBub2RlLmZhbGxiYWNr
VHJhbnNpdGlvbjsKLSAgICB9Ci0gICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLQotfQot
Ci1jb25zdCBWZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0
YXRlKSBjb25zdAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG1fbm9kZXNbY3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQotCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmlu
dFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJKHJldmlzaW9uIDE4
MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxMCArNDYsOCBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29u
c3QgREZBJik7CiAKICAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9
Ci0gICAgLy8gSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNo
YXJhY3RlciIsIHJldHVybiB0aGF0IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBP
dGhlcndpc2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4K
LSAgICB1bnNpZ25lZCBuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJh
Y3RlciwgYm9vbCYgb2spIGNvbnN0OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlv
bnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogCiAjaWYgQ09OVEVOVF9F
WFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERGQUJ5dGVjb2RlX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVfaAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKwordHlwZWRlZiB1aW50OF90IERGQUJ5
dGVjb2RlOworCitlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsK
KworICAgIC8vIENoZWNrVmFsdWUgaGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIHZhbHVl
IHRvIGNoZWNrICgxIGJ5dGUpLAorICAgIC8vIFRoZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSB2
YWx1ZXMgYXJlIGVxdWFsICg0IGJ5dGVzKS4KKyAgICBDaGVja1ZhbHVlLAorCisgICAgLy8gQXBw
ZW5kQWN0aW9uIGhhcyBvbmUgYXJndW1lbnQ6CisgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQg
KDQgYnl0ZXMpLgorICAgIEFwcGVuZEFjdGlvbiwKKworICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8g
YXJndW1lbnRzLgorICAgIFRlcm1pbmF0ZSwKKworICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVu
dDoKKyAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byB1bmNvbmRpdGlvbmFsbHkgKDQgYnl0ZXMp
LgorICAgIEp1bXAsCit9OworCitzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCit7CisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbikgeworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
Q2hlY2tWYWx1ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246CisgICAgICAgIHJldHVybiBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pOworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVt
cDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVv
Zih1bnNpZ25lZCk7CisgICAgfQorfQorICAgIAorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVu
c2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFCeXRlY29kZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVj
b2RlQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiREZBLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxERkFC
eXRlY29kZT4mIGJ5dGVjb2RlLCBJbnRUeXBlIHZhbHVlKQoreworICAgIGJ5dGVjb2RlLnJlc2l6
ZShieXRlY29kZS5zaXplKCkgKyBzaXplb2YoSW50VHlwZSkpOworICAgICpyZWludGVycHJldF9j
YXN0PEludFR5cGUqPigmYnl0ZWNvZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5cGUp
XSkgPSB2YWx1ZTsKK30KKworaW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29k
ZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVlOworfQor
Cit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9uQWN0
aW9uSW5kZXggYWN0aW9uKQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihi
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICBhcHBl
bmQ8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+KGJ5dGVjb2RlLCBhY3Rpb24pOworfQorCit2b2lkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4
KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihieXRlY29kZSwgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcCk7CisgICAgbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsKKyAgICBhcHBl
bmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVu
IGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUo
dWludDhfdCB2YWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpCit7CisgICAgYXBw
ZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpDaGVja1ZhbHVlKTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnl0ZWNvZGUsIHZhbHVlKTsK
KyAgICBsaW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYnl0ZWNvZGUuc2l6ZSgpLCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCkpOworICAgIGFwcGVuZDx1bnNpZ25lZD4oYnl0ZWNvZGUsIDAp
OyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KK30KKwordm9pZCBERkFC
eXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKCkKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0
ZSk7Cit9CisgICAgCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKFZlY3Rv
cjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBSZWNv
cmQgc3RhcnRpbmcgaW5kZXggZm9yIGxpbmtpbmcuCisgICAgbm9kZVN0YXJ0c1tpbmRleF0gPSBi
eXRlY29kZS5zaXplKCk7CisgICAgCisgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IGRmYS5ub2Rl
QXQoaW5kZXgpOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKQorICAg
ICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PEV4dGVuc2lvbkFjdGlvbkluZGV4Pihh
Y3Rpb24pKTsKKyAgICAKKyAgICBsaW5rUmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobGlua1JlY29y
ZHMuc2l6ZSgpICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgdHJhbnNpdGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCisgICAgICAgIGVtaXRDaGVja1ZhbHVl
KHRyYW5zaXRpb24ua2V5LCB0cmFuc2l0aW9uLnZhbHVlKTsKKyAgICAKKyAgICBpZiAobm9kZS5o
YXNGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgIGVtaXRKdW1wKG5vZGUuZmFsbGJhY2tUcmFu
c2l0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKK30KKyAgICAKK3Zv
aWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCit7CisgICAgQVNTRVJUKCFieXRlY29k
ZS5zaXplKCkpOworICAgIG5vZGVTdGFydHMucmVzaXplKGRmYS5zaXplKCkpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg
Ynl0ZWNvZGUuCisgICAgY29tcGlsZU5vZGUoYnl0ZWNvZGUsIGRmYS5yb290KCkpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
aWYgKGkgIT0gZGZhLnJvb3QoKSkKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBp
KTsKKyAgICB9CisKKyAgICAvLyBMaW5rLgorICAgIGZvciAoY29uc3QgYXV0byYgbGlua1JlY29y
ZCA6IGxpbmtSZWNvcmRzKQorICAgICAgICBzZXQzMkJpdHMoYnl0ZWNvZGUsIGxpbmtSZWNvcmQu
Zmlyc3QsIG5vZGVTdGFydHNbbGlua1JlY29yZC5zZWNvbmRdKTsKK30KKyAgICAKK30gLy8gbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERGQUJ5dGVjb2RlQ29tcGlsZXJfaAorI2RlZmluZSBERkFCeXRlY29kZUNvbXBpbGVy
X2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJDb250ZW50
RXh0ZW5zaW9uUnVsZS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucyB7CisKK2NsYXNzIERGQTsKKworY2xhc3MgREZBQnl0ZWNvZGVDb21waWxlciB7Citw
dWJsaWM6CisgICAgREZBQnl0ZWNvZGVDb21waWxlcihjb25zdCBERkEmIGRmYSwgVmVjdG9yPERG
QUJ5dGVjb2RlPiYgYnl0ZWNvZGUpCisgICAgICAgIDogYnl0ZWNvZGUoYnl0ZWNvZGUpCisgICAg
ICAgICwgZGZhKGRmYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZSgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgY29tcGlsZU5vZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYsIHVu
c2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgZW1pdEFwcGVuZEFjdGlvbihFeHRlbnNpb25BY3Rp
b25JbmRleCk7CisgICAgdm9pZCBlbWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCk7CisgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZSh1aW50OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0
aW5hdGlvbk5vZGVJbmRleCk7CisgICAgdm9pZCBlbWl0VGVybWluYXRlKCk7CisKKyAgICBWZWN0
b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKKyAgICBjb25zdCBERkEmIGRmYTsKKyAgICAKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IG5vZGVTdGFydHM7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHZh
bHVlIGlzIHRoZSBpbmRleCBpbiB0aGUgYnl0ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1wIGlz
IHRvIGJlIHdyaXR0ZW4uCisgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXggb2Yg
dGhlIG5vZGUgdG8ganVtcCB0by4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4+IGxpbmtSZWNvcmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKworI2VuZGlmIC8vIERGQUJ5dGVjb2RlQ29tcGlsZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorc3RhdGljIGlubGluZSBJbnRU
eXBlIGdldEJpdHMoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnRUeXBlKj4o
JmJ5dGVjb2RlW2luZGV4XSk7Cit9CisgICAgCitWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJiB1cmwpCit7
CisgICAgdW5zaWduZWQgcHJvZ3JhbUNvdW50ZXIgPSAwOworICAgIHVuc2lnbmVkIHVybEluZGV4
ID0gMDsKKyAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+IGFjdGlvbnM7CisgICAgCisg
ICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHRlcm1pbmF0ZSBpZiBpbnRlcnByZXRpbmcgY29ycmVj
dGx5IGNvbXBpbGVkIGJ5dGVjb2RlLgorICAgIGZvciAoOzspIHsKKyAgICAgICAgc3dpdGNoIChz
dGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihieXRlY29kZVtwcm9ncmFtQ291bnRl
cl0pKSB7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6
CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWU6CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZhbHVlIHN0b3JlZCB3aXRoIHRo
ZSBieXRlY29kZS4KKyAgICAgICAgICAgIEFTU0VSVCh1cmwuZGF0YSgpKTsKKyAgICAgICAgICAg
IGlmICh1cmwuZGF0YSgpW3VybEluZGV4XSA9PSBnZXRCaXRzPHVpbnQ4X3Q+KGJ5dGVjb2RlLCBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSB7CisgICAgICAgICAgICAgICAg
cHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNvdW50
ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgICAg
ICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgor
ICAgICAgICAgICAgICAgIGlmICghdXJsLmRhdGEoKVt1cmxJbmRleF0pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhY3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hhcmFjdGVyIGF0IGVuZC4K
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGlu
c3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tW
YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246Okp1bXA6CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5z
aWduZWQ+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpOwor
ICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhl
IERGQS4KKyAgICAgICAgICAgIGlmICghdXJsLmRhdGEoKVt1cmxJbmRleF0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFjdGlvbnM7IC8vIFJlYWNoZWQgbnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb246CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChnZXRCaXRzPEV4dGVu
c2lvbkFjdGlvbkluZGV4PihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0
ZWNvZGUpKSk7CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSW52YWxpZCBieXRlY29kZS4KKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQodXJsSW5kZXggPCB1cmwubGVuZ3RoKCkpOyAvLyBXZSBzaG91bGQgYWx3YXlz
IHRlcm1pbmF0ZSBhdCBhIG51bGwgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgYSBTdHJpbmcuCisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZUludGVycHJldGVyX2gKKyNkZWZpbmUgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcl9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisj
aW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZS5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cyB7CisKK2NsYXNzIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgeworcHVibGljOgorICAgIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUpCisg
ICAgICAgIDogYnl0ZWNvZGUoYnl0ZWNvZGUpCisgICAgeyB9OworICAgIAorICAgIFZlY3RvcjxF
eHRlbnNpb25BY3Rpb25JbmRleD4gaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKworcHJpdmF0
ZToKKyAgICBjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBTm9kZS5oCShyZXZpc2lvbiAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0
ZW5zaW9uUnVsZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCShyZXZpc2lv
biAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgogI2luY2x1
ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAjaW5jbHVkZSAiREZBTm9kZS5oIgog
I2luY2x1ZGUgIk5GQS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247455</attachid>
            <date>2015-02-26 15:46:39 -0800</date>
            <delta_ts>2015-02-26 16:15:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226154625.patch</filename>
            <type>text/plain</type>
            <size>35698</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpFeHRlbnNpb25zTWFuYWdlcjo6bG9hZEFjdGlvbik6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkE6Om5leHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9k
ZUF0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6
OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6REZBQnl0ZWNvZGVD
b21waWxlcik6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omdl
dEJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpERkFCeXRlY29kZUludGVycHJldGVy
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmg6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwOgorCiAyMDE1LTAyLTI2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5nIG91dCByMTgwNjAyLCByMTgwNjA4
LCByMTgwNjEzLCByMTgwNjE3LCByMTgwNjcxLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwNjg2KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTQwLDYgKzIxNDAsMTEgQEAKIAkJNUM0MzA0QjExOTFBQzkwODAwMEUyQkMw
IC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmggKi87IH07CiAJCTVDNDMwNEI1MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5j
cHAgKi87IH07CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
NDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsK
KwkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBQjFBOUVCNkFDMDAyNDNC
NTYgLyogREZBQnl0ZWNvZGUuaCAqLzsgfTsKKwkJNUM1NzI1QzIxQTlFQjZBQzAwMjQzQjU2IC8q
IERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29t
cGlsZXIuY3BwICovOyB9OworCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM1NzI1QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLzsg
fTsKKwkJNUM1NzI1QzQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1
QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovOyB9Owor
CQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1QUYxQTlF
QjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgfTsKIAkJNUNGQzQz
NTAxOTI0MDlFMzAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RTE5MjQwNkE5MDBB
MEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDIxM0VD
RTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMDEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQy
MUE4MDExM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OwpAQCAtOTI4NSw2
ICs5MjkwLDExIEBACiAJCTVDNDMwNEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlk
bDsgcGF0aCA9IGNhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNo
YWRlclRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRC
NDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlQ29tcGlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGQzQzNEUxOTI0MDZBOTAwQTBEM0I1
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJMb2NrQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDIxQTgwMDEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlZUVFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTM4Nyw2ICsxNTM5NywxMSBAQAogCQkJCTI2RjBDODk2MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc01hbmFnZXIuaCAqLywKIAkJCQkyNjc3MjVGNjFBNUIzQUQ5MDAzQzI0REQg
LyogREZBLmNwcCAqLywKIAkJCQkyNjc3MjVGNzFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmggKi8s
CisJCQkJNUM1NzI1QUIxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggKi8sCisJCQkJ
NUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovLAor
CQkJCTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8s
CisJCQkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwICovLAorCQkJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVy
cHJldGVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCAq
LywKIAkJCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLywKIAkJCQkyNjkz
OTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8sCkBAIC0yNDA2MSw2ICsyNDA3Niw3IEBA
CiAJCQkJODVFNzExOUUwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxCYXNlRm9udEVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5QTlDNDkwQUE1RTNCRDAwQjY5NEIyIC8q
IERPTUhUTUxCb2R5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOUYwQUM1RDUz
NTAwNTMyNzBGIC8qIERPTUhUTUxCb2R5RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUxODNCNDIwQUE2OTI2MTAwRjE5RkEzIC8qIERPTUhUTUxCUkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUEwMEFDNUQ1MzUwMDUzMjcwRiAvKiBE
T01IVE1MQlJFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0Q0REMEFB
Njg2MUIwMDg4MDUyRCAvKiBET01IVE1MQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTcwMSw2ICsyNTcxNyw3IEBACiAJCQkJODY1MTJFREYxNTRBMkFFRjAwQTkwNDI2IC8qIFBl
cmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCThBRjRFNTVDMTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRF
MCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VERDEyOERCNTAyMDBF
NzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjQ0MCw2
ICsyNjQ1Nyw3IEBACiAJCQkJQjIyMjdBN0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMUQ0MzMxNzhENUFCNTAwMTQx
RTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODNDMUQ0MzQxNzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUM1NzI1QzUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURG
NkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg0QTA4MjkxMjhENzg2NzAwMkRCMUYxIC8qIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NjU2LDYgKzI3Njc0LDcgQEAKIAkJCQk4NUFGQTgy
MzBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzFB
MzdCMzA5N0M3MTVGMDAxOUYzRDggLyogRE9NRXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRTNCQzEwOTExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMEYwMDgwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVENjA5QkMxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk5OTQsNiArMzAwMTMsNyBAQAog
CQkJCUNEN0UwNTIyMTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDNFRjQ0QjE5MTc5MTVDMDAwMzQxODQgLyogV2ViQ29y
ZUNBTGF5ZXJFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM2OUREQjE2MzcxRkQ0MDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAq
LywKKwkJCQk1QzU3MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZDMDA3QzM4REYgLyogV2Vi
Q29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMTI3REVE
MTRGMzA5N0QwMEU4NDc3OSAvKiBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNDAzNzlDMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODA2ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotZW51bSBjbGFzcyBFeHRlbnNpb25B
Y3Rpb25UeXBlIHsKK2VudW0gY2xhc3MgRXh0ZW5zaW9uQWN0aW9uSW5kZXggOiB1aW50MzJfdCB7
CiAgICAgQmxvY2tMb2FkLAogICAgIElnbm9yZVByZXZpb3VzUnVsZXMKIH07CkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RydWN0IEFjdGlvbiB7Ci0gICAgICAgIEV4
dGVuc2lvbkFjdGlvblR5cGUgdHlwZTsKKyAgICAgICAgRXh0ZW5zaW9uQWN0aW9uSW5kZXggdHlw
ZTsKICAgICB9OwogCiAgICAgQ29udGVudEV4dGVuc2lvblJ1bGUoY29uc3QgVHJpZ2dlciYsIGNv
bnN0IEFjdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAx
ODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVi
dWdnaW5nLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVDb21waWxlci5oIgorI2luY2x1ZGUgIkRG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJORkEuaCIKICNpbmNsdWRlICJORkFU
b0RGQS5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIENvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JU
SU5HCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwpAQCAtOTUsOSArOTcsMTMgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OnNldFJ1bGVMaQogICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNo
ZXMgdGhlIGVtcHR5IHNldC4KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwotICAgIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEuZGVidWdQcmludERv
dCgpOworICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKIAorICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CisgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEs
IGJ5dGVjb2RlKTsKKyAgICBjb21waWxlci5jb21waWxlKCk7CisgICAgQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgYnl0ZWNvZGUsIHJ1bGVMaXN0
IH07CiAgICAgbV9ydWxlTGlzdHMuc2V0KGlkZW50aWZpZXIsIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbik7CiB9CiAKQEAgLTExNSwzMCArMTIxLDE3IEBAIGJvb2wgQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpzaG91bGRCbG8KIHsKICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5z
dHJpbmcoKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHVybFN0cmluZy5jb250YWluc09ubHlB
U0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3Rl
cnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1lcyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7
CisgICAgY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKICAg
ICBmb3IgKGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVsZUxpc3RzKSB7Ci0gICAgICAgIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RT
bG90LnZhbHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5kZmEucm9vdCgpOwotCi0gICAgICAgIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNo
PHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4+IHRyaWdnZXJlZEFjdGlvbnM7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVybFN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoYXJhY3Rl
ciA9IHN0YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tpXSk7Ci0gICAgICAgICAgICBib29sIG9r
OwotICAgICAgICAgICAgc3RhdGUgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLm5leHRT
dGF0ZShzdGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBh
Y3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5hY3Rpb25zKHN0YXRlKTsKLSAg
ICAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dl
cmVkQWN0aW9ucy5hZGQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dWludDY0X3Q+IHNvcnRlZEFjdGlvbnM7Ci0gICAgICAgICAgICBjb3B5VG9WZWN0
b3IodHJpZ2dlcmVkQWN0aW9ucywgc29ydGVkQWN0aW9ucyk7Ci0gICAgICAgICAgICBzdGQ6OnNv
cnQoc29ydGVkQWN0aW9ucy5iZWdpbigpLCBzb3J0ZWRBY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
ICAgIHNpemVfdCBsYXN0QWN0aW9uID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3J0ZWRBY3Rpb25z
Lmxhc3QoKSk7Ci0gICAgICAgICAgICBpZiAoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLnJ1bGVM
aXN0W2xhc3RBY3Rpb25dLmFjdGlvbigpLnR5cGUgPT0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkKQorICAgICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiA9IHJ1bGVMaXN0U2xvdC52YWx1ZTsKKyAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRlbnRFeHRlbnNpb24uYnl0ZWNv
ZGUpOworICAgICAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+IGFjdGlvbnMgPSBpbnRl
cnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZXZlbnR1YWxseSBkbyBzb21ldGhpbmcgd2l0aCBlYWNoIGFjdGlvbiByYXRoZXIgdGhhbiBq
dXN0IHJldHVybmluZyBhIGJvb2wuCisgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwor
ICAgICAgICAgICAgc2l6ZV90IGxhc3RBY3Rpb24gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFjdGlv
bnMubGFzdCgpKTsKKyAgICAgICAgICAgIGlmIChjb21waWxlZENvbnRlbnRFeHRlbnNpb24ucnVs
ZUxpc3RbbGFzdEFjdGlvbl0uYWN0aW9uKCkudHlwZSA9PSBFeHRlbnNpb25BY3Rpb25JbmRleDo6
QmxvY2tMb2FkKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uUnVsZS5oIgogI2luY2x1ZGUgIkRGQS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw3ICs2MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKLSAg
ICAgICAgREZBIGRmYTsKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAg
ICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc01h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAgc3RhdGljIGJvb2wgbG9hZEFjdGlvbihF
eGVjU3RhdGUmIGV4ZWMsIAogICAgIFN0cmluZyBhY3Rpb25UeXBlID0gdHlwZU9iamVjdC50b1dU
RlN0cmluZygmZXhlYyk7CiAKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2siKQotICAgICAg
ICBhY3Rpb24udHlwZSA9IEV4dGVuc2lvbkFjdGlvblR5cGU6OkJsb2NrTG9hZDsKKyAgICAgICAg
YWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6QmxvY2tMb2FkOwogICAgIGVsc2Ug
aWYgKGFjdGlvblR5cGUgPT0gImlnbm9yZS1wcmV2aW91cy1ydWxlcyIpCi0gICAgICAgIGFjdGlv
bi50eXBlID0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczsKKyAgICAg
ICAgYWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6SWdub3JlUHJldmlvdXNSdWxl
czsKICAgICBlbHNlIGlmIChhY3Rpb25UeXBlICE9ICJibG9jayIgJiYgYWN0aW9uVHlwZSAhPSAi
IikgewogICAgICAgICBXVEZMb2dBbHdheXMoIlVucmVjb2duaXplZCBhY3Rpb246IFwiJXNcIiIs
IGFjdGlvblR5cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkocmV2aXNpb24gMTgwNjg2
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMzEgKzU5LDYgQEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRm
YSkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0YXRlKHVuc2ln
bmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdAotewotICAg
IEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBERkFO
b2RlJiBub2RlID0gbV9ub2Rlc1tjdXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4dE5vZGUgPSBu
b2RlLnRyYW5zaXRpb25zLmZpbmQoY2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5vZGUgIT0gbm9k
ZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBuZXh0Tm9kZS0+dmFsdWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNp
dGlvbikgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBub2RlLmZhbGxiYWNr
VHJhbnNpdGlvbjsKLSAgICB9Ci0gICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLQotfQot
Ci1jb25zdCBWZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0
YXRlKSBjb25zdAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG1fbm9kZXNbY3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQotCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmlu
dFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJKHJldmlzaW9uIDE4
MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxMCArNDYsOCBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29u
c3QgREZBJik7CiAKICAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9
Ci0gICAgLy8gSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNo
YXJhY3RlciIsIHJldHVybiB0aGF0IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBP
dGhlcndpc2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4K
LSAgICB1bnNpZ25lZCBuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJh
Y3RlciwgYm9vbCYgb2spIGNvbnN0OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlv
bnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogCiAjaWYgQ09OVEVOVF9F
WFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERGQUJ5dGVjb2RlX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVfaAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKwordHlwZWRlZiB1aW50OF90IERGQUJ5
dGVjb2RlOworCitlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsK
KworICAgIC8vIENoZWNrVmFsdWUgaGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIHZhbHVl
IHRvIGNoZWNrICgxIGJ5dGUpLAorICAgIC8vIFRoZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSB2
YWx1ZXMgYXJlIGVxdWFsICg0IGJ5dGVzKS4KKyAgICBDaGVja1ZhbHVlLAorCisgICAgLy8gQXBw
ZW5kQWN0aW9uIGhhcyBvbmUgYXJndW1lbnQ6CisgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQg
KDQgYnl0ZXMpLgorICAgIEFwcGVuZEFjdGlvbiwKKworICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8g
YXJndW1lbnRzLgorICAgIFRlcm1pbmF0ZSwKKworICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVu
dDoKKyAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byB1bmNvbmRpdGlvbmFsbHkgKDQgYnl0ZXMp
LgorICAgIEp1bXAsCit9OworCitzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCit7CisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbikgeworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
Q2hlY2tWYWx1ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246CisgICAgICAgIHJldHVybiBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pOworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVt
cDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVv
Zih1bnNpZ25lZCk7CisgICAgfQorfQorICAgIAorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVu
c2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFCeXRlY29kZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVj
b2RlQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiREZBLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxERkFC
eXRlY29kZT4mIGJ5dGVjb2RlLCBJbnRUeXBlIHZhbHVlKQoreworICAgIGJ5dGVjb2RlLnJlc2l6
ZShieXRlY29kZS5zaXplKCkgKyBzaXplb2YoSW50VHlwZSkpOworICAgICpyZWludGVycHJldF9j
YXN0PEludFR5cGUqPigmYnl0ZWNvZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5cGUp
XSkgPSB2YWx1ZTsKK30KKworaW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29k
ZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVlOworfQor
Cit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9uQWN0
aW9uSW5kZXggYWN0aW9uKQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihi
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICBhcHBl
bmQ8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+KGJ5dGVjb2RlLCBhY3Rpb24pOworfQorCit2b2lkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4
KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihieXRlY29kZSwgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcCk7CisgICAgbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsKKyAgICBhcHBl
bmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVu
IGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUo
dWludDhfdCB2YWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpCit7CisgICAgYXBw
ZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpDaGVja1ZhbHVlKTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnl0ZWNvZGUsIHZhbHVlKTsK
KyAgICBsaW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYnl0ZWNvZGUuc2l6ZSgpLCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCkpOworICAgIGFwcGVuZDx1bnNpZ25lZD4oYnl0ZWNvZGUsIDAp
OyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KK30KKwordm9pZCBERkFC
eXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKCkKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0
ZSk7Cit9CisgICAgCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKFZlY3Rv
cjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBSZWNv
cmQgc3RhcnRpbmcgaW5kZXggZm9yIGxpbmtpbmcuCisgICAgbm9kZVN0YXJ0c1tpbmRleF0gPSBi
eXRlY29kZS5zaXplKCk7CisgICAgCisgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IGRmYS5ub2Rl
QXQoaW5kZXgpOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKQorICAg
ICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PEV4dGVuc2lvbkFjdGlvbkluZGV4Pihh
Y3Rpb24pKTsKKyAgICAKKyAgICBsaW5rUmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobGlua1JlY29y
ZHMuc2l6ZSgpICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgdHJhbnNpdGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCisgICAgICAgIGVtaXRDaGVja1ZhbHVl
KHRyYW5zaXRpb24ua2V5LCB0cmFuc2l0aW9uLnZhbHVlKTsKKyAgICAKKyAgICBpZiAobm9kZS5o
YXNGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgIGVtaXRKdW1wKG5vZGUuZmFsbGJhY2tUcmFu
c2l0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKK30KKyAgICAKK3Zv
aWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCit7CisgICAgQVNTRVJUKCFieXRlY29k
ZS5zaXplKCkpOworICAgIG5vZGVTdGFydHMucmVzaXplKGRmYS5zaXplKCkpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg
Ynl0ZWNvZGUuCisgICAgY29tcGlsZU5vZGUoYnl0ZWNvZGUsIGRmYS5yb290KCkpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
aWYgKGkgIT0gZGZhLnJvb3QoKSkKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBp
KTsKKyAgICB9CisKKyAgICAvLyBMaW5rLgorICAgIGZvciAoY29uc3QgYXV0byYgbGlua1JlY29y
ZCA6IGxpbmtSZWNvcmRzKQorICAgICAgICBzZXQzMkJpdHMoYnl0ZWNvZGUsIGxpbmtSZWNvcmQu
Zmlyc3QsIG5vZGVTdGFydHNbbGlua1JlY29yZC5zZWNvbmRdKTsKK30KKyAgICAKK30gLy8gbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERGQUJ5dGVjb2RlQ29tcGlsZXJfaAorI2RlZmluZSBERkFCeXRlY29kZUNvbXBpbGVy
X2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJDb250ZW50
RXh0ZW5zaW9uUnVsZS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucyB7CisKK2NsYXNzIERGQTsKKworY2xhc3MgREZBQnl0ZWNvZGVDb21waWxlciB7Citw
dWJsaWM6CisgICAgREZBQnl0ZWNvZGVDb21waWxlcihjb25zdCBERkEmIGRmYSwgVmVjdG9yPERG
QUJ5dGVjb2RlPiYgYnl0ZWNvZGUpCisgICAgICAgIDogYnl0ZWNvZGUoYnl0ZWNvZGUpCisgICAg
ICAgICwgZGZhKGRmYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZSgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgY29tcGlsZU5vZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYsIHVu
c2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgZW1pdEFwcGVuZEFjdGlvbihFeHRlbnNpb25BY3Rp
b25JbmRleCk7CisgICAgdm9pZCBlbWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCk7CisgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZSh1aW50OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0
aW5hdGlvbk5vZGVJbmRleCk7CisgICAgdm9pZCBlbWl0VGVybWluYXRlKCk7CisKKyAgICBWZWN0
b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKKyAgICBjb25zdCBERkEmIGRmYTsKKyAgICAKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IG5vZGVTdGFydHM7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHZh
bHVlIGlzIHRoZSBpbmRleCBpbiB0aGUgYnl0ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1wIGlz
IHRvIGJlIHdyaXR0ZW4uCisgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXggb2Yg
dGhlIG5vZGUgdG8ganVtcCB0by4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4+IGxpbmtSZWNvcmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKworI2VuZGlmIC8vIERGQUJ5dGVjb2RlQ29tcGlsZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorc3RhdGljIGlubGluZSBJbnRU
eXBlIGdldEJpdHMoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnRUeXBlKj4o
JmJ5dGVjb2RlW2luZGV4XSk7Cit9CisgICAgCitWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJiB1cmwpCit7
CisgICAgdW5zaWduZWQgcHJvZ3JhbUNvdW50ZXIgPSAwOworICAgIHVuc2lnbmVkIHVybEluZGV4
ID0gMDsKKyAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+IGFjdGlvbnM7CisgICAgCisg
ICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHRlcm1pbmF0ZSBpZiBpbnRlcnByZXRpbmcgY29ycmVj
dGx5IGNvbXBpbGVkIGJ5dGVjb2RlLgorICAgIGZvciAoOzspIHsKKyAgICAgICAgc3dpdGNoIChz
dGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihieXRlY29kZVtwcm9ncmFtQ291bnRl
cl0pKSB7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6
CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWU6CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZhbHVlIHN0b3JlZCB3aXRoIHRo
ZSBieXRlY29kZS4KKyAgICAgICAgICAgIEFTU0VSVCh1cmwuZGF0YSgpKTsKKyAgICAgICAgICAg
IGlmICghdXJsLmRhdGEoKVt1cmxJbmRleF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlv
bnM7IC8vIFJlYWNoZWQgbnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgorICAgICAgICAgICAgaWYgKHVy
bC5kYXRhKClbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhfdD4oYnl0ZWNvZGUsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFt
Q291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNp
emVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgICAgIHVy
bEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlv
blNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpKdW1wOgorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihi
eXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKTsKKyAgICAgICAg
ICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbjoKKyAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGdldEJpdHM8RXh0ZW5z
aW9uQWN0aW9uSW5kZXg+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRl
Y29kZSkpKTsKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdp
dGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBJbnZhbGlkIGJ5dGVjb2RlLgorICAgICAgICB9CisgICAg
ICAgIEFTU0VSVCh1cmxJbmRleCA8IHVybC5sZW5ndGgoKSk7IC8vIFdlIHNob3VsZCBhbHdheXMg
dGVybWluYXRlIGF0IGEgbnVsbCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBhIFN0cmluZy4KKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXJfaAorI2RlZmluZSBERkFCeXRl
Y29kZUludGVycHJldGVyX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNp
bmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25z
IHsKKworY2xhc3MgREZBQnl0ZWNvZGVJbnRlcnByZXRlciB7CitwdWJsaWM6CisgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcihjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSkKKyAg
ICAgICAgOiBieXRlY29kZShieXRlY29kZSkKKyAgICB7IH07CisgICAgCisgICAgVmVjdG9yPEV4
dGVuc2lvbkFjdGlvbkluZGV4PiBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYpOworCitwcml2YXRl
OgorICAgIGNvbnN0IFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFC
eXRlY29kZUludGVycHJldGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFOb2RlLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbnRlbnRFeHRl
bnNpb25SdWxlLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAJKHJldmlzaW9u
IDE4MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKICNpbmNsdWRlICJERkFOb2RlLmgiCiAj
aW5jbHVkZSAiTkZBLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247465</attachid>
            <date>2015-02-26 16:15:56 -0800</date>
            <delta_ts>2015-02-26 17:08:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226161542.patch</filename>
            <type>text/plain</type>
            <size>35759</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpFeHRlbnNpb25zTWFuYWdlcjo6bG9hZEFjdGlvbik6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkE6Om5leHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9k
ZUF0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6
OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6REZBQnl0ZWNvZGVD
b21waWxlcik6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omdl
dEJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpERkFCeXRlY29kZUludGVycHJldGVy
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmg6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwOgorCiAyMDE1LTAyLTI2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5nIG91dCByMTgwNjAyLCByMTgwNjA4
LCByMTgwNjEzLCByMTgwNjE3LCByMTgwNjcxLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwNjg2KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTQwLDYgKzIxNDAsMTEgQEAKIAkJNUM0MzA0QjExOTFBQzkwODAwMEUyQkMw
IC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmggKi87IH07CiAJCTVDNDMwNEI1MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5j
cHAgKi87IH07CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
NDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsK
KwkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBQjFBOUVCNkFDMDAyNDNC
NTYgLyogREZBQnl0ZWNvZGUuaCAqLzsgfTsKKwkJNUM1NzI1QzIxQTlFQjZBQzAwMjQzQjU2IC8q
IERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29t
cGlsZXIuY3BwICovOyB9OworCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM1NzI1QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLzsg
fTsKKwkJNUM1NzI1QzQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1
QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovOyB9Owor
CQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1NzI1QUYxQTlF
QjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgfTsKIAkJNUNGQzQz
NTAxOTI0MDlFMzAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RTE5MjQwNkE5MDBB
MEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDIxM0VD
RTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMDEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQy
MUE4MDExM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OwpAQCAtOTI4NSw2
ICs5MjkwLDExIEBACiAJCTVDNDMwNEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlk
bDsgcGF0aCA9IGNhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNo
YWRlclRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRC
NDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlQ29tcGlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGQzQzNEUxOTI0MDZBOTAwQTBEM0I1
IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJMb2NrQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDIxQTgwMDEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlZUVFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTM4Nyw2ICsxNTM5NywxMSBAQAogCQkJCTI2RjBDODk2MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc01hbmFnZXIuaCAqLywKIAkJCQkyNjc3MjVGNjFBNUIzQUQ5MDAzQzI0REQg
LyogREZBLmNwcCAqLywKIAkJCQkyNjc3MjVGNzFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmggKi8s
CisJCQkJNUM1NzI1QUIxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggKi8sCisJCQkJ
NUM1NzI1QUMxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwICovLAor
CQkJCTVDNTcyNUFEMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8s
CisJCQkJNUM1NzI1QUUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwICovLAorCQkJCTVDNTcyNUFGMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVy
cHJldGVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCAq
LywKIAkJCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLywKIAkJCQkyNjkz
OTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8sCkBAIC0yNDA2MSw2ICsyNDA3Niw3IEBA
CiAJCQkJODVFNzExOUUwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxCYXNlRm9udEVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5QTlDNDkwQUE1RTNCRDAwQjY5NEIyIC8q
IERPTUhUTUxCb2R5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOUYwQUM1RDUz
NTAwNTMyNzBGIC8qIERPTUhUTUxCb2R5RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1QzU3MjVDMzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUxODNCNDIwQUE2OTI2MTAwRjE5RkEzIC8qIERPTUhUTUxCUkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUEwMEFDNUQ1MzUwMDUzMjcwRiAvKiBE
T01IVE1MQlJFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0Q0REMEFB
Njg2MUIwMDg4MDUyRCAvKiBET01IVE1MQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTcwMSw2ICsyNTcxNyw3IEBACiAJCQkJODY1MTJFREYxNTRBMkFFRjAwQTkwNDI2IC8qIFBl
cmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCThBRjRFNTVDMTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUM1NzI1QzExQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRF
MCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VERDEyOERCNTAyMDBF
NzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjQ0MCw2
ICsyNjQ1Nyw3IEBACiAJCQkJQjIyMjdBN0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMUQ0MzMxNzhENUFCNTAwMTQx
RTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODNDMUQ0MzQxNzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUM1NzI1QzUxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURG
NkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg0QTA4MjkxMjhENzg2NzAwMkRCMUYxIC8qIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NjU2LDYgKzI3Njc0LDcgQEAKIAkJCQk4NUFGQTgy
MzBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzFB
MzdCMzA5N0M3MTVGMDAxOUYzRDggLyogRE9NRXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRTNCQzEwOTExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMEYwMDgwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVENjA5QkMxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk5OTQsNiArMzAwMTMsNyBAQAog
CQkJCUNEN0UwNTIyMTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDNFRjQ0QjE5MTc5MTVDMDAwMzQxODQgLyogV2ViQ29y
ZUNBTGF5ZXJFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM2OUREQjE2MzcxRkQ0MDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAq
LywKKwkJCQk1QzU3MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZDMDA3QzM4REYgLyogV2Vi
Q29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMTI3REVE
MTRGMzA5N0QwMEU4NDc3OSAvKiBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNDAzNzlDMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODA2ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotZW51bSBjbGFzcyBFeHRlbnNpb25B
Y3Rpb25UeXBlIHsKK2VudW0gY2xhc3MgRXh0ZW5zaW9uQWN0aW9uSW5kZXggOiB1aW50MzJfdCB7
CiAgICAgQmxvY2tMb2FkLAogICAgIElnbm9yZVByZXZpb3VzUnVsZXMKIH07CkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RydWN0IEFjdGlvbiB7Ci0gICAgICAgIEV4
dGVuc2lvbkFjdGlvblR5cGUgdHlwZTsKKyAgICAgICAgRXh0ZW5zaW9uQWN0aW9uSW5kZXggdHlw
ZTsKICAgICB9OwogCiAgICAgQ29udGVudEV4dGVuc2lvblJ1bGUoY29uc3QgVHJpZ2dlciYsIGNv
bnN0IEFjdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAx
ODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVi
dWdnaW5nLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVDb21waWxlci5oIgorI2luY2x1ZGUgIkRG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJORkEuaCIKICNpbmNsdWRlICJORkFU
b0RGQS5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIENvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JU
SU5HCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwpAQCAtOTUsOSArOTcsMTMgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OnNldFJ1bGVMaQogICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNo
ZXMgdGhlIGVtcHR5IHNldC4KIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwotICAgIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEuZGVidWdQcmludERv
dCgpOworICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKIAorICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CisgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEs
IGJ5dGVjb2RlKTsKKyAgICBjb21waWxlci5jb21waWxlKCk7CisgICAgQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgYnl0ZWNvZGUsIHJ1bGVMaXN0
IH07CiAgICAgbV9ydWxlTGlzdHMuc2V0KGlkZW50aWZpZXIsIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbik7CiB9CiAKQEAgLTExNSwzMCArMTIxLDE3IEBAIGJvb2wgQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpzaG91bGRCbG8KIHsKICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5z
dHJpbmcoKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHVybFN0cmluZy5jb250YWluc09ubHlB
U0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3Rl
cnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1lcyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7
CisgICAgY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKICAg
ICBmb3IgKGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVsZUxpc3RzKSB7Ci0gICAgICAgIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RT
bG90LnZhbHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5kZmEucm9vdCgpOwotCi0gICAgICAgIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNo
PHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4+IHRyaWdnZXJlZEFjdGlvbnM7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVybFN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoYXJhY3Rl
ciA9IHN0YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tpXSk7Ci0gICAgICAgICAgICBib29sIG9r
OwotICAgICAgICAgICAgc3RhdGUgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLm5leHRT
dGF0ZShzdGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBh
Y3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5hY3Rpb25zKHN0YXRlKTsKLSAg
ICAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dl
cmVkQWN0aW9ucy5hZGQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dWludDY0X3Q+IHNvcnRlZEFjdGlvbnM7Ci0gICAgICAgICAgICBjb3B5VG9WZWN0
b3IodHJpZ2dlcmVkQWN0aW9ucywgc29ydGVkQWN0aW9ucyk7Ci0gICAgICAgICAgICBzdGQ6OnNv
cnQoc29ydGVkQWN0aW9ucy5iZWdpbigpLCBzb3J0ZWRBY3Rpb25zLmVuZCgpKTsKLSAgICAgICAg
ICAgIHNpemVfdCBsYXN0QWN0aW9uID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3J0ZWRBY3Rpb25z
Lmxhc3QoKSk7Ci0gICAgICAgICAgICBpZiAoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLnJ1bGVM
aXN0W2xhc3RBY3Rpb25dLmFjdGlvbigpLnR5cGUgPT0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkKQorICAgICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbiA9IHJ1bGVMaXN0U2xvdC52YWx1ZTsKKyAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRlbnRFeHRlbnNpb24uYnl0ZWNv
ZGUpOworICAgICAgICBWZWN0b3I8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+IGFjdGlvbnMgPSBpbnRl
cnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZXZlbnR1YWxseSBkbyBzb21ldGhpbmcgd2l0aCBlYWNoIGFjdGlvbiByYXRoZXIgdGhhbiBq
dXN0IHJldHVybmluZyBhIGJvb2wuCisgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwor
ICAgICAgICAgICAgc2l6ZV90IGxhc3RBY3Rpb24gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFjdGlv
bnMubGFzdCgpKTsKKyAgICAgICAgICAgIGlmIChjb21waWxlZENvbnRlbnRFeHRlbnNpb24ucnVs
ZUxpc3RbbGFzdEFjdGlvbl0uYWN0aW9uKCkudHlwZSA9PSBFeHRlbnNpb25BY3Rpb25JbmRleDo6
QmxvY2tMb2FkKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uUnVsZS5oIgogI2luY2x1ZGUgIkRGQS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw3ICs2MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKLSAg
ICAgICAgREZBIGRmYTsKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAg
ICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc01h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAgc3RhdGljIGJvb2wgbG9hZEFjdGlvbihF
eGVjU3RhdGUmIGV4ZWMsIAogICAgIFN0cmluZyBhY3Rpb25UeXBlID0gdHlwZU9iamVjdC50b1dU
RlN0cmluZygmZXhlYyk7CiAKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2siKQotICAgICAg
ICBhY3Rpb24udHlwZSA9IEV4dGVuc2lvbkFjdGlvblR5cGU6OkJsb2NrTG9hZDsKKyAgICAgICAg
YWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6QmxvY2tMb2FkOwogICAgIGVsc2Ug
aWYgKGFjdGlvblR5cGUgPT0gImlnbm9yZS1wcmV2aW91cy1ydWxlcyIpCi0gICAgICAgIGFjdGlv
bi50eXBlID0gRXh0ZW5zaW9uQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczsKKyAgICAg
ICAgYWN0aW9uLnR5cGUgPSBFeHRlbnNpb25BY3Rpb25JbmRleDo6SWdub3JlUHJldmlvdXNSdWxl
czsKICAgICBlbHNlIGlmIChhY3Rpb25UeXBlICE9ICJibG9jayIgJiYgYWN0aW9uVHlwZSAhPSAi
IikgewogICAgICAgICBXVEZMb2dBbHdheXMoIlVucmVjb2duaXplZCBhY3Rpb246IFwiJXNcIiIs
IGFjdGlvblR5cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkocmV2aXNpb24gMTgwNjg2
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMzEgKzU5LDYgQEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRm
YSkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0YXRlKHVuc2ln
bmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdAotewotICAg
IEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBERkFO
b2RlJiBub2RlID0gbV9ub2Rlc1tjdXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4dE5vZGUgPSBu
b2RlLnRyYW5zaXRpb25zLmZpbmQoY2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5vZGUgIT0gbm9k
ZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBuZXh0Tm9kZS0+dmFsdWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNp
dGlvbikgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBub2RlLmZhbGxiYWNr
VHJhbnNpdGlvbjsKLSAgICB9Ci0gICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLQotfQot
Ci1jb25zdCBWZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0
YXRlKSBjb25zdAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG1fbm9kZXNbY3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQotCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmlu
dFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJKHJldmlzaW9uIDE4
MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxMCArNDYsOCBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29u
c3QgREZBJik7CiAKICAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9
Ci0gICAgLy8gSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNo
YXJhY3RlciIsIHJldHVybiB0aGF0IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBP
dGhlcndpc2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4K
LSAgICB1bnNpZ25lZCBuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJh
Y3RlciwgYm9vbCYgb2spIGNvbnN0OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlv
bnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogCiAjaWYgQ09OVEVOVF9F
WFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERGQUJ5dGVjb2RlX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVfaAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKwordHlwZWRlZiB1aW50OF90IERGQUJ5
dGVjb2RlOworCitlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsK
KworICAgIC8vIENoZWNrVmFsdWUgaGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIHZhbHVl
IHRvIGNoZWNrICgxIGJ5dGUpLAorICAgIC8vIFRoZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSB2
YWx1ZXMgYXJlIGVxdWFsICg0IGJ5dGVzKS4KKyAgICBDaGVja1ZhbHVlLAorCisgICAgLy8gQXBw
ZW5kQWN0aW9uIGhhcyBvbmUgYXJndW1lbnQ6CisgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQg
KDQgYnl0ZXMpLgorICAgIEFwcGVuZEFjdGlvbiwKKworICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8g
YXJndW1lbnRzLgorICAgIFRlcm1pbmF0ZSwKKworICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVu
dDoKKyAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byB1bmNvbmRpdGlvbmFsbHkgKDQgYnl0ZXMp
LgorICAgIEp1bXAsCit9OworCitzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCit7CisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbikgeworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
Q2hlY2tWYWx1ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246CisgICAgICAgIHJldHVybiBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pOworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVt
cDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVv
Zih1bnNpZ25lZCk7CisgICAgfQorfQorICAgIAorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVu
c2lvbnMKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFCeXRlY29kZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVj
b2RlQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiREZBLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxERkFC
eXRlY29kZT4mIGJ5dGVjb2RlLCBJbnRUeXBlIHZhbHVlKQoreworICAgIGJ5dGVjb2RlLnJlc2l6
ZShieXRlY29kZS5zaXplKCkgKyBzaXplb2YoSW50VHlwZSkpOworICAgICpyZWludGVycHJldF9j
YXN0PEludFR5cGUqPigmYnl0ZWNvZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5cGUp
XSkgPSB2YWx1ZTsKK30KKworaW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29k
ZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVlOworfQor
Cit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9uQWN0
aW9uSW5kZXggYWN0aW9uKQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihi
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICBhcHBl
bmQ8RXh0ZW5zaW9uQWN0aW9uSW5kZXg+KGJ5dGVjb2RlLCBhY3Rpb24pOworfQorCit2b2lkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4
KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihieXRlY29kZSwgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcCk7CisgICAgbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsKKyAgICBhcHBl
bmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVu
IGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUo
dWludDhfdCB2YWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpCit7CisgICAgYXBw
ZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpDaGVja1ZhbHVlKTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnl0ZWNvZGUsIHZhbHVlKTsK
KyAgICBsaW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYnl0ZWNvZGUuc2l6ZSgpLCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCkpOworICAgIGFwcGVuZDx1bnNpZ25lZD4oYnl0ZWNvZGUsIDAp
OyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KK30KKwordm9pZCBERkFC
eXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKCkKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0
ZSk7Cit9CisgICAgCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKFZlY3Rv
cjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBSZWNv
cmQgc3RhcnRpbmcgaW5kZXggZm9yIGxpbmtpbmcuCisgICAgbm9kZVN0YXJ0c1tpbmRleF0gPSBi
eXRlY29kZS5zaXplKCk7CisgICAgCisgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IGRmYS5ub2Rl
QXQoaW5kZXgpOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKQorICAg
ICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PEV4dGVuc2lvbkFjdGlvbkluZGV4Pihh
Y3Rpb24pKTsKKyAgICAKKyAgICBsaW5rUmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobGlua1JlY29y
ZHMuc2l6ZSgpICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkgKiBpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWUpKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRpb25zKQorICAgICAgICBlbWl0
Q2hlY2tWYWx1ZSh0cmFuc2l0aW9uLmtleSwgdHJhbnNpdGlvbi52YWx1ZSk7CisgICAgCisgICAg
aWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKQorICAgICAgICBlbWl0SnVtcChub2RlLmZh
bGxiYWNrVHJhbnNpdGlvbik7CisgICAgZWxzZQorICAgICAgICBlbWl0VGVybWluYXRlKCk7Cit9
CisgICAgCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUoKQoreworICAgIEFTU0VS
VCghYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICBub2RlU3RhcnRzLnJlc2l6ZShkZmEuc2l6ZSgpKTsK
KyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJvb3QgaXMgYWx3YXlzIGF0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGJ5dGVjb2RlLgorICAgIGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBkZmEucm9vdCgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIGlmIChpICE9IGRmYS5yb290KCkpCisgICAgICAgICAgICBjb21waWxlTm9kZShieXRlY29k
ZSwgaSk7CisgICAgfQorCisgICAgLy8gTGluay4KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtS
ZWNvcmQgOiBsaW5rUmVjb3JkcykKKyAgICAgICAgc2V0MzJCaXRzKGJ5dGVjb2RlLCBsaW5rUmVj
b3JkLmZpcnN0LCBub2RlU3RhcnRzW2xpbmtSZWNvcmQuc2Vjb25kXSk7Cit9CisgICAgCit9IC8v
IG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBERkFCeXRlY29kZUNvbXBpbGVyX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVDb21w
aWxlcl9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgeworCitjbGFzcyBERkE7CisKK2NsYXNzIERGQUJ5dGVjb2RlQ29tcGlsZXIg
eworcHVibGljOgorICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIoY29uc3QgREZBJiBkZmEsIFZlY3Rv
cjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlKQorICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQor
ICAgICAgICAsIGRmYShkZmEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGUo
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXBpbGVOb2RlKFZlY3RvcjxERkFCeXRlY29kZT4m
LCB1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9u
QWN0aW9uSW5kZXgpOworICAgIHZvaWQgZW1pdEp1bXAodW5zaWduZWQgZGVzdGluYXRpb25Ob2Rl
SW5kZXgpOworICAgIHZvaWQgZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdW5zaWduZWQg
ZGVzdGluYXRpb25Ob2RlSW5kZXgpOworICAgIHZvaWQgZW1pdFRlcm1pbmF0ZSgpOworCisgICAg
VmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGU7CisgICAgY29uc3QgREZBJiBkZmE7CisgICAg
CisgICAgVmVjdG9yPHVuc2lnbmVkPiBub2RlU3RhcnRzOworICAgIAorICAgIC8vIFRoZSBmaXJz
dCB2YWx1ZSBpcyB0aGUgaW5kZXggaW4gdGhlIGJ5dGVjb2RlIGJ1ZmZlciB3aGVyZSB0aGUganVt
cCBpcyB0byBiZSB3cml0dGVuLgorICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIGluZGV4
IG9mIHRoZSBub2RlIHRvIGp1bXAgdG8uCisgICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+PiBsaW5rUmVjb3JkczsKK307CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBERkFCeXRlY29kZUNvbXBpbGVyX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkFCeXRlY29kZUludGVycHJldGVyLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29udGVudEV4
dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK3N0YXRpYyBpbmxpbmUg
SW50VHlwZSBnZXRCaXRzKGNvbnN0IFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNp
Z25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW50VHlw
ZSo+KCZieXRlY29kZVtpbmRleF0pOworfQorICAgIAorVmVjdG9yPEV4dGVuc2lvbkFjdGlvbklu
ZGV4PiBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJs
KQoreworICAgIHVuc2lnbmVkIHByb2dyYW1Db3VudGVyID0gMDsKKyAgICB1bnNpZ25lZCB1cmxJ
bmRleCA9IDA7CisgICAgVmVjdG9yPEV4dGVuc2lvbkFjdGlvbkluZGV4PiBhY3Rpb25zOworICAg
IAorICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgaWYgaW50ZXJwcmV0aW5nIGNv
cnJlY3RseSBjb21waWxlZCBieXRlY29kZS4KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN3aXRj
aCAoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGVbcHJvZ3JhbUNv
dW50ZXJdKSkgeworCisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWlu
YXRlOgorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7CisKKyAgICAgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlOgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0
aCB0aGUgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQodXJsLmRhdGEoKSk7CisgICAgICAg
ICAgICBpZiAoIXVybC5kYXRhKClbdXJsSW5kZXhdKQorICAgICAgICAgICAgICAgIHJldHVybiBh
Y3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hhcmFjdGVyIGF0IGVuZC4KKyAgICAgICAgICAgIGlm
ICh1cmwuZGF0YSgpW3VybEluZGV4XSA9PSBnZXRCaXRzPHVpbnQ4X3Q+KGJ5dGVjb2RlLCBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSB7CisgICAgICAgICAgICAgICAgcHJv
Z3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgICAgICAg
ICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgorICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6SnVtcDoKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25l
ZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSk7CisgICAg
ICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZB
LgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb246CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChnZXRCaXRzPEV4
dGVuc2lvbkFjdGlvbkluZGV4PihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGUpKSk7CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNp
emVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSW52YWxpZCBieXRlY29kZS4KKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlQodXJsSW5kZXggPCB1cmwubGVuZ3RoKCkpOyAvLyBXZSBzaG91bGQgYWx3
YXlzIHRlcm1pbmF0ZSBhdCBhIG51bGwgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgYSBTdHJpbmcu
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZUludGVycHJldGVyX2gKKyNkZWZpbmUgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcl9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNsdWRlICJERkFCeXRlY29k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CisKK2NsYXNzIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgeworcHVibGljOgorICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUp
CisgICAgICAgIDogYnl0ZWNvZGUoYnl0ZWNvZGUpCisgICAgeyB9OworICAgIAorICAgIFZlY3Rv
cjxFeHRlbnNpb25BY3Rpb25JbmRleD4gaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKworcHJp
dmF0ZToKKyAgICBjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8g
REZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBTm9kZS5oCShyZXZpc2lvbiAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50
RXh0ZW5zaW9uUnVsZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCShyZXZp
c2lvbiAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RG
QS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgogI2lu
Y2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAjaW5jbHVkZSAiREZBTm9kZS5o
IgogI2luY2x1ZGUgIk5GQS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247471</attachid>
            <date>2015-02-26 17:08:40 -0800</date>
            <delta_ts>2015-02-26 17:30:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226170826.patch</filename>
            <type>text/plain</type>
            <size>33403</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6Om5l
eHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBOjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bm9kZUF0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29t
cGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlcm1pbmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlQ29tcGlsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6REZBQnl0ZWNvZGVDb21waWxlcik6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldEJpdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6Omlu
dGVycHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUludGVycHJldGVyOjpERkFCeXRlY29kZUludGVycHJldGVyKToKKwogMjAxNS0wMi0y
NiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnQgRmls
dGVyaW5nXSBNb3ZlIFdlYkZpbHRlckV2YWx1YXRvciBhbmQgTkVGaWx0ZXJTb3VyY2UgZGVjbGFy
YXRpb25zIHRvIFNQSSBoZWFkZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODA2ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIxNDAsNiArMjE0MCwxMSBAQAogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyogRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0Qu
aCAqLzsgfTsKIAkJNUM0MzA0QjUxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCAqLzsg
fTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QjQx
OTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OworCQk1QzU3
MjVDMTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBE
RkFCeXRlY29kZS5oICovOyB9OworCQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0
ZWNvZGVDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5j
cHAgKi87IH07CisJCTVDNTcyNUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBp
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3
MjVBRDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oICovOyB9OworCQk1
QzU3MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRTFBOUVC
NkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi87IH07CisJCTVDNTcy
NUM1MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRjFBOUVCNkFDMDAy
NDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyB9OwogCQk1Q0ZDNDM1MDE5MjQw
OUUzMDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRFMTkyNDA2QTkwMEEwRDNCNSAv
KiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQk1RDIxQTgwMjEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIu
Y3BwICovOyB9OwogCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMTEz
RUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggKi87IH07CkBAIC05Mjg1LDYgKzkyOTAs
MTEgQEAKIAkJNUM0MzA0QUYxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0Qu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEVYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBwYXRo
ID0gY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9E
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEI0MTkxQUVG
NDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFCeXRlY29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFC
eXRlY29kZUNvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1
QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVDb21waWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzU3MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFC
eXRlY29kZUludGVycHJldGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1
NzI1QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9p
bnRlckxvY2tDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckxvY2tDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViVlRUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1Mzg3LDYg
KzE1Mzk3LDExIEBACiAJCQkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRl
bnNpb25zTWFuYWdlci5oICovLAogCQkJCTI2NzcyNUY2MUE1QjNBRDkwMDNDMjRERCAvKiBERkEu
Y3BwICovLAogCQkJCTI2NzcyNUY3MUE1QjNBRDkwMDNDMjRERCAvKiBERkEuaCAqLywKKwkJCQk1
QzU3MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCAqLywKKwkJCQk1QzU3MjVB
QzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgKi8sCisJCQkJNUM1
NzI1QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLywKKwkJCQk1
QzU3MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi8s
CisJCQkJNUM1NzI1QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aCAqLywKIAkJCQkyNjc3MjVGOTFBNUIzQUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAogCQkJ
CTI2OTM5NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3BwICovLAogCQkJCTI2OTM5NzIzMUE0
QTVCNjQwMEU4MzQ5RCAvKiBORkEuaCAqLywKQEAgLTI0MDYxLDYgKzI0MDc2LDcgQEAKIAkJCQk4
NUU3MTE5RTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEJhc2VGb250RWxlbWVudEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTlBOUM0OTBBQTVFM0JEMDBCNjk0QjIgLyogRE9NSFRN
TEJvZHlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE5RjBBQzVENTM1MDA1MzI3
MEYgLyogRE9NSFRNTEJvZHlFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVD
NTcyNUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NTE4M0I0MjBBQTY5MjYxMDBGMTlGQTMgLyogRE9NSFRNTEJSRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQTAwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxC
UkVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCQTRDREQwQUE2ODYxQjAw
ODgwNTJEIC8qIERPTUhUTUxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzAx
LDYgKzI1NzE3LDcgQEAKIAkJCQk4NjUxMkVERjE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEFGNEU1NUMxMURDNUE2MzAw
MEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZC
NTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
QzU3MjVDMTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5RDVEQzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBp
bmdMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUREMTI4REI1MDIwMEU3MjZDMiAv
KiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDQwLDYgKzI2NDU3
LDcgQEAKIAkJCQlCMjIyN0E3RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzMzE3OEQ1QUI1MDAxNDFFNjggLyog
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQz
NDE3OEQ1QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDc2QzlFNjExREY2QTBCMDA1
NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODRB
MDgyOTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLApAQCAtMjc2NTYsNiArMjc2NzQsNyBAQAogCQkJCTg1QUZBODIzMEFBRjUy
OEEwMEU4NDMwNSAvKiBET01FdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0IzMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01FdmVudHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAwRjAw
NTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDNTcy
NUMyMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJFM0JDMTA5MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzAwRjAwODBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUxpc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9y
bURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTk5NCw2ICszMDAxMyw3IEBACiAJCQkJQ0Q3
RTA1MjIxNjUxQzI4MjAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTJEM0VGNDRCMTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJDb3JlQ0FMYXll
ckV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzY5RERCMTYzNzFGRDQwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTVDNTcyNUM0MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QxMjdERUQxNEYzMDk3
RDAwRTg0Nzc5IC8qIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1lbnVtIGNsYXNzIEV4dGVuc2lvbkFjdGlvblR5
cGUgeworZW51bSBjbGFzcyBFeHRlbnNpb25BY3Rpb25UeXBlIDogdW5zaWduZWQgewogICAgIEJs
b2NrTG9hZCwKICAgICBJZ25vcmVQcmV2aW91c1J1bGVzCiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1
ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVD
b21waWxlci5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJORkEuaCIKICNpbmNsdWRlICJORkFUb0RGQS5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtODUs
NyArODcsNyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpCiAgICAg
ZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7
CiAjZW5kaWYKIAotICAgIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRF
eHRlbnNpb24gPSB7IE5GQVRvREZBOjpjb252ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29u
c3QgREZBIGRmYSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtOTUsOSArOTcsMTMgQEAgdm9pZCBD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNldFJ1bGVMaQogICAgIC8vIEZJWE1FOiBuZXZlciBh
ZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNoZXMgdGhlIGVtcHR5IHNldC4KIAogI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgIGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5kZmEuZGVidWdQcmludERvdCgpOworICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAj
ZW5kaWYKIAorICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CisgICAgREZBQnl0ZWNv
ZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKKyAgICBjb21waWxlci5jb21waWxl
KCk7CisgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
biA9IHsgYnl0ZWNvZGUsIHJ1bGVMaXN0IH07CiAgICAgbV9ydWxlTGlzdHMuc2V0KGlkZW50aWZp
ZXIsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CiB9CiAKQEAgLTExNSwyNCArMTIxLDEzIEBA
IGJvb2wgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzaG91bGRCbG8KIHsKICAgICBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHVybFN0cmluZy5jb250YWluc09ubHlBU0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25s
eSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1l
cyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7CisgICAgY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9
IHVybFN0cmluZy51dGY4KCk7CiAKICAgICBmb3IgKGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVs
ZUxpc3RzKSB7Ci0gICAgICAgIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZhbHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0
ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEucm9vdCgpOwotCi0gICAgICAgIEhhc2hT
ZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+IHRyaWdnZXJlZEFjdGlvbnM7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVybFN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tp
XSk7Ci0gICAgICAgICAgICBib29sIG9rOwotICAgICAgICAgICAgc3RhdGUgPSBjb21waWxlZENv
bnRlbnRFeHRlbnNpb24uZGZhLm5leHRTdGF0ZShzdGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0gICAg
ICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmRmYS5hY3Rpb25zKHN0YXRlKTsKLSAgICAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcmVkQWN0aW9ucy5hZGQoYWN0aW9ucy5iZWdpbigpLCBh
Y3Rpb25zLmVuZCgpKTsKLSAgICAgICAgfQorICAgICAgICBjb25zdCBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24mIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHJ1bGVMaXN0U2xvdC52YWx1ZTsK
KyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRl
bnRFeHRlbnNpb24uYnl0ZWNvZGUpOworICAgICAgICBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0
SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDY0X3Q+PiB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENT
dHJpbmcpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgZG8gc29tZXRo
aW5nIHdpdGggZWFjaCBhY3Rpb24gcmF0aGVyIHRoYW4ganVzdCByZXR1cm5pbmcgYSBib29sLgog
ICAgICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBW
ZWN0b3I8dWludDY0X3Q+IHNvcnRlZEFjdGlvbnM7CiAgICAgICAgICAgICBjb3B5VG9WZWN0b3Io
dHJpZ2dlcmVkQWN0aW9ucywgc29ydGVkQWN0aW9ucyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaAkocmV2aXNpb24gMTgwNjg2KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVkZSAiREZB
LmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTYwLDcgKzYxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVj
dCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewotICAgICAgICBERkEgZGZhOworICAgICAgICBW
ZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwogICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvblJ1bGU+IHJ1bGVMaXN0OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBLmNwcAkocmV2aXNpb24gMTgwNjg2KQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMzEgKzU5LDYg
QEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRmYSkKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0YXRlKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSwgY2hh
ciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUg
PCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBERkFOb2RlJiBub2RlID0gbV9ub2Rlc1tj
dXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4dE5vZGUgPSBub2RlLnRyYW5zaXRpb25zLmZpbmQo
Y2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5vZGUgIT0gbm9kZS50cmFuc2l0aW9ucy5lbmQoKSkg
ewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuZXh0Tm9kZS0+dmFsdWU7Ci0g
ICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikgewotICAgICAgICBvayA9
IHRydWU7Ci0gICAgICAgIHJldHVybiBub2RlLmZhbGxiYWNrVHJhbnNpdGlvbjsKLSAgICB9Ci0g
ICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLQotfQotCi1jb25zdCBWZWN0b3I8dWludDY0
X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25zdAotewotICAgIEFT
U0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fbm9kZXNb
Y3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQotCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RSYW5n
ZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYs
OCBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29uc3QgREZBJik7CiAKICAgICB1bnNp
Z25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAgLy8gSWYgdGhlcmUgaXMg
YSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNoYXJhY3RlciIsIHJldHVybiB0aGF0
IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBPdGhlcndpc2UsIHRoZSByZXR1cm4g
dmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4KLSAgICB1bnNpZ25lZCBuZXh0U3Rh
dGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJhY3RlciwgYm9vbCYgb2spIGNvbnN0
OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnModW5zaWduZWQgY3VycmVudFN0
YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5z
aXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9ub2Rlc1tpXTsgfQogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJ
TkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90KCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGQUJ5
dGVjb2RlX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVfaAorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zIHsKKwordHlwZWRlZiB1aW50OF90IERGQUJ5dGVjb2RlOworCitlbnVtIGNsYXNz
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsKKworICAgIC8vIENoZWNrVmFsdWUg
aGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIHZhbHVlIHRvIGNoZWNrICgxIGJ5dGUpLAor
ICAgIC8vIFRoZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsICg0IGJ5
dGVzKS4KKyAgICBDaGVja1ZhbHVlLAorCisgICAgLy8gQXBwZW5kQWN0aW9uIGhhcyBvbmUgYXJn
dW1lbnQ6CisgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgorICAgIEFwcGVu
ZEFjdGlvbiwKKworICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRzLgorICAgIFRlcm1p
bmF0ZSwKKworICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVudDoKKyAgICAvLyBUaGUgaW5kZXgg
dG8ganVtcCB0byB1bmNvbmRpdGlvbmFsbHkgKDQgYnl0ZXMpLgorICAgIEp1bXAsCit9OworCitz
dGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCit7CisgICAgc3dpdGNoIChpbnN0cnVjdGlvbikg
eworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZToKKyAgICAgICAg
cmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSAr
IHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBl
bmRBY3Rpb246CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikg
KyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVy
bWluYXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwor
ICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgfQor
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisK
KyNlbmRpZiAvLyBERkFCeXRlY29kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlQ29tcGlsZXIuaCIKKworI2lu
Y2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorCisjaW5jbHVkZSAiREZBLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRU
eXBlPgoraW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCBJ
bnRUeXBlIHZhbHVlKQoreworICAgIGJ5dGVjb2RlLnJlc2l6ZShieXRlY29kZS5zaXplKCkgKyBz
aXplb2YoSW50VHlwZSkpOworICAgICpyZWludGVycHJldF9jYXN0PEludFR5cGUqPigmYnl0ZWNv
ZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5cGUpXSkgPSB2YWx1ZTsKK30KKworaW5s
aW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVlOworfQorCit2b2lkIERGQUJ5dGVjb2RlQ29t
cGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9uQWN0aW9uVHlwZSBhY3Rpb24pCit7Cisg
ICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlLCBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOworICAgIGFwcGVuZDxFeHRlbnNpb25BY3Rpb25UeXBl
PihieXRlY29kZSwgYWN0aW9uKTsKK30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0
SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKK3sKKyAgICBhcHBlbmQ8REZBQnl0
ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXAp
OworICAgIGxpbmtSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihieXRlY29kZS5zaXplKCks
IGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7CisgICAgYXBwZW5kPHVuc2lnbmVkPihieXRlY29kZSwg
MCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorfQorCit2b2lkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2lnbmVk
IGRlc3RpbmF0aW9uTm9kZUluZGV4KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0
aW9uPihieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZSk7CisgICAg
YXBwZW5kPHVpbnQ4X3Q+KGJ5dGVjb2RlLCB2YWx1ZSk7CisgICAgbGlua1JlY29yZHMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsK
KyAgICBhcHBlbmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJl
IHNldCB3aGVuIGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRl
cm1pbmF0ZSgpCit7CisgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2Rl
LCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOworfQorICAgIAordm9pZCBERkFC
eXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29k
ZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZvciBs
aW5raW5nLgorICAgIG5vZGVTdGFydHNbaW5kZXhdID0gYnl0ZWNvZGUuc2l6ZSgpOworICAgIAor
ICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBkZmEubm9kZUF0KGluZGV4KTsKKyAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykKKyAgICAgICAgZW1pdEFwcGVuZEFjdGlvbihz
dGF0aWNfY2FzdDxFeHRlbnNpb25BY3Rpb25UeXBlPihhY3Rpb24pKTsKKyAgICAKKyAgICBsaW5r
UmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobGlua1JlY29yZHMuc2l6ZSgpICsgbm9kZS50cmFuc2l0
aW9ucy5zaXplKCkgKiBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkNoZWNrVmFsdWUpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24g
OiBub2RlLnRyYW5zaXRpb25zKQorICAgICAgICBlbWl0Q2hlY2tWYWx1ZSh0cmFuc2l0aW9uLmtl
eSwgdHJhbnNpdGlvbi52YWx1ZSk7CisgICAgCisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFu
c2l0aW9uKQorICAgICAgICBlbWl0SnVtcChub2RlLmZhbGxiYWNrVHJhbnNpdGlvbik7CisgICAg
ZWxzZQorICAgICAgICBlbWl0VGVybWluYXRlKCk7Cit9CisgICAgCit2b2lkIERGQUJ5dGVjb2Rl
Q29tcGlsZXI6OmNvbXBpbGUoKQoreworICAgIEFTU0VSVCghYnl0ZWNvZGUuc2l6ZSgpKTsKKyAg
ICBub2RlU3RhcnRzLnJlc2l6ZShkZmEuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUg
dGhlIHJvb3QgaXMgYWx3YXlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ5dGVjb2RlLgorICAg
IGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBkZmEucm9vdCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZhLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpICE9IGRmYS5yb290KCkp
CisgICAgICAgICAgICBjb21waWxlTm9kZShieXRlY29kZSwgaSk7CisgICAgfQorCisgICAgLy8g
TGluay4KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtSZWNvcmQgOiBsaW5rUmVjb3JkcykKKyAg
ICAgICAgc2V0MzJCaXRzKGJ5dGVjb2RlLCBsaW5rUmVjb3JkLmZpcnN0LCBub2RlU3RhcnRzW2xp
bmtSZWNvcmQuc2Vjb25kXSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZUNv
bXBpbGVyX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVDb21waWxlcl9oCisKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNp
bmNsdWRlICJERkFCeXRlY29kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBE
RkE7CisKK2NsYXNzIERGQUJ5dGVjb2RlQ29tcGlsZXIgeworcHVibGljOgorICAgIERGQUJ5dGVj
b2RlQ29tcGlsZXIoY29uc3QgREZBJiBkZmEsIFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2Rl
KQorICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQorICAgICAgICAsIGRmYShkZmEpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGNvbXBpbGVOb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mLCB1bnNpZ25lZCBpbmRleCk7CisKKyAg
ICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24oRXh0ZW5zaW9uQWN0aW9uVHlwZSk7CisgICAgdm9pZCBl
bWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CisgICAgdm9pZCBlbWl0Q2hl
Y2tWYWx1ZSh1aW50OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7Cisg
ICAgdm9pZCBlbWl0VGVybWluYXRlKCk7CisKKyAgICBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRl
Y29kZTsKKyAgICBjb25zdCBERkEmIGRmYTsKKyAgICAKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG5v
ZGVTdGFydHM7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHZhbHVlIGlzIHRoZSBpbmRleCBpbiB0
aGUgYnl0ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1wIGlzIHRvIGJlIHdyaXR0ZW4uCisgICAg
Ly8gVGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXggb2YgdGhlIG5vZGUgdG8ganVtcCB0by4K
KyAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IGxpbmtSZWNvcmRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlm
IC8vIERGQUJ5dGVjb2RlQ29tcGlsZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorc3RhdGlj
IGlubGluZSBJbnRUeXBlIGdldEJpdHMoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNv
ZGUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbnRUeXBlKj4oJmJ5dGVjb2RlW2luZGV4XSk7Cit9CisgICAgCisgICAgCitIYXNoU2V0PHVp
bnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnBy
ZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZykKK3sKKyAgICBjb25zdCBjaGFyKiB1cmwgPSB1
cmxDU3RyaW5nLmRhdGEoKTsKKyAgICBBU1NFUlQodXJsLmRhdGEoKSk7CisgICAgCisgICAgdW5z
aWduZWQgcHJvZ3JhbUNvdW50ZXIgPSAwOworICAgIHVuc2lnbmVkIHVybEluZGV4ID0gMDsKKyAg
ICBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBhY3Rpb25zOworICAgIAorICAg
IC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgaWYgaW50ZXJwcmV0aW5nIGNvcnJlY3Rs
eSBjb21waWxlZCBieXRlY29kZS4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlW3Byb2dyYW1Db3Vu
dGVyXSkpIHsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0
ZToKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOworCisgICAgICAgIGNhc2UgREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZToKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVybCBpcyB0aGUgdmFsdWUgc3RvcmVkIHdpdGgg
dGhlIGJ5dGVjb2RlLgorICAgICAgICAgICAgaWYgKCF1cmxbdXJsSW5kZXhdKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhY3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hhcmFjdGVyIGF0IGVuZC4K
KyAgICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhfdD4oYnl0ZWNv
ZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpIHsKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KGJ5dGVjb2RlLCBwcm9ncmFt
Q291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCkpOworICAgICAg
ICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBE
RkEuCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciAr
PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNo
ZWNrVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpKdW1wOgorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRz
PHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUp
KTsKKyAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGlu
IHRoZSBERkEuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKKyAgICAgICAgICAgIGFjdGlvbnMuYWRkKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPEV4dGVuc2lvbkFjdGlvblR5cGU+KGJ5dGVjb2RlLCBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSk7CisgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSW52
YWxpZCBieXRlY29kZS4KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodXJsSW5kZXggPCB1cmwu
bGVuZ3RoKCkpOyAvLyBXZSBzaG91bGQgYWx3YXlzIHRlcm1pbmF0ZSBhdCBhIG51bGwgY2hhcmFj
dGVyIGF0IHRoZSBlbmQgb2YgYSBTdHJpbmcuCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29k
ZUludGVycHJldGVyX2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCisKKyNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1
bGUuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBERkFCeXRlY29kZUludGVycHJl
dGVyIHsKK3B1YmxpYzoKKyAgICBERkFCeXRlY29kZUludGVycHJldGVyKGNvbnN0IFZlY3RvcjxE
RkFCeXRlY29kZT4mIGJ5dGVjb2RlKQorICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0
X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4g
aW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBWZWN0b3I8
REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gREZBQnl0ZWNvZGVJbnRlcnByZXRlcl9o
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247473</attachid>
            <date>2015-02-26 17:30:39 -0800</date>
            <delta_ts>2015-02-26 21:34:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226173025.patch</filename>
            <type>text/plain</type>
            <size>32629</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDcxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0
UnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6c2hvdWxkQmxvY2tVUkwpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
OjpuZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQTo6YWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6Om5vZGVBdCk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6c2V0MzJCaXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5k
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0SnVtcCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXJtaW5hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGls
ZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OkRGQUJ5dGVjb2RlQ29tcGlsZXIpOgor
ICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRCaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVy
OjppbnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcik6CisKIDIwMTUt
MDItMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBTYXZlIENvbnNvbGUgRXZhbHVhdGlvbnMgaW50byBDb21tYW5kIExpbmUg
dmFyaWFibGVzICQxLSQ5OSAoJG4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODA2ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIxNDAsNiArMjE0MCwxMSBAQAogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyogRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0Qu
aCAqLzsgfTsKIAkJNUM0MzA0QjUxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCAqLzsg
fTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QjQx
OTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OworCQk1QzU3
MjVDMTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBE
RkFCeXRlY29kZS5oICovOyB9OworCQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0
ZWNvZGVDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5j
cHAgKi87IH07CisJCTVDNTcyNUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBp
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3
MjVBRDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oICovOyB9OworCQk1
QzU3MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRTFBOUVC
NkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi87IH07CisJCTVDNTcy
NUM1MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRjFBOUVCNkFDMDAy
NDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyB9OwogCQk1Q0ZDNDM1MDE5MjQw
OUUzMDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRFMTkyNDA2QTkwMEEwRDNCNSAv
KiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQk1RDIxQTgwMjEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIu
Y3BwICovOyB9OwogCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMTEz
RUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggKi87IH07CkBAIC05Mjg1LDYgKzkyOTAs
MTEgQEAKIAkJNUM0MzA0QUYxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0Qu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEVYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBwYXRo
ID0gY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9E
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEI0MTkxQUVG
NDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFCeXRlY29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFC
eXRlY29kZUNvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1
QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVDb21waWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzU3MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFC
eXRlY29kZUludGVycHJldGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1
NzI1QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9p
bnRlckxvY2tDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckxvY2tDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViVlRUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1Mzg3LDYg
KzE1Mzk3LDExIEBACiAJCQkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRl
bnNpb25zTWFuYWdlci5oICovLAogCQkJCTI2NzcyNUY2MUE1QjNBRDkwMDNDMjRERCAvKiBERkEu
Y3BwICovLAogCQkJCTI2NzcyNUY3MUE1QjNBRDkwMDNDMjRERCAvKiBERkEuaCAqLywKKwkJCQk1
QzU3MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCAqLywKKwkJCQk1QzU3MjVB
QzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgKi8sCisJCQkJNUM1
NzI1QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLywKKwkJCQk1
QzU3MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi8s
CisJCQkJNUM1NzI1QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aCAqLywKIAkJCQkyNjc3MjVGOTFBNUIzQUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAogCQkJ
CTI2OTM5NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3BwICovLAogCQkJCTI2OTM5NzIzMUE0
QTVCNjQwMEU4MzQ5RCAvKiBORkEuaCAqLywKQEAgLTI0MDYxLDYgKzI0MDc2LDcgQEAKIAkJCQk4
NUU3MTE5RTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEJhc2VGb250RWxlbWVudEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTlBOUM0OTBBQTVFM0JEMDBCNjk0QjIgLyogRE9NSFRN
TEJvZHlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE5RjBBQzVENTM1MDA1MzI3
MEYgLyogRE9NSFRNTEJvZHlFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVD
NTcyNUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NTE4M0I0MjBBQTY5MjYxMDBGMTlGQTMgLyogRE9NSFRNTEJSRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQTAwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxC
UkVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCQTRDREQwQUE2ODYxQjAw
ODgwNTJEIC8qIERPTUhUTUxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzAx
LDYgKzI1NzE3LDcgQEAKIAkJCQk4NjUxMkVERjE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEFGNEU1NUMxMURDNUE2MzAw
MEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZC
NTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
QzU3MjVDMTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5RDVEQzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBp
bmdMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUREMTI4REI1MDIwMEU3MjZDMiAv
KiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDQwLDYgKzI2NDU3
LDcgQEAKIAkJCQlCMjIyN0E3RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzMzE3OEQ1QUI1MDAxNDFFNjggLyog
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQz
NDE3OEQ1QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDc2QzlFNjExREY2QTBCMDA1
NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODRB
MDgyOTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLApAQCAtMjc2NTYsNiArMjc2NzQsNyBAQAogCQkJCTg1QUZBODIzMEFBRjUy
OEEwMEU4NDMwNSAvKiBET01FdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0IzMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01FdmVudHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAwRjAw
NTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDNTcy
NUMyMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJFM0JDMTA5MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzAwRjAwODBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUxpc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9y
bURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTk5NCw2ICszMDAxMyw3IEBACiAJCQkJQ0Q3
RTA1MjIxNjUxQzI4MjAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTJEM0VGNDRCMTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJDb3JlQ0FMYXll
ckV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzY5RERCMTYzNzFGRDQwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTVDNTcyNUM0MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QxMjdERUQxNEYzMDk3
RDAwRTg0Nzc5IC8qIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDE4
MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25zQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1
Z2dpbmcuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZUNvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk5GQS5oIgogI2luY2x1ZGUgIk5GQVRv
REZBLmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBAIC04NSw3ICs4Nyw3IEBAIHZvaWQgQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxlTGkKICAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3RhcnQg
PSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCi0gICAgQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgTkZBVG9ERkE6OmNv
bnZlcnQobmZhKSwgcnVsZUxpc3QgfTsKKyAgICBjb25zdCBERkEgZGZhID0gTkZBVG9ERkE6OmNv
bnZlcnQobmZhKTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJ
TkcKICAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CkBAIC05NSw5ICs5NywxMyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
c2V0UnVsZUxpCiAgICAgLy8gRklYTUU6IG5ldmVyIGFkZCBhIERGQSB0aGF0IG9ubHkgbWF0Y2hl
cyB0aGUgZW1wdHkgc2V0LgogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVf
REVCVUdHSU5HCi0gICAgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5kZWJ1Z1ByaW50RG90
KCk7CisgICAgZGZhLmRlYnVnUHJpbnREb3QoKTsKICNlbmRpZgogCisgICAgVmVjdG9yPERGQUJ5
dGVjb2RlPiBieXRlY29kZTsKKyAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwg
Ynl0ZWNvZGUpOworICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAgICBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0geyBieXRlY29kZSwgcnVsZUxpc3Qg
fTsKICAgICBtX3J1bGVMaXN0cy5zZXQoaWRlbnRpZmllciwgY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKTsKIH0KIApAQCAtMTE1LDI0ICsxMjEsMTMgQEAgYm9vbCBDb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQ6OnNob3VsZEJsbwogewogICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gdXJsLnN0
cmluZygpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodXJsU3RyaW5nLmNvbnRhaW5zT25seUFT
Q0lJKCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBvbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVy
cy4gVGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1bWVzIHRoZSBpbnB1dCBpcyBBU0NJSS4iKTsK
KyAgICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nID0gdXJsU3RyaW5nLnV0ZjgoKTsKIAogICAg
IGZvciAoYXV0byYgcnVsZUxpc3RTbG90IDogbV9ydWxlTGlzdHMpIHsKLSAgICAgICAgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBydWxlTGlzdFNs
b3QudmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXRlID0gY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmRmYS5yb290KCk7Ci0KLSAgICAgICAgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8
dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90Pj4gdHJpZ2dlcmVkQWN0aW9uczsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXJsU3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVy
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4odXJsU3RyaW5nW2ldKTsKLSAgICAgICAgICAgIGJvb2wgb2s7
Ci0gICAgICAgICAgICBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEubmV4dFN0
YXRlKHN0YXRlLCBjaGFyYWN0ZXIsIG9rKTsKLSAgICAgICAgICAgIGlmICghb2spCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFj
dGlvbnMgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLmFjdGlvbnMoc3RhdGUpOwotICAg
ICAgICAgICAgaWYgKCFhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0cmlnZ2Vy
ZWRBY3Rpb25zLmFkZChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwotICAgICAgICB9
CisgICAgICAgIGNvbnN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZhbHVlOworICAgICAgICBERkFCeXRlY29kZUludGVy
cHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5ieXRlY29kZSk7Cisg
ICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9
IGludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nKTsKKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBldmVudHVhbGx5IGRvIHNvbWV0aGluZyB3aXRoIGVhY2ggYWN0aW9uIHJhdGhlciB0
aGFuIGp1c3QgcmV0dXJuaW5nIGEgYm9vbC4KICAgICAgICAgaWYgKCF0cmlnZ2VyZWRBY3Rpb25z
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiBzb3J0ZWRBY3Rpb25z
OwogICAgICAgICAgICAgY29weVRvVmVjdG9yKHRyaWdnZXJlZEFjdGlvbnMsIHNvcnRlZEFjdGlv
bnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MDY4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0
ZW5zaW9uUnVsZS5oIgogI2luY2x1ZGUgIkRGQS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw3ICs2MSw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsK
LSAgICAgICAgREZBIGRmYTsKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsK
ICAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHJldmlzaW9u
IDE4MDY4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDMxICs1OSw2IEBAIERGQSYgREZBOjpvcGVyYXRvcj0oY29uc3Qg
REZBJiBkZmEpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi11bnNpZ25lZCBERkE6Om5leHRTdGF0
ZSh1bnNpZ25lZCBjdXJyZW50U3RhdGUsIGNoYXIgY2hhcmFjdGVyLCBib29sJiBvaykgY29uc3QK
LXsKLSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5zaXplKCkpOwotCi0gICAgY29u
c3QgREZBTm9kZSYgbm9kZSA9IG1fbm9kZXNbY3VycmVudFN0YXRlXTsKLSAgICBhdXRvIG5leHRO
b2RlID0gbm9kZS50cmFuc2l0aW9ucy5maW5kKGNoYXJhY3Rlcik7Ci0gICAgaWYgKG5leHROb2Rl
ICE9IG5vZGUudHJhbnNpdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gbmV4dE5vZGUtPnZhbHVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNGYWxsYmFj
a1RyYW5zaXRpb24pIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICByZXR1cm4gbm9kZS5m
YWxsYmFja1RyYW5zaXRpb247Ci0gICAgfQotICAgIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7
Ci0KLX0KLQotY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgREZBOjphY3Rpb25zKHVuc2lnbmVkIGN1
cnJlbnRTdGF0ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5z
aXplKCkpOwotICAgIHJldHVybiBtX25vZGVzW2N1cnJlbnRTdGF0ZV0uYWN0aW9uczsKLX0KLQog
I2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogc3RhdGljIHZv
aWQgcHJpbnRSYW5nZShib29sIGZpcnN0UmFuZ2UsIGNoYXIgcmFuZ2VTdGFydCwgY2hhciByYW5n
ZUVuZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCShyZXZp
c2lvbiAxODA2ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDggQEAgcHVibGljOgogICAgIERGQSYgb3BlcmF0
b3I9KGNvbnN0IERGQSYpOwogCiAgICAgdW5zaWduZWQgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdDsgfQotICAgIC8vIElmIHRoZXJlIGlzIGEgdHJhbnNpdGlvbiB0byBhIHZhbGlkIHN0YXRl
IG9uICJjaGFyYWN0ZXIiLCByZXR1cm4gdGhhdCBzdGF0ZSBhbmQgc2V0IG9rIHRvIHRydWUuCi0g
ICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmQgb2sgaXMg
ZmFsc2UuCi0gICAgdW5zaWduZWQgbmV4dFN0YXRlKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSwgY2hh
ciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+
JiBhY3Rpb25zKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSkgY29uc3Q7CisgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgREZBTm9kZSYg
bm9kZUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KIAogI2lmIENP
TlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIHZvaWQgZGVidWdQ
cmludERvdCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZV9oCisjZGVmaW5lIERGQUJ5dGVjb2Rl
X2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3R5cGVkZWYgdWludDhf
dCBERkFCeXRlY29kZTsKKworZW51bSBjbGFzcyBERkFCeXRlY29kZUluc3RydWN0aW9uIDogdWlu
dDhfdCB7CisKKyAgICAvLyBDaGVja1ZhbHVlIGhhcyB0d28gYXJndW1lbnRzOgorICAgIC8vIFRo
ZSB2YWx1ZSB0byBjaGVjayAoMSBieXRlKSwKKyAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBp
ZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCAoNCBieXRlcykuCisgICAgQ2hlY2tWYWx1ZSwKKworICAg
IC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgorICAgIC8vIFRoZSBhY3Rpb24gdG8g
YXBwZW5kICg0IGJ5dGVzKS4KKyAgICBBcHBlbmRBY3Rpb24sCisKKyAgICAvLyBUZXJtaW5hdGUg
aGFzIG5vIGFyZ3VtZW50cy4KKyAgICBUZXJtaW5hdGUsCisKKyAgICAvLyBKdW1wIGhhcyBvbmUg
YXJndW1lbnQ6CisgICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8gdW5jb25kaXRpb25hbGx5ICg0
IGJ5dGVzKS4KKyAgICBKdW1wLAorfTsKKworc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uKQor
eworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24pIHsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkNoZWNrVmFsdWU6CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICBjYXNl
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKTsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246Okp1bXA6CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikg
KyBzaXplb2YodW5zaWduZWQpOworICAgIH0KK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gREZBQnl0ZWNvZGVfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVDb21waWxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkFCeXRlY29kZUNvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5o
IgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkRGQS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMg
eworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK2lubGluZSB2b2lkIGFwcGVuZChWZWN0
b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgSW50VHlwZSB2YWx1ZSkKK3sKKyAgICBieXRlY29k
ZS5yZXNpemUoYnl0ZWNvZGUuc2l6ZSgpICsgc2l6ZW9mKEludFR5cGUpKTsKKyAgICAqcmVpbnRl
cnByZXRfY2FzdDxJbnRUeXBlKj4oJmJ5dGVjb2RlW2J5dGVjb2RlLnNpemUoKSAtIHNpemVvZihJ
bnRUeXBlKV0pID0gdmFsdWU7Cit9CisKK2lubGluZSB2b2lkIHNldDMyQml0cyhWZWN0b3I8REZB
Qnl0ZWNvZGU+JiBieXRlY29kZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHZhbHVlKQorewor
ICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oJmJ5dGVjb2RlW2luZGV4XSkgPSB2YWx1
ZTsKK30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKHVuc2ln
bmVkIGFjdGlvbikKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNv
ZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgYXBwZW5kPHVu
c2lnbmVkPihieXRlY29kZSwgYWN0aW9uKTsKK30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVy
OjplbWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKK3sKKyAgICBhcHBlbmQ8
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
Okp1bXApOworICAgIGxpbmtSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihieXRlY29kZS5z
aXplKCksIGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7CisgICAgYXBwZW5kPHVuc2lnbmVkPihieXRl
Y29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorfQorCit2
b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZSk7
CisgICAgYXBwZW5kPHVpbnQ4X3Q+KGJ5dGVjb2RlLCB2YWx1ZSk7CisgICAgbGlua1JlY29yZHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5k
ZXgpKTsKKyAgICBhcHBlbmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3
aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6
ZW1pdFRlcm1pbmF0ZSgpCit7CisgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5
dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOworfQorICAgIAordm9p
ZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiBi
eXRlY29kZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4
IGZvciBsaW5raW5nLgorICAgIG5vZGVTdGFydHNbaW5kZXhdID0gYnl0ZWNvZGUuc2l6ZSgpOwor
ICAgIAorICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBkZmEubm9kZUF0KGluZGV4KTsKKyAgICBm
b3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykKKyAgICAgICAgZW1pdEFwcGVuZEFj
dGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgCisgICAgbGlua1JlY29y
ZHMucmVzZXJ2ZUNhcGFjaXR5KGxpbmtSZWNvcmRzLnNpemUoKSArIG5vZGUudHJhbnNpdGlvbnMu
c2l6ZSgpICogaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpDaGVja1ZhbHVlKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9k
ZS50cmFuc2l0aW9ucykKKyAgICAgICAgZW1pdENoZWNrVmFsdWUodHJhbnNpdGlvbi5rZXksIHRy
YW5zaXRpb24udmFsdWUpOworICAgIAorICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlv
bikKKyAgICAgICAgZW1pdEp1bXAobm9kZS5mYWxsYmFja1RyYW5zaXRpb24pOworICAgIGVsc2UK
KyAgICAgICAgZW1pdFRlcm1pbmF0ZSgpOworfQorICAgIAordm9pZCBERkFCeXRlY29kZUNvbXBp
bGVyOjpjb21waWxlKCkKK3sKKyAgICBBU1NFUlQoIWJ5dGVjb2RlLnNpemUoKSk7CisgICAgbm9k
ZVN0YXJ0cy5yZXNpemUoZGZhLnNpemUoKSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZSBy
b290IGlzIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRlY29kZS4KKyAgICBjb21w
aWxlTm9kZShieXRlY29kZSwgZGZhLnJvb3QoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRmYS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSAhPSBkZmEucm9vdCgpKQorICAg
ICAgICAgICAgY29tcGlsZU5vZGUoYnl0ZWNvZGUsIGkpOworICAgIH0KKworICAgIC8vIExpbmsu
CisgICAgZm9yIChjb25zdCBhdXRvJiBsaW5rUmVjb3JkIDogbGlua1JlY29yZHMpCisgICAgICAg
IHNldDMyQml0cyhieXRlY29kZSwgbGlua1JlY29yZC5maXJzdCwgbm9kZVN0YXJ0c1tsaW5rUmVj
b3JkLnNlY29uZF0pOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZBQnl0ZWNvZGVDb21waWxl
cl9oCisjZGVmaW5lIERGQUJ5dGVjb2RlQ29tcGlsZXJfaAorCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisjaW5jbHVk
ZSAiREZBQnl0ZWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgREZBOwor
CitjbGFzcyBERkFCeXRlY29kZUNvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBERkFCeXRlY29kZUNv
bXBpbGVyKGNvbnN0IERGQSYgZGZhLCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSkKKyAg
ICAgICAgOiBieXRlY29kZShieXRlY29kZSkKKyAgICAgICAgLCBkZmEoZGZhKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21w
aWxlTm9kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiwgdW5zaWduZWQgaW5kZXgpOworCisgICAgdm9p
ZCBlbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVkKTsKKyAgICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVk
IGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3Qg
dmFsdWUsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICB2b2lkIGVtaXRUZXJt
aW5hdGUoKTsKKworICAgIFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlOworICAgIGNvbnN0
IERGQSYgZGZhOworICAgIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gbm9kZVN0YXJ0czsKKyAgICAK
KyAgICAvLyBUaGUgZmlyc3QgdmFsdWUgaXMgdGhlIGluZGV4IGluIHRoZSBieXRlY29kZSBidWZm
ZXIgd2hlcmUgdGhlIGp1bXAgaXMgdG8gYmUgd3JpdHRlbi4KKyAgICAvLyBUaGUgc2Vjb25kIHZh
bHVlIGlzIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0byBqdW1wIHRvLgorICAgIFZlY3RvcjxzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPj4gbGlua1JlY29yZHM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gREZBQnl0ZWNvZGVD
b21waWxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25z
IHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CitzdGF0aWMgaW5saW5lIEludFR5cGUg
Z2V0Qml0cyhjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0
ZWNvZGVbaW5kZXhdKTsKK30KKworREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZykK
K3sKKyAgICBjb25zdCBjaGFyKiB1cmwgPSB1cmxDU3RyaW5nLmRhdGEoKTsKKyAgICBBU1NFUlQo
dXJsLmRhdGEoKSk7CisgICAgCisgICAgdW5zaWduZWQgcHJvZ3JhbUNvdW50ZXIgPSAwOworICAg
IHVuc2lnbmVkIHVybEluZGV4ID0gMDsKKyAgICBBY3Rpb25zIGFjdGlvbnM7CisgICAgCisgICAg
Ly8gVGhpcyBzaG91bGQgYWx3YXlzIHRlcm1pbmF0ZSBpZiBpbnRlcnByZXRpbmcgY29ycmVjdGx5
IGNvbXBpbGVkIGJ5dGVjb2RlLgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHN3aXRjaCAo
c3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGVbcHJvZ3JhbUNvdW50
ZXJdKSkgeworCisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRl
OgorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7CisKKyAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlOgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0
aGUgYnl0ZWNvZGUuCisgICAgICAgICAgICBpZiAoIXVybFt1cmxJbmRleF0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFjdGlvbnM7IC8vIFJlYWNoZWQgbnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgor
ICAgICAgICAgICAgaWYgKHVybFt1cmxJbmRleF0gPT0gZ2V0Qml0czx1aW50OF90PihieXRlY29k
ZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkgeworICAgICAgICAgICAg
ICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSk7CisgICAgICAg
ICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERG
QS4KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hl
Y2tWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246Okp1bXA6CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8
dW5zaWduZWQ+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkp
OworICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4g
dGhlIERGQS4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgorICAgICAgICAgICAgYWN0aW9ucy5hZGQoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRl
ciArIHNpemVvZihERkFCeXRlY29kZSkpKSk7CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciAr
PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFw
cGVuZEFjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSW52YWxpZCBieXRlY29k
ZS4KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodXJsSW5kZXggPCB1cmwubGVuZ3RoKCkpOyAv
LyBXZSBzaG91bGQgYWx3YXlzIHRlcm1pbmF0ZSBhdCBhIG51bGwgY2hhcmFjdGVyIGF0IHRoZSBl
bmQgb2YgYSBTdHJpbmcuCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZUludGVycHJldGVy
X2gKKyNkZWZpbmUgREZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCisKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNs
dWRlICJERkFCeXRlY29kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBERkFCeXRlY29kZUludGVycHJldGVyIHsKK3B1Ymxp
YzoKKyAgICBERkFCeXRlY29kZUludGVycHJldGVyKGNvbnN0IFZlY3RvcjxERkFCeXRlY29kZT4m
IGJ5dGVjb2RlKQorICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdHlwZWRlZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46
Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBBY3Rp
b25zOworICAgIAorICAgIEFjdGlvbnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKworcHJp
dmF0ZToKKyAgICBjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8g
REZBQnl0ZWNvZGVJbnRlcnByZXRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247496</attachid>
            <date>2015-02-26 21:34:20 -0800</date>
            <delta_ts>2015-02-26 23:57:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142031-20150226213408.patch</filename>
            <type>text/plain</type>
            <size>32696</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE1LTAyLTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcGlsZSBE
RkEgdG8gYnl0ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDIwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0
UnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6c2hvdWxkQmxvY2tVUkwpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
OjpuZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQTo6YWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6Om5vZGVBdCk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6c2V0MzJCaXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5k
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0SnVtcCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXJtaW5hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGls
ZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OkRGQUJ5dGVjb2RlQ29tcGlsZXIpOgor
ICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRCaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVy
OjppbnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcik6CisKIDIwMTUt
MDItMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5h
bWUgU09GVF9MSU5LX0ZVTkNUSU9OX3tERUNMLElNUEx9KCkgdG8gU09GVF9MSU5LX0ZVTkNUSU9O
X3tIRUFERVIsU09VUkNFfSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODA3MjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIxNDIsNiArMjE0MiwxMSBAQAogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCAq
LzsgfTsKIAkJNUM0MzA0QjUxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxP
RC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQz
MDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCAqLzsgfTsK
IAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QjQxOTFB
RUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OworCQk1QzU3MjVD
MTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFC
eXRlY29kZS5oICovOyB9OworCQk1QzU3MjVDMjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAg
Ki87IH07CisJCTVDNTcyNUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVB
RDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oICovOyB9OworCQk1QzU3
MjVDNDFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRTFBOUVCNkFD
MDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi87IH07CisJCTVDNTcyNUM1
MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzU3MjVBRjFBOUVCNkFDMDAyNDNC
NTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyB9OwogCQk1Q0ZDNDM1MDE5MjQwOUUz
MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRFMTkyNDA2QTkwMEEwRDNCNSAvKiBQ
b2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQk1RDIxQTgwMjEzRUNFNURGMDBCQjcw
NjQgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3Bw
ICovOyB9OwogCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMTEzRUNF
NURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmggKi87IH07CkBAIC05MjkxLDYgKzkyOTYsMTEg
QEAKIAkJNUM0MzA0QUYxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEVYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBwYXRoID0g
Y2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEI0MTkxQUVGNDYw
MDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDNTcyNUFCMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFCeXRlY29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzU3MjVBQzFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVD
b21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFCeXRl
Y29kZUNvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1QUQx
QTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1QzU3MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFCeXRl
Y29kZUludGVycHJldGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM1NzI1
QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRl
ckxvY2tDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckxvY2tDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAvKiBX
ZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
VlRUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1Mzk1LDYgKzE1
NDA1LDExIEBACiAJCQkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNp
b25zTWFuYWdlci5oICovLAogCQkJCTI2NzcyNUY2MUE1QjNBRDkwMDNDMjRERCAvKiBERkEuY3Bw
ICovLAogCQkJCTI2NzcyNUY3MUE1QjNBRDkwMDNDMjRERCAvKiBERkEuaCAqLywKKwkJCQk1QzU3
MjVBQjFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCAqLywKKwkJCQk1QzU3MjVBQzFB
OUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgKi8sCisJCQkJNUM1NzI1
QUQxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLywKKwkJCQk1QzU3
MjVBRTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi8sCisJ
CQkJNUM1NzI1QUYxQTlFQjZBQzAwMjQzQjU2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAq
LywKIAkJCQkyNjc3MjVGOTFBNUIzQUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAogCQkJCTI2
OTM5NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3BwICovLAogCQkJCTI2OTM5NzIzMUE0QTVC
NjQwMEU4MzQ5RCAvKiBORkEuaCAqLywKQEAgLTI0MDczLDYgKzI0MDg4LDcgQEAKIAkJCQk4NUU3
MTE5RTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEJhc2VGb250RWxlbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTlBOUM0OTBBQTVFM0JEMDBCNjk0QjIgLyogRE9NSFRNTEJv
ZHlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE5RjBBQzVENTM1MDA1MzI3MEYg
LyogRE9NSFRNTEJvZHlFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNTcy
NUMzMUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTE4M0I0MjBBQTY5MjYxMDBGMTlGQTMgLyogRE9NSFRNTEJSRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQTAwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxCUkVs
ZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCQTRDREQwQUE2ODYxQjAwODgw
NTJEIC8qIERPTUhUTUxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzE2LDYg
KzI1NzMyLDcgQEAKIAkJCQk4NjUxMkVERjE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEFGNEU1NUMxMURDNUE2MzAwMEVE
M0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1
MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzU3
MjVDMTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RDVEQzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdM
b2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUREMTI4REI1MDIwMEU3MjZDMiAvKiBQ
bGF0Zm9ybUNBQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDU1LDYgKzI2NDcyLDcg
QEAKIAkJCQlCMjIyN0E3RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzMzE3OEQ1QUI1MDAxNDFFNjggLyogU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzNDE3
OEQ1QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QzU3MjVDNTFBOUVCNkFDMDAyNDNCNTYgLyogREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODEwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDc2QzlFNjExREY2QTBCMDA1NTVC
MDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODRBMDgy
OTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjc2NzIsNiArMjc2OTAsNyBAQAogCQkJCTg1QUZBODIzMEFBRjUyOEEw
MEU4NDMwNSAvKiBET01FdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0IzMDk3Qzcx
NUYwMDE5RjNEOCAvKiBET01FdmVudHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAwRjAwNTBF
MEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDNTcyNUMy
MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFM0JDMTA5MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQlCQzAwRjAwODBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUxpc3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQkyRUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDAxMCw2ICszMDAyOSw3IEBACiAJCQkJQ0Q3RTA1
MjIxNjUxQzI4MjAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTJEM0VGNDRCMTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJDb3JlQ0FMYXllckV4
dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzY5RERCMTYzNzFGRDQwMDdDMzhERiAvKiBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVD
NTcyNUM0MUE5RUI2QUMwMDI0M0I1NiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QxMjdERUQxNEYzMDk3RDAw
RTg0Nzc5IC8qIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDE4MDcy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25z
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dp
bmcuaCIKKyNpbmNsdWRlICJERkFCeXRlY29kZUNvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk5GQS5oIgogI2luY2x1ZGUgIk5GQVRvREZB
LmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBAIC04NSw3ICs4Nyw3IEBAIHZvaWQgQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpzZXRSdWxlTGkKICAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3RhcnQgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCi0gICAgQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgTkZBVG9ERkE6OmNvbnZl
cnQobmZhKSwgcnVsZUxpc3QgfTsKKyAgICBjb25zdCBERkEgZGZhID0gTkZBVG9ERkE6OmNvbnZl
cnQobmZhKTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcK
ICAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7CkBAIC05NSw5ICs5NywxMyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0
UnVsZUxpCiAgICAgLy8gRklYTUU6IG5ldmVyIGFkZCBhIERGQSB0aGF0IG9ubHkgbWF0Y2hlcyB0
aGUgZW1wdHkgc2V0LgogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVC
VUdHSU5HCi0gICAgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5kZWJ1Z1ByaW50RG90KCk7
CisgICAgZGZhLmRlYnVnUHJpbnREb3QoKTsKICNlbmRpZgogCisgICAgVmVjdG9yPERGQUJ5dGVj
b2RlPiBieXRlY29kZTsKKyAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwgYnl0
ZWNvZGUpOworICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAgICBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0geyBieXRlY29kZSwgcnVsZUxpc3QgfTsK
ICAgICBtX3J1bGVMaXN0cy5zZXQoaWRlbnRpZmllciwgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KTsKIH0KIApAQCAtMTE1LDI0ICsxMjEsMTMgQEAgYm9vbCBDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQ6OnNob3VsZEJsbwogewogICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gdXJsLnN0cmlu
ZygpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodXJsU3RyaW5nLmNvbnRhaW5zT25seUFTQ0lJ
KCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBvbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVycy4g
VGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1bWVzIHRoZSBpbnB1dCBpcyBBU0NJSS4iKTsKKyAg
ICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nID0gdXJsU3RyaW5nLnV0ZjgoKTsKIAogICAgIGZv
ciAoYXV0byYgcnVsZUxpc3RTbG90IDogbV9ydWxlTGlzdHMpIHsKLSAgICAgICAgQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBydWxlTGlzdFNsb3Qu
dmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXRlID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmRmYS5yb290KCk7Ci0KLSAgICAgICAgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWlu
dDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90
Pj4gdHJpZ2dlcmVkQWN0aW9uczsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXJsU3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0g
c3RhdGljX2Nhc3Q8Y2hhcj4odXJsU3RyaW5nW2ldKTsKLSAgICAgICAgICAgIGJvb2wgb2s7Ci0g
ICAgICAgICAgICBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5kZmEubmV4dFN0YXRl
KHN0YXRlLCBjaGFyYWN0ZXIsIG9rKTsKLSAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlv
bnMgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLmFjdGlvbnMoc3RhdGUpOwotICAgICAg
ICAgICAgaWYgKCFhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0cmlnZ2VyZWRB
Y3Rpb25zLmFkZChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwotICAgICAgICB9Cisg
ICAgICAgIGNvbnN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZhbHVlOworICAgICAgICBERkFCeXRlY29kZUludGVycHJl
dGVyIGludGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5ieXRlY29kZSk7CisgICAg
ICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IGlu
dGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBldmVudHVhbGx5IGRvIHNvbWV0aGluZyB3aXRoIGVhY2ggYWN0aW9uIHJhdGhlciB0aGFu
IGp1c3QgcmV0dXJuaW5nIGEgYm9vbC4KICAgICAgICAgaWYgKCF0cmlnZ2VyZWRBY3Rpb25zLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiBzb3J0ZWRBY3Rpb25zOwog
ICAgICAgICAgICAgY29weVRvVmVjdG9yKHRyaWdnZXJlZEFjdGlvbnMsIHNvcnRlZEFjdGlvbnMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MDcyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uUnVsZS5oIgogI2luY2x1ZGUgIkRGQS5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw3ICs2MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKLSAg
ICAgICAgREZBIGRmYTsKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAg
ICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHJldmlzaW9uIDE4
MDcyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDMxICs1OSw2IEBAIERGQSYgREZBOjpvcGVyYXRvcj0oY29uc3QgREZB
JiBkZmEpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi11bnNpZ25lZCBERkE6Om5leHRTdGF0ZSh1
bnNpZ25lZCBjdXJyZW50U3RhdGUsIGNoYXIgY2hhcmFjdGVyLCBib29sJiBvaykgY29uc3QKLXsK
LSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5zaXplKCkpOwotCi0gICAgY29uc3Qg
REZBTm9kZSYgbm9kZSA9IG1fbm9kZXNbY3VycmVudFN0YXRlXTsKLSAgICBhdXRvIG5leHROb2Rl
ID0gbm9kZS50cmFuc2l0aW9ucy5maW5kKGNoYXJhY3Rlcik7Ci0gICAgaWYgKG5leHROb2RlICE9
IG5vZGUudHJhbnNpdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gbmV4dE5vZGUtPnZhbHVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNGYWxsYmFja1Ry
YW5zaXRpb24pIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICByZXR1cm4gbm9kZS5mYWxs
YmFja1RyYW5zaXRpb247Ci0gICAgfQotICAgIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7Ci0K
LX0KLQotY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgREZBOjphY3Rpb25zKHVuc2lnbmVkIGN1cnJl
bnRTdGF0ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5zaXpl
KCkpOwotICAgIHJldHVybiBtX25vZGVzW2N1cnJlbnRTdGF0ZV0uYWN0aW9uczsKLX0KLQogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogc3RhdGljIHZvaWQg
cHJpbnRSYW5nZShib29sIGZpcnN0UmFuZ2UsIGNoYXIgcmFuZ2VTdGFydCwgY2hhciByYW5nZUVu
ZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCShyZXZpc2lv
biAxODA3MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDggQEAgcHVibGljOgogICAgIERGQSYgb3BlcmF0b3I9
KGNvbnN0IERGQSYpOwogCiAgICAgdW5zaWduZWQgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dDsgfQotICAgIC8vIElmIHRoZXJlIGlzIGEgdHJhbnNpdGlvbiB0byBhIHZhbGlkIHN0YXRlIG9u
ICJjaGFyYWN0ZXIiLCByZXR1cm4gdGhhdCBzdGF0ZSBhbmQgc2V0IG9rIHRvIHRydWUuCi0gICAg
Ly8gT3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmQgb2sgaXMgZmFs
c2UuCi0gICAgdW5zaWduZWQgbmV4dFN0YXRlKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBj
aGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBh
Y3Rpb25zKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSkgY29uc3Q7CisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgREZBTm9kZSYgbm9k
ZUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KIAogI2lmIENPTlRF
TlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIHZvaWQgZGVidWdQcmlu
dERvdCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBERkFCeXRlY29kZV9oCisjZGVmaW5lIERGQUJ5dGVjb2RlX2gK
KworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK3R5cGVkZWYgdWludDhfdCBE
RkFCeXRlY29kZTsKKworZW51bSBjbGFzcyBERkFCeXRlY29kZUluc3RydWN0aW9uIDogdWludDhf
dCB7CisKKyAgICAvLyBDaGVja1ZhbHVlIGhhcyB0d28gYXJndW1lbnRzOgorICAgIC8vIFRoZSB2
YWx1ZSB0byBjaGVjayAoMSBieXRlKSwKKyAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBpZiB0
aGUgdmFsdWVzIGFyZSBlcXVhbCAoNCBieXRlcykuCisgICAgQ2hlY2tWYWx1ZSwKKworICAgIC8v
IEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgorICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBw
ZW5kICg0IGJ5dGVzKS4KKyAgICBBcHBlbmRBY3Rpb24sCisKKyAgICAvLyBUZXJtaW5hdGUgaGFz
IG5vIGFyZ3VtZW50cy4KKyAgICBUZXJtaW5hdGUsCisKKyAgICAvLyBKdW1wIGhhcyBvbmUgYXJn
dW1lbnQ6CisgICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8gdW5jb25kaXRpb25hbGx5ICg0IGJ5
dGVzKS4KKyAgICBKdW1wLAorfTsKKworc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uKQorewor
ICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24pIHsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkNoZWNrVmFsdWU6CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICBjYXNlIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKTsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
Okp1bXA6CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBz
aXplb2YodW5zaWduZWQpOworICAgIH0KK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gREZBQnl0ZWNvZGVfaApJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkFC
eXRlY29kZUNvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkRGQS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK2lubGluZSB2b2lkIGFwcGVuZChWZWN0b3I8
REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgSW50VHlwZSB2YWx1ZSkKK3sKKyAgICBieXRlY29kZS5y
ZXNpemUoYnl0ZWNvZGUuc2l6ZSgpICsgc2l6ZW9mKEludFR5cGUpKTsKKyAgICAqcmVpbnRlcnBy
ZXRfY2FzdDxJbnRUeXBlKj4oJmJ5dGVjb2RlW2J5dGVjb2RlLnNpemUoKSAtIHNpemVvZihJbnRU
eXBlKV0pID0gdmFsdWU7Cit9CisKK2lubGluZSB2b2lkIHNldDMyQml0cyhWZWN0b3I8REZBQnl0
ZWNvZGU+JiBieXRlY29kZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHZhbHVlKQoreworICAg
ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oJmJ5dGVjb2RlW2luZGV4XSkgPSB2YWx1ZTsK
K30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVk
IGFjdGlvbikKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUs
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgYXBwZW5kPHVuc2ln
bmVkPihieXRlY29kZSwgYWN0aW9uKTsKK30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpl
bWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKK3sKKyAgICBhcHBlbmQ8REZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1
bXApOworICAgIGxpbmtSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihieXRlY29kZS5zaXpl
KCksIGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7CisgICAgYXBwZW5kPHVuc2lnbmVkPihieXRlY29k
ZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorfQorCit2b2lk
IERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2ln
bmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZSk7Cisg
ICAgYXBwZW5kPHVpbnQ4X3Q+KGJ5dGVjb2RlLCB2YWx1ZSk7CisgICAgbGlua1JlY29yZHMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGJ5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgp
KTsKKyAgICBhcHBlbmQ8dW5zaWduZWQ+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxs
IGJlIHNldCB3aGVuIGxpbmtpbmcuCit9CisKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSgpCit7CisgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVj
b2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOworfQorICAgIAordm9pZCBE
RkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRl
Y29kZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZv
ciBsaW5raW5nLgorICAgIG5vZGVTdGFydHNbaW5kZXhdID0gYnl0ZWNvZGUuc2l6ZSgpOworICAg
IAorICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBkZmEubm9kZUF0KGluZGV4KTsKKyAgICBmb3Ig
KHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykKKyAgICAgICAgZW1pdEFwcGVuZEFjdGlv
bihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisKKyAgICBieXRlY29kZS5yZXNlcnZl
Q2FwYWNpdHkoYnl0ZWNvZGUuc2l6ZSgpICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkgKiBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFs
dWUpKTsKKyAgICBsaW5rUmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobGlua1JlY29yZHMuc2l6ZSgp
ICsgbm9kZS50cmFuc2l0aW9ucy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNp
dGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCisgICAgICAgIGVtaXRDaGVja1ZhbHVlKHRyYW5zaXRp
b24ua2V5LCB0cmFuc2l0aW9uLnZhbHVlKTsKKyAgICAKKyAgICBpZiAobm9kZS5oYXNGYWxsYmFj
a1RyYW5zaXRpb24pCisgICAgICAgIGVtaXRKdW1wKG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKK30KKyAgICAKK3ZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCit7CisgICAgQVNTRVJUKCFieXRlY29kZS5zaXplKCkp
OworICAgIG5vZGVTdGFydHMucmVzaXplKGRmYS5zaXplKCkpOworICAgIAorICAgIC8vIE1ha2Ug
c3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnl0ZWNvZGUu
CisgICAgY29tcGlsZU5vZGUoYnl0ZWNvZGUsIGRmYS5yb290KCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkZmEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgIT0gZGZhLnJv
b3QoKSkKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKGJ5dGVjb2RlLCBpKTsKKyAgICB9CisKKyAg
ICAvLyBMaW5rLgorICAgIGZvciAoY29uc3QgYXV0byYgbGlua1JlY29yZCA6IGxpbmtSZWNvcmRz
KQorICAgICAgICBzZXQzMkJpdHMoYnl0ZWNvZGUsIGxpbmtSZWNvcmQuZmlyc3QsIG5vZGVTdGFy
dHNbbGlua1JlY29yZC5zZWNvbmRdKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGQUJ5dGVj
b2RlQ29tcGlsZXJfaAorI2RlZmluZSBERkFCeXRlY29kZUNvbXBpbGVyX2gKKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5o
IgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK2Ns
YXNzIERGQTsKKworY2xhc3MgREZBQnl0ZWNvZGVDb21waWxlciB7CitwdWJsaWM6CisgICAgREZB
Qnl0ZWNvZGVDb21waWxlcihjb25zdCBERkEmIGRmYSwgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0
ZWNvZGUpCisgICAgICAgIDogYnl0ZWNvZGUoYnl0ZWNvZGUpCisgICAgICAgICwgZGZhKGRmYSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZSgpOworCitwcml2YXRlOgorICAg
IHZvaWQgY29tcGlsZU5vZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYsIHVuc2lnbmVkIGluZGV4KTsK
KworICAgIHZvaWQgZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCk7CisgICAgdm9pZCBlbWl0SnVt
cCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CisgICAgdm9pZCBlbWl0Q2hlY2tWYWx1
ZSh1aW50OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CisgICAgdm9p
ZCBlbWl0VGVybWluYXRlKCk7CisKKyAgICBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZTsK
KyAgICBjb25zdCBERkEmIGRmYTsKKyAgICAKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG5vZGVTdGFy
dHM7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHZhbHVlIGlzIHRoZSBpbmRleCBpbiB0aGUgYnl0
ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1wIGlzIHRvIGJlIHdyaXR0ZW4uCisgICAgLy8gVGhl
IHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXggb2YgdGhlIG5vZGUgdG8ganVtcCB0by4KKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IGxpbmtSZWNvcmRzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8vIERG
QUJ5dGVjb2RlQ29tcGlsZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorc3RhdGljIGlubGlu
ZSBJbnRUeXBlIGdldEJpdHMoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVu
c2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnRU
eXBlKj4oJmJ5dGVjb2RlW2luZGV4XSk7Cit9CisKK0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFj
dGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmIHVy
bENTdHJpbmcpCit7CisgICAgY29uc3QgY2hhciogdXJsID0gdXJsQ1N0cmluZy5kYXRhKCk7Cisg
ICAgQVNTRVJUKHVybC5kYXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHByb2dyYW1Db3VudGVy
ID0gMDsKKyAgICB1bnNpZ25lZCB1cmxJbmRleCA9IDA7CisgICAgQWN0aW9ucyBhY3Rpb25zOwor
ICAgIAorICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgaWYgaW50ZXJwcmV0aW5n
IGNvcnJlY3RseSBjb21waWxlZCBieXRlY29kZS4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGJ5dGVjb2RlW3By
b2dyYW1Db3VudGVyXSkpIHsKKworICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlcm1pbmF0ZToKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOworCisgICAgICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZToKKyAgICAgICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVybCBpcyB0aGUgdmFsdWUgc3Rv
cmVkIHdpdGggdGhlIGJ5dGVjb2RlLgorICAgICAgICAgICAgaWYgKCF1cmxbdXJsSW5kZXhdKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOyAvLyBSZWFjaGVkIG51bGwgY2hhcmFjdGVy
IGF0IGVuZC4KKyAgICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhf
dD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpIHsKKyAg
ICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KGJ5dGVjb2Rl
LCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCkp
OworICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdl
IGluIHRoZSBERkEuCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcm9ncmFt
Q291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkNoZWNrVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
PSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGUpKTsKKyAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBh
biBlZGdlIGluIHRoZSBERkEuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKKyAgICAgICAgICAgIGFjdGlvbnMu
YWRkKHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkpOworICAgICAgICAgICAgcHJvZ3Jh
bUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEludmFs
aWQgYnl0ZWNvZGUuCisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHVybEluZGV4IDwgdXJsLmxl
bmd0aCgpKTsgLy8gV2Ugc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgYXQgYSBudWxsIGNoYXJhY3Rl
ciBhdCB0aGUgZW5kIG9mIGEgU3RyaW5nLgorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworICAgIAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcl9oCisjZGVmaW5lIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXJfaAorCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxl
LmgiCisjaW5jbHVkZSAiREZBQnl0ZWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgREZBQnl0ZWNvZGVJbnRlcnByZXRl
ciB7CitwdWJsaWM6CisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcihjb25zdCBWZWN0b3I8REZB
Qnl0ZWNvZGU+JiBieXRlY29kZSkKKyAgICAgICAgOiBieXRlY29kZShieXRlY29kZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8
dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90Pj4gQWN0aW9uczsKKyAgICAKKyAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5n
Jik7CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwor
I2VuZGlmIC8vIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXJfaAo=
</data>
<flag name="review"
          id="272423"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>