<?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>145619</bug_id>
          
          <creation_ts>2015-06-03 15:14:38 -0700</creation_ts>
          <short_desc>[Content Extensions] Implement branch compaction for DFA byte code</short_desc>
          <delta_ts>2015-06-16 15:30:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>commit-queue</cc>
    
    <cc>japhet</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1099300</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-03 15:14:38 -0700</bug_when>
    <thetext>We use lots of 0&apos;s for the high bits of jumps in the DFA byte code.  Let&apos;s compact this down.
This patch reduced the total byte code size in a large test case from 15123003 bytes to 14085291.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099308</commentid>
    <comment_count>1</comment_count>
      <attachid>254217</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-03 15:28:27 -0700</bug_when>
    <thetext>Created attachment 254217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099320</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-03 16:40:14 -0700</bug_when>
    <thetext>Int24 should be added in a following patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099981</commentid>
    <comment_count>3</comment_count>
      <attachid>254217</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-05 15:07:50 -0700</bug_when>
    <thetext>Comment on attachment 254217
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:237
&gt; +    unsigned totalBytecodeSize = 0;

Don&apos;t forget to revisit this since I landed the same thing.

&gt; Source/WebCore/contentextensions/DFABytecode.h:83
&gt; +enum DFABytecodeJumpSize {

May I suggest using exclusive bits?
ARM64 has a test-bit-and-branch instruction for those cases to avoid mask+jump.

&gt; Source/WebCore/contentextensions/DFABytecode.h:94
&gt; +    if (longestPossibleJump &lt;= std::numeric_limits&lt;int8_t&gt;::max() &amp;&amp; longestPossibleJump &gt;= std::numeric_limits&lt;int8_t&gt;::min())
&gt; +        return Int8;
&gt; +    if (longestPossibleJump &lt;= std::numeric_limits&lt;int16_t&gt;::max() &amp;&amp; longestPossibleJump &gt;= std::numeric_limits&lt;int16_t&gt;::min())
&gt; +        return Int16;

I was gonna complain about using masks instead...but actually this is way cleaner.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:64
&gt; +    *reinterpret_cast&lt;IntType*&gt;(&amp;bytecode[index]) = value;

Can we assert we have enough free space to write the value? Too slow?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:69
&gt; +    if (action &amp; 0xFFFF00000000)

Assert the top 2 bytes are zero?

Can you move 0xFFFF00000000 to a constant with a good name?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:104
&gt; +        return m_maxNodeStartOffsets[destinationNodeIndex] - jumpLocation;

This is very pessimistic. As the compaction progress, the jumpLocation drift further appart from the m_maxNodeStartOffsets of its own node.

The jump length should be the worst distance between the two nodes as computed for m_maxNodeStartOffsets - the offset since the start of the current node.
    (m_maxNodeStartOffsets[destinationNodeIndex] - m_maxNodeStartOffsets[sourceNodeIndex] - (m_nodeStartOffsets[sourceNodeIndex] - jumpLocation)).

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:114
&gt; +    uint32_t jumpLocation = m_bytecode.size() + sizeof(uint8_t);

Suggestion:
-Have the instruction offset and jumpLocation in LinkRecord.
-Do the relative jump from the instruction position instead of the relative address position.

That should remove all the +sizeof(thingy) that are scaring the hell out of me.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:128
&gt; +    append&lt;uint8_t&gt;(m_bytecode, static_cast&lt;uint8_t&gt;(caseSensitive ? DFABytecodeInstruction::CheckValueCaseSensitive : DFABytecodeInstruction::CheckValueCaseInsensitive) | jumpSize);

Can you move &quot;caseSensitive ? DFABytecodeInstruction::CheckValueCaseSensitive : DFABytecodeInstruction::CheckValueCaseInsensitive&quot; to its own temporary variable?
That line does too much.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:138
&gt; +    uint32_t jumpLocation = m_bytecode.size() + 3 * sizeof(uint8_t);

This is the kind of code I don&apos;t like regarding the base of the jumps. Too much magic.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:141
&gt; +    append&lt;uint8_t&gt;(m_bytecode, static_cast&lt;uint8_t&gt;(caseSensitive ? DFABytecodeInstruction::CheckValueRangeCaseSensitive : DFABytecodeInstruction::CheckValueRangeCaseInsensitive) | jumpSize);

Temp variable with the instruction?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:195
&gt; -    memset(destinations, 0xff, sizeof(destinations));
&gt; +    memset(destinations, 0xFF, sizeof(destinations));

WHYYYYYY.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:318
&gt; +    unsigned nextIndex = sizeof(DFAHeader) + compiledNodeMaxBytecodeSize(m_dfa.root);

I don&apos;t understand this.

Shouldn&apos;t the start offset of the root be at the offset of the header + the actions of the root?

Isn&apos;t compiledNodeMaxBytecodeSize(m_dfa.root) too far?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:319
&gt; +    m_maxNodeStartOffsets[m_dfa.root] = nextIndex;

I have the feeling this case should be split for root:

m_maxNodeStartOffsets[m_dfa.root] = offset of header + initial actions;
nextIndex += size of actions;

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:53
&gt; +// FIXME: Get rid of pagesUsed. We don&apos;t need to keep track of the pages used.

But, but, I really like it.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:205
&gt; +                    uint32_t jumpLocation = programCounter + sizeof(DFABytecodeInstruction) + sizeof(uint8_t);

jumpLocation -&gt; jumpBase? To keep the pattern destination = base + offset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102330</commentid>
    <comment_count>4</comment_count>
      <attachid>254965</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-16 13:31:03 -0700</bug_when>
    <thetext>Created attachment 254965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102334</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-16 13:39:19 -0700</bug_when>
    <thetext>I addressed everything with these notes:
(In reply to comment #3)
&gt; &gt; Source/WebCore/contentextensions/DFABytecode.h:83
&gt; &gt; +enum DFABytecodeJumpSize {
&gt; 
&gt; May I suggest using exclusive bits?
&gt; ARM64 has a test-bit-and-branch instruction for those cases to avoid
&gt; mask+jump.
Good idea, but the compiler cannot prove that this will always have a valid value in it, and it needs a default: RELEASE_ASSERT_NOT_REACHED() in case we are reading invalid byte code.  This would not improve anything.
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:318
&gt; &gt; +    unsigned nextIndex = sizeof(DFAHeader) + compiledNodeMaxBytecodeSize(m_dfa.root);
&gt; 
&gt; I don&apos;t understand this.
&gt; 
&gt; Shouldn&apos;t the start offset of the root be at the offset of the header + the
&gt; actions of the root?
&gt; 
&gt; Isn&apos;t compiledNodeMaxBytecodeSize(m_dfa.root) too far?
That&apos;s right, this is an overestimate, but the root is always compiled first so this is never an issue.  Even if it weren&apos;t compiled first, this would only be slightly pessimistic.  I don&apos;t think it&apos;s worth making the code much more complicated just to make this a little more accurate when it doesn&apos;t matter.
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:53
&gt; &gt; +// FIXME: Get rid of pagesUsed. We don&apos;t need to keep track of the pages used.
&gt; 
&gt; But, but, I really like it.
It&apos;s annoying and not even accurate ever since I made the jumps relative to the current DFA&apos;s byte code.
&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:205
&gt; &gt; +                    uint32_t jumpLocation = programCounter + sizeof(DFABytecodeInstruction) + sizeof(uint8_t);
&gt; 
&gt; jumpLocation -&gt; jumpBase? To keep the pattern destination = base + offset.
I made the jumps relative from the current program counter instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102346</commentid>
    <comment_count>6</comment_count>
      <attachid>254969</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-16 14:30:43 -0700</bug_when>
    <thetext>Created attachment 254969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102366</commentid>
    <comment_count>7</comment_count>
      <attachid>254969</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-16 15:29:59 -0700</bug_when>
    <thetext>Comment on attachment 254969
Patch

Clearing flags on attachment: 254969

Committed r185621: &lt;http://trac.webkit.org/changeset/185621&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102367</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-16 15:30:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254217</attachid>
            <date>2015-06-03 15:28:27 -0700</date>
            <delta_ts>2015-06-16 13:31:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145619-20150603152807.patch</filename>
            <type>text/plain</type>
            <size>45411</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE1LTA2LTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gSW1wbGVtZW50IGJyYW5jaCBjb21wYWN0aW9uIGZvciBERkEgYnl0ZWNvZGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU2MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYW5vdGhlciBwYXNzIHRvIHRoZSBERkFCeXRlY29kZUNvbXBpbGVyIHdoaWNoIGZp
bmRzIHdoZXJlIHRoZSBieXRlY29kZSBmcm9tIGVhY2ggbm9kZQorICAgICAgICB3b3VsZCBiZSBp
ZiBpdCB3ZXJlIGNvbXBpbGVkIHdpdGggbm8gYnJhbmNoIGNvbXBhY3Rpb24sIHRoZW4gdXNlcyB0
aGF0IGFzIGEgd29yc3QtY2FzZSB2YWx1ZSB0byBkZXRlcm1pbmUKKyAgICAgICAgaG93IG1hbnkg
Ynl0ZXMgYXJlIG5lZWRlZCB0byBzdG9yZSB0aGUgcmVsYXRpdmUganVtcCBkaXN0YW5jZS4gIFRo
ZW4gd2hlbiBsaW5raW5nLCBpdCB3aWxsIGZpbGwgaW4gdGhlIAorICAgICAgICB2YWx1ZSBhcyBp
dCBhbHJlYWR5IGRpZCwgYnV0IHdpdGggYSB2YXJpYWJsZSBzaXplIGp1bXAuICBUaGUganVtcHMg
YXJlIGFsc28gbm93IHNpZ25lZCBkaXN0YW5jZXMgcmVsYXRpdmUgdG8KKyAgICAgICAgd2hlcmUg
dGhlIGp1bXAgaXMgc3RvcmVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgY292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cywgd2hpY2ggaGF2ZSBtYW55IGp1bXBzIHRoYXQgYXJlIG5lYXIgdGhlIC0x
MjgvMTI3IGJ5dGUgYm91bmRhcnksCisgICAgICAgIGFuZCB0aGUgc3dpdGNoIGZyb20gMTYtYml0
IGp1bXBzIHRvIDMyLWJpdCBqdW1wcyBuZWFyIHRoZSAtNjU1MzYvNjU1MzUgYnl0ZSBib3VuZGFy
eSBpcyBhbmFsb2dvdXMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzbWFsbGVzdFBvc3Np
YmxlSnVtcFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBwZW5k
WmVyb2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXRCaXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBlbmRBY3Rpb25CeXRlY29k
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
Q29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6Omxvbmdlc3RQb3NzaWJsZUp1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVt
aXRKdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWVSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21w
aWxlcjo6cmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUNvbXBpbGVyOjpjaGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxl
Q2hlY2tGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVDb21waWxlcjo6bm9kZVRyYW5zaXRpb25zTWF4Qnl0ZWNvZGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpjb21w
aWxlTm9kZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpzZXQzMkJpdHMpOiBEZWxldGVkLgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpnZXRCaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpnZXRJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
anVtcFNpemVJbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpn
ZXRKdW1wU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0SnVt
cERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0
RnJvbURGQVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldCk6CisKIDIwMTUtMDYtMDMgIEh1bnNlb3AgSmVv
bmcgIDxoczg1Lmplb25nQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVzZSBtb2Rlcm4gZm9yLWxv
b3BzIGluIFdlYkNvcmUvcGFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkocmV2
aXNpb24gMTg1MDA0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCw3IEBA
IHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICBMT0dfTEFSR0Vf
U1RSVUNUVVJFUyhmaWx0ZXJzV2l0aERvbWFpbnMsIGZpbHRlcnNXaXRoRG9tYWlucy5tZW1vcnlV
c2VkKCkpOwogICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGRvbWFpbkZpbHRlcnMsIGRvbWFpbkZp
bHRlcnMubWVtb3J5VXNlZCgpKTsKIAorICAgIHVuc2lnbmVkIHRvdGFsQnl0ZWNvZGVTaXplID0g
MDsKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91
YmxlIHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CiAjZW5kaWYKQEAgLTI3Myw2ICsyNzQsNyBAQCBzdGQ6OmVycm9yX2NvZGUg
Y29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKICAg
ICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkg
KiBzaXplb2YodWludDhfdCkpOwogICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0aG91dERv
bWFpbnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKKyAgICAgICAgdG90YWxCeXRlY29k
ZVNpemUgKz0gYnl0ZWNvZGUuc2l6ZSgpOwogCiAgICAgICAgIGZpcnN0TkZBV2l0aG91dERvbWFp
bnNTZWVuID0gdHJ1ZTsKICAgICB9KTsKQEAgLTI5Miw2ICsyOTQsNyBAQCBzdGQ6OmVycm9yX2Nv
ZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsK
ICAgICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5
KCkgKiBzaXplb2YodWludDhfdCkpOwogICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0aG91
dERvbWFpbnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKKyAgICAgICAgdG90YWxCeXRl
Y29kZVNpemUgKz0gYnl0ZWNvZGUuc2l6ZSgpOwogICAgIH0KICAgICBMT0dfTEFSR0VfU1RSVUNU
VVJFUyh1bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMsIHVuaXZlcnNhbEFjdGlvbnNXaXRo
b3V0RG9tYWlucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiAgICAgdW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zLmNsZWFyKCk7CkBAIC0zMjYsNiArMzI5LDcgQEAgc3RkOjpl
cnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBjb21waWxlci5jb21w
aWxlKCk7CiAgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5j
YXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKICAgICAgICAgY2xpZW50LndyaXRlRmlsdGVy
c1dpdGhEb21haW5zQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7CisgICAgICAgIHRvdGFs
Qnl0ZWNvZGVTaXplICs9IGJ5dGVjb2RlLnNpemUoKTsKICAgICAgICAgCiAgICAgICAgIGZpcnN0
TkZBV2l0aERvbWFpbnNTZWVuID0gdHJ1ZTsKICAgICB9KTsKQEAgLTM0NSw2ICszNDksNyBAQCBz
dGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIGNvbXBpbGVy
LmNvbXBpbGUoKTsKICAgICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVj
b2RlLmNhcGFjaXR5KCkgKiBzaXplb2YodWludDhfdCkpOwogICAgICAgICBjbGllbnQud3JpdGVG
aWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKKyAgICAgICAg
dG90YWxCeXRlY29kZVNpemUgKz0gYnl0ZWNvZGUuc2l6ZSgpOwogICAgIH0KICAgICBMT0dfTEFS
R0VfU1RSVUNUVVJFUyh1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMsIHVuaXZlcnNhbEFjdGlv
bnNXaXRoRG9tYWlucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiAgICAgdW5pdmVy
c2FsQWN0aW9uc1dpdGhEb21haW5zLmNsZWFyKCk7CkBAIC0zNzAsMTIgKzM3NSwxNCBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIGNvbXBpbGVyLmNv
bXBpbGUoKTsKICAgICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2Rl
LmNhcGFjaXR5KCkgKiBzaXplb2YodWludDhfdCkpOwogICAgICAgICBjbGllbnQud3JpdGVEb21h
aW5GaWx0ZXJzQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7CisgICAgICAgIHRvdGFsQnl0
ZWNvZGVTaXplICs9IGJ5dGVjb2RlLnNpemUoKTsKICAgICB9KTsKICAgICBBU1NFUlQoZG9tYWlu
RmlsdGVycy5pc0VtcHR5KCkpOyAgICAKICAgICAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVS
Rk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91YmxlIHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGlt
ZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogICAgIGRhdGFMb2dGKCIgICAg
VGltZSBzcGVudCBidWlsZGluZyBhbmQgY29tcGlsaW5nIHRoZSBERkFzOiAlZlxuIiwgKHRvdGFs
TkZBVG9CeXRlQ29kZUJ1aWxkVGltZUVuZCAtIHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGltZVN0
YXJ0KSk7CisgICAgZGF0YUxvZ0YoIiAgICBUb3RhbCBieXRlY29kZSBzaXplICVkXG4iLCB0b3Rh
bEJ5dGVjb2RlU2l6ZSk7CiAjZW5kaWYKIAogICAgIGNsaWVudC5maW5hbGl6ZSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShyZXZp
c2lvbiAxODQ5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw0NiArNDEsNjkgQEAgZW51bSBjbGFzcyBERkFC
eXRlY29kZUluc3RydWN0aW9uIDogdWludAogCiAgICAgLy8gQ2hlY2tWYWx1ZSBoYXMgdHdvIGFy
Z3VtZW50czoKICAgICAvLyBUaGUgdmFsdWUgdG8gY2hlY2sgKDEgYnl0ZSksCi0gICAgLy8gVGhl
IGluZGV4IHRvIGp1bXAgdG8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwgKDQgYnl0ZXMpLgotICAg
IENoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmUsCi0gICAgQ2hlY2tWYWx1ZUNhc2VTZW5zaXRpdmUs
CisgICAgLy8gVGhlIGRpc3RhbmNlIHRvIGp1bXAgZnJvbSB3aGVyZSB0aGUgZGlzdGFuY2UgaXMg
c3RvcmVkIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsICgxLTQgYnl0ZXMsIHNpZ25lZCkuCisgICAg
Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSA9IDB4MCwKKyAgICBDaGVja1ZhbHVlQ2FzZVNlbnNp
dGl2ZSA9IDB4MSwKIAogICAgIC8vIEp1bXAgdG8gYW4gb2Zmc2V0IGlmIHRoZSBpbnB1dCB2YWx1
ZSBpcyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlLgogICAgIC8vIFRoZSBsb3dlciB2YWx1ZSAoMSBi
eXRlKS4KICAgICAvLyBUaGUgaGlnaGVyIHZhbHVlICgxIGJ5dGUpLgotICAgIC8vIFRoZSBpbmRl
eCB0byBqdW1wIHRvIGlmIHRoZSB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgKDQgYnl0ZXMpLgotICAg
IENoZWNrVmFsdWVSYW5nZUNhc2VJbnNlbnNpdGl2ZSwKLSAgICBDaGVja1ZhbHVlUmFuZ2VDYXNl
U2Vuc2l0aXZlLAorICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wIGZyb20gd2hlcmUgdGhlIGRp
c3RhbmNlIGlzIHN0b3JlZCBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdlICgxLTQgYnl0ZXMs
IHNpZ25lZCkuCisgICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlID0gMHgyLAorICAg
IENoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRpdmUgPSAweDMsCiAKICAgICAvLyBBcHBlbmRBY3Rp
b24gaGFzIG9uZSBhcmd1bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRl
cykuCi0gICAgQXBwZW5kQWN0aW9uLAotICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0
LAotICAgIEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiwKKyAgICBBcHBlbmRBY3Rpb24gPSAweDQs
CisgICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQgPSAweDUsCisgICAgQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluID0gMHg2LAogICAgIAogICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKICAgICAvLyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3Jl
IGFwcGVuZGluZyAoMiBieXRlcykuCiAgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0
ZXMpLgotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiwKLSAgICBUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW4sCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg3
LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4OCwKIAogICAg
IC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRzLgotICAgIFRlcm1pbmF0ZSwKKyAgICBUZXJt
aW5hdGUgPSAweDksCiAKICAgICAvLyBKdW1wIGhhcyBvbmUgYXJndW1lbnQ6Ci0gICAgLy8gVGhl
IGluZGV4IHRvIGp1bXAgdG8gdW5jb25kaXRpb25hbGx5ICg0IGJ5dGVzKS4KLSAgICBKdW1wLAor
ICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wIGZyb20gd2hlcmUgdGhlIGRpc3RhbmNlIGlzIHN0
b3JlZCAoMS00IGJ5dGVzLCBzaWduZWQpLgorICAgIEp1bXAgPSAweEEsCiB9OwogCisvLyBUaGUg
bGFzdCBmb3VyIGJpdHMgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24gdHlwZS4KK2NvbnN0IHVpbnQ4
X3QgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbk1hc2sgPSAweDBGOworY29uc3QgdWludDhfdCBERkFC
eXRlY29kZUp1bXBTaXplTWFzayA9IDB4RjA7CisKKy8vIERGQSBieXRlY29kZSBzdGFydHMgd2l0
aCBhIDQgYnl0ZSBoZWFkZXIgd2hpY2ggY29udGFpbnMgdGhlIHNpemUgb2YgdGhpcyBERkEuCit0
eXBlZGVmIHVpbnQzMl90IERGQUhlYWRlcjsKKworLy8gQSBERkFCeXRlY29kZUp1bXBTaXplIGlz
IHN0b3JlZCBpbiB0aGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bnMgdGhhdCBoYXZlIGEganVtcC4KK2VudW0gREZBQnl0ZWNvZGVKdW1wU2l6ZSB7CisgICAgSW50
OCA9IDB4MTAsCisgICAgSW50MTYgPSAweDIwLAorICAgIEludDMyID0gMHgzMCwKK307CisKK3N0
YXRpYyBpbmxpbmUgREZBQnl0ZWNvZGVKdW1wU2l6ZSBzbWFsbGVzdFBvc3NpYmxlSnVtcFNpemUo
aW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wKQoreworICAgIGlmIChsb25nZXN0UG9zc2libGVK
dW1wIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkgJiYgbG9uZ2VzdFBvc3Np
YmxlSnVtcCA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpKQorICAgICAgICBy
ZXR1cm4gSW50ODsKKyAgICBpZiAobG9uZ2VzdFBvc3NpYmxlSnVtcCA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDE2X3Q+OjptYXgoKSAmJiBsb25nZXN0UG9zc2libGVKdW1wID49IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MTZfdD46Om1pbigpKQorICAgICAgICByZXR1cm4gSW50MTY7CisgICAg
cmV0dXJuIEludDMyOworfQorICAgIAogc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uKQogewog
ICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24pIHsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlOgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MzJf
dCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNl
U2Vuc2l0aXZlOgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJh
bmdlQ2FzZUluc2Vuc2l0aXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVp
bnQzMl90KTsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFZhcmlhYmxlIGluc3RydWN0aW9uIHNp
emUuCiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246CiAgICAg
Y2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVl
dDoKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRv
bWFpbjoKQEAgLTkwLDggKzExMyw2IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZVdpdGgKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSAr
IHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpOwogICAgIGNhc2UgREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24pOwotICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1
aW50MzJfdCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHJldmlzaW9u
IDE4NDk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMzQgQEAgaW5saW5lIHZv
aWQgYXBwZW5kKFZlY3RvcjxERkFCeXRlY29kZT4mIAogICAgICpyZWludGVycHJldF9jYXN0PElu
dFR5cGUqPigmYnl0ZWNvZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5cGUpXSkgPSB2
YWx1ZTsKIH0KIAotaW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5
dGVjb2RlLCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgdmFsdWUpCitpbmxpbmUgdm9pZCBhcHBl
bmRaZXJvZXMoVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSnVtcFNp
emUganVtcFNpemUpCiB7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmYnl0ZWNv
ZGVbaW5kZXhdKSA9IHZhbHVlOworICAgIHN3aXRjaCAoanVtcFNpemUpIHsKKyAgICBjYXNlIERG
QUJ5dGVjb2RlSnVtcFNpemU6OkludDg6CisgICAgICAgIGFwcGVuZDxpbnQ4X3Q+KGJ5dGVjb2Rl
LCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50MTY6CisgICAgICAgIGFwcGVu
ZDxpbnQxNl90PihieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBs
aW5raW5nLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSnVtcFNpemU6Oklu
dDMyOgorICAgICAgICBhcHBlbmQ8aW50MzJfdD4oYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZhbHVl
IHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK2lubGluZSB2b2lkIHNldEJpdHMoVmVjdG9yPERG
QUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVpbnQzMl90IGluZGV4LCBJbnRUeXBlIHZhbHVlKQorewor
ICAgICpyZWludGVycHJldF9jYXN0PEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVl
OwogfQogCitzdGF0aWMgdW5zaWduZWQgYXBwZW5kQWN0aW9uQnl0ZWNvZGVTaXplKHVpbnQ2NF90
IGFjdGlvbikKK3sKKyAgICBpZiAoYWN0aW9uICYgMHhGRkZGMDAwMDAwMDApCisgICAgICAgIHJl
dHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDE2X3QpICsg
c2l6ZW9mKHVpbnQzMl90KTsKKyAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pICsgc2l6ZW9mKHVpbnQzMl90KTsKK30KKyAgICAKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxl
cjo6ZW1pdEFwcGVuZEFjdGlvbih1aW50NjRfdCBhY3Rpb24pCiB7CiAgICAgLy8gSGlnaCBiaXRz
IGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0LgpAQCAtNzEsMzAg
Kzk0LDU1IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKICAgICB9
CiB9CiAKK2ludDMyX3QgREZBQnl0ZWNvZGVDb21waWxlcjo6bG9uZ2VzdFBvc3NpYmxlSnVtcCh1
aW50MzJfdCBqdW1wTG9jYXRpb24sIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KQorewor
ICAgIGlmIChtX25vZGVTdGFydE9mZnNldHNbZGVzdGluYXRpb25Ob2RlSW5kZXhdID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgeworICAgICAgICAvLyBKdW1waW5nIHRv
IGEgbm9kZSB0aGF0IGhhc24ndCBiZWVuIGNvbXBpbGVkIHlldCwgd2UgZG9uJ3Qga25vdyBleGFj
dGx5IGhvdyBmYXIgZm9yd2FyZCB3ZSB3aWxsIG5lZWQgdG8ganVtcCwKKyAgICAgICAgLy8gc28g
bWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20gZm9yIHRoZSB3b3JzdCBwb3NzaWJsZSBjYXNl
LCB0aGUgZmFydGhlc3QgcG9zc2libGUganVtcAorICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSB0
aGUgZGlzdGFuY2UgaWYgdGhlcmUgd2VyZSBubyBjb21wYWN0ZWQgYnJhbmNoZXMgYmV0d2VlbiB0
aGlzIGp1bXAgYW5kIGl0cyBkZXN0aW5hdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fbWF4Tm9kZVN0
YXJ0T2Zmc2V0c1tkZXN0aW5hdGlvbk5vZGVJbmRleF0gPiBqdW1wTG9jYXRpb24pOworICAgICAg
ICByZXR1cm4gbV9tYXhOb2RlU3RhcnRPZmZzZXRzW2Rlc3RpbmF0aW9uTm9kZUluZGV4XSAtIGp1
bXBMb2NhdGlvbjsKKyAgICB9CisgICAgCisgICAgLy8gSnVtcGluZyB0byBhbiBhbHJlYWR5IGNv
bXBpbGVkIG5vZGUsIHdlIGFscmVhZHkga25vdyBleGFjdGx5IHdoZXJlIHdlIHdpbGwgbmVlZCB0
byBqdW1wIHRvLgorICAgIEFTU0VSVChtX25vZGVTdGFydE9mZnNldHNbZGVzdGluYXRpb25Ob2Rl
SW5kZXhdIDwganVtcExvY2F0aW9uKTsKKyAgICByZXR1cm4gbV9ub2RlU3RhcnRPZmZzZXRzW2Rl
c3RpbmF0aW9uTm9kZUluZGV4XSAtIGp1bXBMb2NhdGlvbjsKK30KKyAgICAKIHZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6ZW1pdEp1bXAodWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpCiB7
Ci0gICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246Okp1bXApOwotICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5vZGVJbmRleCkpOwotICAgIGFw
cGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQg
d2hlbiBsaW5raW5nLgorICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6
ZSgpICsgc2l6ZW9mKHVpbnQ4X3QpOworICAgIGludDMyX3QgbG9uZ2VzdFBvc3NpYmxlSnVtcERp
c3RhbmNlID0gbG9uZ2VzdFBvc3NpYmxlSnVtcChqdW1wTG9jYXRpb24sIGRlc3RpbmF0aW9uTm9k
ZUluZGV4KTsKKyAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gc21hbGxlc3RQb3Nz
aWJsZUp1bXBTaXplKGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSk7CisgICAgYXBwZW5kPHVp
bnQ4X3Q+KG1fYnl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246Okp1bXApIHwganVtcFNpemUpOworCisgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoTGlu
a1JlY29yZCh7anVtcFNpemUsIGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSwganVtcExvY2F0
aW9uLCBkZXN0aW5hdGlvbk5vZGVJbmRleH0pKTsKKyAgICBhcHBlbmRaZXJvZXMobV9ieXRlY29k
ZSwganVtcFNpemUpOwogfQogCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1Zh
bHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNh
c2VTZW5zaXRpdmUpCiB7Ci0gICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0
ZWNvZGUsIGNhc2VTZW5zaXRpdmUgPyBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVl
Q2FzZVNlbnNpdGl2ZSA6IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlSW5z
ZW5zaXRpdmUpOworICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgp
ICsgMiAqIHNpemVvZih1aW50OF90KTsKKyAgICBpbnQzMl90IGxvbmdlc3RQb3NzaWJsZUp1bXBE
aXN0YW5jZSA9IGxvbmdlc3RQb3NzaWJsZUp1bXAoanVtcExvY2F0aW9uLCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCk7CisgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IHNtYWxsZXN0UG9z
c2libGVKdW1wU2l6ZShsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UpOworICAgIGFwcGVuZDx1
aW50OF90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50OF90PihjYXNlU2Vuc2l0aXZlID8g
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VTZW5zaXRpdmUgOiBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlKSB8IGp1bXBTaXplKTsK
ICAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwgdmFsdWUpOwotICAgIG1fbGlua1JlY29y
ZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCkpOwotICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMg
dmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgIG1fbGlua1JlY29yZHMuYXBwZW5k
KExpbmtSZWNvcmQoe2p1bXBTaXplLCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UsIGp1bXBM
b2NhdGlvbiwgZGVzdGluYXRpb25Ob2RlSW5kZXh9KSk7CisgICAgYXBwZW5kWmVyb2VzKG1fYnl0
ZWNvZGUsIGp1bXBTaXplKTsKIH0KIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hl
Y2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1aW50MzJf
dCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobG93VmFsdWUgPCBoaWdoVmFsdWUsICJUaGUgaW5zdHJ1Y3Rpb24gc2Vt
YW50aWMgaW1wb3NlIGxvd1ZhbHVlIGlzIHN0cmljdGx5IGxlc3MgdGhhbiBoaWdoVmFsdWUuIik7
CiAKLSAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgY2FzZVNl
bnNpdGl2ZSA/IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VTZW5z
aXRpdmUgOiBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5z
aXRpdmUpOworICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpICsg
MyAqIHNpemVvZih1aW50OF90KTsKKyAgICBpbnQzMl90IGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0
YW5jZSA9IGxvbmdlc3RQb3NzaWJsZUp1bXAoanVtcExvY2F0aW9uLCBkZXN0aW5hdGlvbk5vZGVJ
bmRleCk7CisgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IHNtYWxsZXN0UG9zc2li
bGVKdW1wU2l6ZShsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UpOworICAgIGFwcGVuZDx1aW50
OF90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50OF90PihjYXNlU2Vuc2l0aXZlID8gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZVNlbnNpdGl2ZSA6IERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VJbnNlbnNpdGl2ZSkgfCBqdW1w
U2l6ZSk7CiAgICAgYXBwZW5kPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIGxvd1ZhbHVlKTsKICAgICBh
cHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwgaGlnaFZhbHVlKTsKLSAgICBtX2xpbmtSZWNvcmRz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX2J5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2Rl
SW5kZXgpKTsKLSAgICBhcHBlbmQ8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZh
bHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChM
aW5rUmVjb3JkKHtqdW1wU2l6ZSwgbG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlLCBqdW1wTG9j
YXRpb24sIGRlc3RpbmF0aW9uTm9kZUluZGV4fSkpOworICAgIGFwcGVuZFplcm9lcyhtX2J5dGVj
b2RlLCBqdW1wU2l6ZSk7CiB9CiAKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlcm1p
bmF0ZSgpCkBAIC0xMDQsOSArMTUyLDExIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSgKIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1aW50
MzJfdCBpbmRleCwgYm9vbCByb290KQogeworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9IG1fYnl0
ZWNvZGUuc2l6ZSgpOworICAgIAogICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2Rl
c1tpbmRleF07CiAgICAgaWYgKG5vZGUuaXNLaWxsZWQoKSkgewotICAgICAgICBtX25vZGVTdGFy
dE9mZnNldHNbaW5kZXhdID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
ICAgICAgICBBU1NFUlQobV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MjMsMTIgKzE3MywyNiBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVp
CiAgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVjb2RlLnNpemUoKTsK
ICAgICAKICAgICBjb21waWxlTm9kZVRyYW5zaXRpb25zKG5vZGUpOworICAgIAorICAgIEFTU0VS
VF9VTlVTRUQoc3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBjb21w
aWxlZE5vZGVNYXhCeXRlY29kZVNpemUoaW5kZXgpKTsKK30KKyAgICAKK3Vuc2lnbmVkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6ZSh1aW50MzJfdCBpbmRl
eCkKK3sKKyAgICBjb25zdCBERkFOb2RlJiBub2RlID0gbV9kZmEubm9kZXNbaW5kZXhdOworICAg
IGlmIChub2RlLmlzS2lsbGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIHNp
emUgPSAwOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKG1fZGZhKSkK
KyAgICAgICAgc2l6ZSArPSBhcHBlbmRBY3Rpb25CeXRlY29kZVNpemUoYWN0aW9uKTsKKyAgICBz
aXplICs9IG5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShub2RlKTsKKyAgICByZXR1cm4g
c2l6ZTsKIH0KIAotdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYW5zaXRp
b25zKGNvbnN0IERGQU5vZGUmIG5vZGUpCitWZWN0b3I8REZBQnl0ZWNvZGVDb21waWxlcjo6UmFu
Z2U+IERGQUJ5dGVjb2RlQ29tcGlsZXI6OnJhbmdlcyhjb25zdCBERkFOb2RlJiBub2RlKQogewog
ICAgIHVpbnQzMl90IGRlc3RpbmF0aW9uc1sxMjhdOwotICAgIG1lbXNldChkZXN0aW5hdGlvbnMs
IDB4ZmYsIHNpemVvZihkZXN0aW5hdGlvbnMpKTsKKyAgICBtZW1zZXQoZGVzdGluYXRpb25zLCAw
eEZGLCBzaXplb2YoZGVzdGluYXRpb25zKSk7CiAgICAgY29uc3QgdWludDMyX3Qgbm9EZXN0aW5h
dGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAogICAgIGZvciAo
Y29uc3QgYXV0byYgcGFpciA6IG5vZGUudHJhbnNpdGlvbnMobV9kZmEpKSB7CkBAIC0xODcsMTcg
KzI1MSwxOSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhCiAgICAg
ICAgIC8vIElmIGEgcmFuZ2UgZ29lcyB0byAxMjcsIHRoZXJlIHdpbGwgbmV2ZXIgYmUgdmFsdWVz
IGhpZ2hlciB0aGFuIGl0LCBzbyBjaGVja2luZyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSByYW5nZXMg
d291bGQgYWx3YXlzIGZhaWwuCiAgICAgICAgIHJhbmdlcy5hcHBlbmQoUmFuZ2UocmFuZ2VNaW4s
IDEyNywgZGVzdGluYXRpb25zW3JhbmdlTWluXSwgdHJ1ZSkpOwogICAgIH0KLQotICAgIGZvciAo
Y29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpCi0gICAgICAgIGNvbXBpbGVDaGVja0ZvclJhbmdl
KHJhbmdlKTsKLSAgICBpZiAobm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24oKSkKLSAgICAgICAg
ZW1pdEp1bXAobm9kZS5mYWxsYmFja1RyYW5zaXRpb25EZXN0aW5hdGlvbihtX2RmYSkpOwotICAg
IGVsc2UKLSAgICAgICAgZW1pdFRlcm1pbmF0ZSgpOworICAgIHJldHVybiByYW5nZXM7Cit9Cisg
ICAgCit1bnNpZ25lZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjaGVja0ZvclJhbmdlTWF4Qnl0ZWNv
ZGVTaXplKGNvbnN0IFJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UubWluID09IHJhbmdl
Lm1heCkKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVj
a1ZhbHVlQ2FzZUluc2Vuc2l0aXZlKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MzJf
dCk7CisgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVl
UmFuZ2VDYXNlSW5zZW5zaXRpdmUpICsgMiAqIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50
MzJfdCk7CiB9CiAKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZUNoZWNrRm9yUmFu
Z2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogeworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9IG1fYnl0
ZWNvZGUuc2l6ZSgpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmFuZ2UubWF4IDwgMTI4LCAi
VGhlIERGQSBlbmdpbmUgb25seSBzdXBwb3J0cyB0aGUgQVNDSUkgYWxwaGFiZXQuIik7CiAgICAg
QVNTRVJUKHJhbmdlLm1pbiA8PSByYW5nZS5tYXgpOwogCkBAIC0yMDUsMTQgKzI3MSw1OCBAQCB2
b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVDaGVja0ZvCiAgICAgICAgIGVtaXRDaGVj
a1ZhbHVlKHJhbmdlLm1pbiwgcmFuZ2UuZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5zaXRpdmUp
OwogICAgIGVsc2UKICAgICAgICAgZW1pdENoZWNrVmFsdWVSYW5nZShyYW5nZS5taW4sIHJhbmdl
Lm1heCwgcmFuZ2UuZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5zaXRpdmUpOworICAgIAorICAg
IEFTU0VSVF9VTlVTRUQoc3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8
PSBjaGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKHJhbmdlKSk7Cit9CisKK3Vuc2lnbmVkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6Om5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShjb25zdCBE
RkFOb2RlJiBub2RlKQoreworICAgIHVuc2lnbmVkIHNpemUgPSAwOworICAgIGZvciAoY29uc3Qg
YXV0byYgcmFuZ2UgOiByYW5nZXMobm9kZSkpCisgICAgICAgIHNpemUgKz0gY2hlY2tGb3JSYW5n
ZU1heEJ5dGVjb2RlU2l6ZShyYW5nZSk7CisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0
aW9uKCkpCisgICAgICAgIHNpemUgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1
bXApICsgc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBlbHNlCisgICAgICAgIHNpemUgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUp
OworICAgIHJldHVybiBzaXplOworfQorCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGVOb2RlVHJhbnNpdGlvbnMoY29uc3QgREZBTm9kZSYgbm9kZSkKK3sKKyAgICB1bnNpZ25lZCBz
dGFydFNpemUgPSBtX2J5dGVjb2RlLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHJhbmdlIDogcmFuZ2VzKG5vZGUpKQorICAgICAgICBjb21waWxlQ2hlY2tGb3JSYW5nZShyYW5n
ZSk7CisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKCkpCisgICAgICAgIGVtaXRK
dW1wKG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uRGVzdGluYXRpb24obV9kZmEpKTsKKyAgICBlbHNl
CisgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKKworICAgIEFTU0VSVF9VTlVTRUQoc3RhcnRTaXpl
LCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBub2RlVHJhbnNpdGlvbnNNYXhCeXRl
Y29kZVNpemUobm9kZSkpOwogfQogCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUo
KQogewotICAgIC8vIERGQSBoZWFkZXIuCiAgICAgdWludDMyX3Qgc3RhcnRMb2NhdGlvbiA9IG1f
Ynl0ZWNvZGUuc2l6ZSgpOwotICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7Cisg
ICAgYXBwZW5kPERGQUhlYWRlcj4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgd2lsbCBiZSBzZXQg
d2hlbiB3ZSBhcmUgZmluaXNoZWQgY29tcGlsaW5nIHRoaXMgREZBLgorCiAgICAgbV9ub2RlU3Rh
cnRPZmZzZXRzLnJlc2l6ZShtX2RmYS5ub2Rlcy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2RmYS5ub2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ub2RlU3RhcnRP
ZmZzZXRzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgIAor
ICAgIC8vIFBvcHVsYXRlIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cyB3aXRoIGEgd29yc3QtY2FzZSBp
bmRleCBvZiB3aGVyZSB0aGUgbm9kZSB3b3VsZCBiZSB3aXRoIG5vIGJyYW5jaCBjb21wYWN0aW9u
LgorICAgIC8vIENvbXBhY3RpbmcgdGhlIGJyYW5jaGVzIHVzaW5nIDEtNCBieXRlIHNpZ25lZCBq
dW1wIGRpc3RhbmNlcyBzaG91bGQgb25seSBtYWtlIG5vZGVzIGNsb3NlciB0b2dldGhlciB0aGFu
IHRoaXMuCisgICAgQVNTRVJUKG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cy5pc0VtcHR5KCkpOworICAg
IG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cy5jbGVhcigpOworICAgIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0
cy5yZXNpemUobV9kZmEubm9kZXMuc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBz
aXplb2YoREZBSGVhZGVyKSArIGNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6ZShtX2RmYS5yb290
KTsKKyAgICBtX21heE5vZGVTdGFydE9mZnNldHNbbV9kZmEucm9vdF0gPSBuZXh0SW5kZXg7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fZGZhLm5vZGVzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChpICE9IG1fZGZhLnJvb3QpIHsKKyAgICAgICAgICAgIG1fbWF4Tm9kZVN0YXJ0
T2Zmc2V0c1tpXSA9IG5leHRJbmRleDsKKyAgICAgICAgICAgIG5leHRJbmRleCArPSBjb21waWxl
ZE5vZGVNYXhCeXRlY29kZVNpemUoaSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgLy8g
TWFrZSBzdXJlIHRoZSByb290IGlzIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRl
Y29kZS4KICAgICBjb21waWxlTm9kZShtX2RmYS5yb290LCB0cnVlKTsKQEAgLTIyMCwxOSArMzMw
LDM2IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgICAgIGlmIChp
ICE9IG1fZGZhLnJvb3QpCiAgICAgICAgICAgICBjb21waWxlTm9kZShpLCBmYWxzZSk7CiAgICAg
fQorICAgIAorICAgIEFTU0VSVChtX21heE5vZGVTdGFydE9mZnNldHMuc2l6ZSgpID09IG1fbm9k
ZVN0YXJ0T2Zmc2V0cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rm
YS5ub2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9ub2RlU3RhcnRPZmZzZXRzW2ld
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIEFT
U0VSVChtX21heE5vZGVTdGFydE9mZnNldHNbaV0gPj0gbV9ub2RlU3RhcnRPZmZzZXRzW2ldKTsK
KyAgICB9CiAKICAgICAvLyBMaW5rLgogICAgIGZvciAoY29uc3QgYXV0byYgbGlua1JlY29yZCA6
IG1fbGlua1JlY29yZHMpIHsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gbGlua1JlY29yZC5m
aXJzdDsKLSAgICAgICAgQVNTRVJUKCEoKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmbV9i
eXRlY29kZVtvZmZzZXRdKSkpOwotCi0gICAgICAgIHVpbnQzMl90IHRhcmdldCA9IG1fbm9kZVN0
YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29uZF07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRh
cmdldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOwotICAgICAgICBz
ZXQzMkJpdHMobV9ieXRlY29kZSwgb2Zmc2V0LCBtX25vZGVTdGFydE9mZnNldHNbbGlua1JlY29y
ZC5zZWNvbmRdKTsKKyAgICAgICAgdWludDMyX3QgZGVzdGluYXRpb24gPSBtX25vZGVTdGFydE9m
ZnNldHNbbGlua1JlY29yZC5kZXN0aW5hdGlvbk5vZGVJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGRlc3RpbmF0aW9uIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
OworICAgICAgICBpbnQzMl90IGRpc3RhbmNlID0gZGVzdGluYXRpb24gLSBsaW5rUmVjb3JkLmp1
bXBMb2NhdGlvbjsKKyAgICAgICAgQVNTRVJUKGFicyhkaXN0YW5jZSkgPD0gYWJzKGxpbmtSZWNv
cmQubG9uZ2VzdFBvc3NpYmxlSnVtcCkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChsaW5r
UmVjb3JkLmp1bXBTaXplKSB7CisgICAgICAgIGNhc2UgSW50ODoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGRpc3RhbmNlID09IHN0YXRpY19jYXN0PGludDhfdD4oZGlzdGFuY2UpKTsKKyAg
ICAgICAgICAgIHNldEJpdHM8aW50OF90PihtX2J5dGVjb2RlLCBsaW5rUmVjb3JkLmp1bXBMb2Nh
dGlvbiwgc3RhdGljX2Nhc3Q8aW50OF90PihkaXN0YW5jZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50MTY6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaXN0YW5j
ZSA9PSBzdGF0aWNfY2FzdDxpbnQxNl90PihkaXN0YW5jZSkpOworICAgICAgICAgICAgc2V0Qml0
czxpbnQxNl90PihtX2J5dGVjb2RlLCBsaW5rUmVjb3JkLmp1bXBMb2NhdGlvbiwgc3RhdGljX2Nh
c3Q8aW50MTZfdD4oZGlzdGFuY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICAgICAgc2V0Qml0czxpbnQzMl90PihtX2J5dGVjb2RlLCBsaW5rUmVj
b3JkLmp1bXBMb2NhdGlvbiwgZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgLy8gU2V0IHNpemUgaGVhZGVyLgotICAgIHNldDMyQml0cyht
X2J5dGVjb2RlLCBzdGFydExvY2F0aW9uLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0TG9jYXRp
b24pOworICAgIHNldEJpdHM8REZBSGVhZGVyPihtX2J5dGVjb2RlLCBzdGFydExvY2F0aW9uLCBt
X2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0TG9jYXRpb24pOwogfQogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHJldmlzaW9uIDE4NDk4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdWlu
dDMyX3QgZGVzdGluYXRpb247CiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZTsKICAgICB9Owot
ICAgIHZvaWQgY29tcGlsZU5vZGUodWludDMyX3QsIGJvb2wgcm9vdCk7CisgICAgVmVjdG9yPFJh
bmdlPiByYW5nZXMoY29uc3QgREZBTm9kZSYpOworICAgIAorICAgIHVuc2lnbmVkIGNvbXBpbGVk
Tm9kZU1heEJ5dGVjb2RlU2l6ZSh1aW50MzJfdCBpbmRleCk7CisgICAgdm9pZCBjb21waWxlTm9k
ZSh1aW50MzJfdCBpbmRleCwgYm9vbCByb290KTsKKyAgICB1bnNpZ25lZCBub2RlVHJhbnNpdGlv
bnNNYXhCeXRlY29kZVNpemUoY29uc3QgREZBTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU5vZGVU
cmFuc2l0aW9ucyhjb25zdCBERkFOb2RlJik7CisgICAgdW5zaWduZWQgY2hlY2tGb3JSYW5nZU1h
eEJ5dGVjb2RlU2l6ZShjb25zdCBSYW5nZSYpOwogICAgIHZvaWQgY29tcGlsZUNoZWNrRm9yUmFu
Z2UoY29uc3QgUmFuZ2UmKTsKKyAgICBpbnQzMl90IGxvbmdlc3RQb3NzaWJsZUp1bXAodWludDMy
X3QganVtcExvY2F0aW9uLCB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAKICAgICB2
b2lkIGVtaXRBcHBlbmRBY3Rpb24odWludDY0X3QpOwogICAgIHZvaWQgZW1pdEp1bXAodWludDMy
X3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwpAQCAtNzUsMTEgKzgxLDE2IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPERGQUJ5dGVjb2RlPiYgbV9ieXRlY29kZTsKICAgICBjb25zdCBERkEmIG1fZGZh
OwogICAgIAorICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9tYXhOb2RlU3RhcnRPZmZzZXRzOwogICAg
IFZlY3Rvcjx1aW50MzJfdD4gbV9ub2RlU3RhcnRPZmZzZXRzOwogICAgIAotICAgIC8vIFRoZSBm
aXJzdCB2YWx1ZSBpcyB0aGUgaW5kZXggaW4gdGhlIGJ5dGVjb2RlIGJ1ZmZlciB3aGVyZSB0aGUg
anVtcCBpcyB0byBiZSB3cml0dGVuLgotICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIGlu
ZGV4IG9mIHRoZSBub2RlIHRvIGp1bXAgdG8uCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJf
dCwgdWludDMyX3Q+PiBtX2xpbmtSZWNvcmRzOworICAgIHN0cnVjdCBMaW5rUmVjb3JkIHsKKyAg
ICAgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZTsKKyAgICAgICAgaW50MzJfdCBsb25n
ZXN0UG9zc2libGVKdW1wOworICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb247CisgICAgICAg
IHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4OworICAgIH07CisgICAgVmVjdG9yPExpbmtS
ZWNvcmQ+IG1fbGlua1JlY29yZHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4NTA3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5
cGU+Ci1zdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCeXRlY29kZSogYnl0
ZWNvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3RoLCB1bnNpZ25lZCBpbmRleCwgVmVjdG9yPGJv
b2w+JiBwYWdlc1VzZWQpCitzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFC
eXRlY29kZSogYnl0ZWNvZGUsIHVpbnQzMl90IGJ5dGVjb2RlTGVuZ3RoLCB1aW50MzJfdCBpbmRl
eCwgVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpCiB7CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX01F
TU9SWV9SRVBPUlRJTkcKLSAgICB1bnNpZ25lZCBwYWdlID0gaW5kZXggLyBDT05URU5UX0VYVEVO
U0lPTlNfUEFHRV9TSVpFOworICAgIHVpbnQzMl90IHBhZ2UgPSBpbmRleCAvIENPTlRFTlRfRVhU
RU5TSU9OU19QQUdFX1NJWkU7CiAgICAgd2hpbGUgKHBhZ2VzVXNlZC5zaXplKCkgPCAoYnl0ZWNv
ZGVMZW5ndGggKyBDT05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFIC0gMSkgLyBDT05URU5UX0VY
VEVOU0lPTlNfUEFHRV9TSVpFKQogICAgICAgICBwYWdlc1VzZWQuYXBwZW5kKGZhbHNlKTsKICAg
ICBwYWdlc1VzZWRbcGFnZV0gPSB0cnVlOwpAQCAtNDksMjMgKzQ5LDY0IEBAIHN0YXRpYyBpbmxp
bmUgSW50VHlwZSBnZXRCaXRzKGNvbnN0IERGQUIKICAgICBBU1NFUlRfVU5VU0VEKGJ5dGVjb2Rl
TGVuZ3RoLCBpbmRleCArIHNpemVvZihJbnRUeXBlKSA8PSBieXRlY29kZUxlbmd0aCk7CiAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhd
KTsKIH0KLSAgICAKLXZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5k
QWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBp
ZkRvbWFpbikKKworLy8gRklYTUU6IEdldCByaWQgb2YgcGFnZXNVc2VkLiBXZSBkb24ndCBuZWVk
IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBhZ2VzIHVzZWQuCitzdGF0aWMgaW5saW5lIERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24gZ2V0SW5zdHJ1Y3Rpb24oY29uc3QgREZBQnl0ZWNvZGUqIGJ5dGVjb2Rl
LCB1aW50MzJfdCBieXRlY29kZUxlbmd0aCwgdWludDMyX3QgaW5kZXgsIFZlY3Rvcjxib29sPiYg
cGFnZXNVc2VkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0
aW9uPihnZXRCaXRzPHVpbnQ4X3Q+KGJ5dGVjb2RlLCBieXRlY29kZUxlbmd0aCwgaW5kZXgsIHBh
Z2VzVXNlZCkgJiBERkFCeXRlY29kZUluc3RydWN0aW9uTWFzayk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgc2l6ZV90IGp1bXBTaXplSW5CeXRlcyhERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplKQor
eworICAgIHN3aXRjaCAoanVtcFNpemUpIHsKKyAgICBjYXNlIEludDg6CisgICAgICAgIHJldHVy
biBzaXplb2YoaW50OF90KTsKKyAgICBjYXNlIEludDE2OgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGludDE2X3QpOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBzaXplb2YoaW50MzJf
dCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgREZBQnl0ZWNvZGVKdW1wU2l6ZSBnZXRKdW1wU2l6
ZShjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUsIHVpbnQzMl90IGJ5dGVjb2RlTGVuZ3RoLCB1
aW50MzJfdCBpbmRleCwgVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpCiB7Ci0gICAgQVNTRVJUKGdl
dEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb24KLSAgICAgICAgfHwgZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9u
PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1Vz
ZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbgot
ICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpOwotICAgIGFjdGlv
bnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpKSk7CisgICAgREZB
Qnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSnVtcFNp
emU+KGdldEJpdHM8dWludDhfdD4oYnl0ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFn
ZXNVc2VkKSAmIERGQUJ5dGVjb2RlSnVtcFNpemVNYXNrKTsKKyAgICBBU1NFUlQoanVtcFNpemUg
PT0gREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50MzIgfHwganVtcFNpemUgPT0gREZBQnl0ZWNvZGVK
dW1wU2l6ZTo6SW50MTYgfHwganVtcFNpemUgPT0gREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50OCk7
CisgICAgcmV0dXJuIGp1bXBTaXplOworfQorCitzdGF0aWMgaW5saW5lIGludDMyX3QgZ2V0SnVt
cERpc3RhbmNlKGNvbnN0IERGQUJ5dGVjb2RlKiBieXRlY29kZSwgdWludDMyX3QgYnl0ZWNvZGVM
ZW5ndGgsIHVpbnQzMl90IGluZGV4LCBWZWN0b3I8Ym9vbD4mIHBhZ2VzVXNlZCwgREZBQnl0ZWNv
ZGVKdW1wU2l6ZSBqdW1wU2l6ZSkKK3sKKyAgICBzd2l0Y2ggKGp1bXBTaXplKSB7CisgICAgY2Fz
ZSBJbnQ4OgorICAgICAgICByZXR1cm4gZ2V0Qml0czxpbnQ4X3Q+KGJ5dGVjb2RlLCBieXRlY29k
ZUxlbmd0aCwgaW5kZXgsIHBhZ2VzVXNlZCk7CisgICAgY2FzZSBJbnQxNjoKKyAgICAgICAgcmV0
dXJuIGdldEJpdHM8aW50MTZfdD4oYnl0ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFn
ZXNVc2VkKTsKKyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gZ2V0Qml0czxpbnQzMl90
PihieXRlY29kZSwgYnl0ZWNvZGVMZW5ndGgsIGluZGV4LCBwYWdlc1VzZWQpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbih1aW50MzJf
dCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlvbnMmIGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCit7Cisg
ICAgQVNTRVJUKGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uCisgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCisgICAgICAgIHx8IGdldEluc3RydWN0
aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2Vz
VXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxl
c2hlZXQpOworICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pLCBtX3BhZ2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNp
emVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAg
ICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwogICAgIEFTU0VS
VChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFw
cGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkpOwogfQogCi12b2lkIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1
bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rpb25z
LCBib29sIGlmRG9tYWluKQordm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRU
ZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odWludDMyX3QmIHByb2dyYW1Db3VudGVyLCB1aW50MTZf
dCBmbGFncywgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKLSAgICBBU1NFUlQo
Z2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbgotICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKLSAgICB1aW50MTZfdCBmbGFnc1RvQ2hlY2sgPSBn
ZXRCaXRzPHVpbnQxNl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291
bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKTsKKyAgICBBU1NFUlQoZ2V0
SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIs
IG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb24KKyAgICAgICAgfHwgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29k
ZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgIHVpbnQx
Nl90IGZsYWdzVG9DaGVjayA9IGdldEJpdHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24p
LCBtX3BhZ2VzVXNlZCk7CiAKICAgICB1aW50MTZfdCBsb2FkVHlwZUZsYWdzID0gZmxhZ3NUb0No
ZWNrICYgTG9hZFR5cGVNYXNrOwogICAgIHVpbnQxNl90IHJlc3NvdXJjZVR5cGVGbGFncyA9IGZs
YWdzVG9DaGVjayAmIFJlc291cmNlVHlwZU1hc2s7CkBAIC03NCw3ICsxMTUsNyBAQCB2b2lkIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlCiAgICAgYm9vbCByZXNzb3VyY2VUeXBl
TWF0Y2hlcyA9IHJlc3NvdXJjZVR5cGVGbGFncyA/IChyZXNzb3VyY2VUeXBlRmxhZ3MgJiBmbGFn
cykgOiB0cnVlOwogICAgIAogICAgIGlmIChsb2FkVHlwZU1hdGNoZXMgJiYgcmVzc291cmNlVHlw
ZU1hdGNoZXMpCi0gICAgICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6
IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSAr
IHNpemVvZih1aW50MTZfdCksIG1fcGFnZXNVc2VkKSkpOworICAgICAgICBhY3Rpb25zLmFkZCgo
aWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRC
aXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCksIG1f
cGFnZXNVc2VkKSkpOwogICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdp
dGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKSk7CiB9CkBAIC04NCwxMSArMTI1LDExIEBAIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICBBY3Rpb25zIGFjdGlvbnM7CiAKICAgICAv
LyBERkEgaGVhZGVyLgotICAgIHVuc2lnbmVkIGRmYUJ5dGVjb2RlTGVuZ3RoID0gZ2V0Qml0czx1
bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgMCwgbV9wYWdlc1VzZWQpOwot
ICAgIHVuc2lnbmVkIHByb2dyYW1Db3VudGVyID0gc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICB1aW50
MzJfdCBkZmFCeXRlY29kZUxlbmd0aCA9IGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIDAsIG1fcGFnZXNVc2VkKTsKKyAgICB1aW50MzJfdCBwcm9ncmFtQ291
bnRlciA9IHNpemVvZih1aW50MzJfdCk7CiAKICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBk
ZmFCeXRlY29kZUxlbmd0aCkgewotICAgICAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3Ry
dWN0aW9uID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtw
cm9ncmFtQ291bnRlcl0pOworICAgICAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0
aW9uID0gZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3Jh
bUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKICAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQogICAgICAg
ICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxz
ZSk7CiAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbikKQEAgLTExMywxOCArMTU0LDE4IEBAIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAKICAgICBBY3Rpb25zIGFjdGlvbnM7CiAgICAg
Ci0gICAgdW5zaWduZWQgcHJvZ3JhbUNvdW50ZXIgPSAwOworICAgIHVpbnQzMl90IHByb2dyYW1D
b3VudGVyID0gMDsKICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBtX2J5dGVjb2RlTGVuZ3Ro
KSB7CiAKICAgICAgICAgLy8gREZBIGhlYWRlci4KLSAgICAgICAgdW5zaWduZWQgZGZhU3RhcnQg
PSBwcm9ncmFtQ291bnRlcjsKLSAgICAgICAgdW5zaWduZWQgZGZhQnl0ZWNvZGVMZW5ndGggPSBn
ZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291
bnRlciwgbV9wYWdlc1VzZWQpOwotICAgICAgICBwcm9ncmFtQ291bnRlciArPSBzaXplb2YodW5z
aWduZWQpOworICAgICAgICB1aW50MzJfdCBkZmFTdGFydCA9IHByb2dyYW1Db3VudGVyOworICAg
ICAgICB1aW50MzJfdCBkZmFCeXRlY29kZUxlbmd0aCA9IGdldEJpdHM8dWludDMyX3Q+KG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7Cisg
ICAgICAgIHByb2dyYW1Db3VudGVyICs9IHNpemVvZih1aW50MzJfdCk7CiAKICAgICAgICAgLy8g
U2tpcCB0aGUgZGVmYXVsdCBzdHlsZXNoZWV0IGFjdGlvbnMgb24gdGhlIERGQSByb290LiBUaGVz
ZSBhcmUgYWNjZXNzZWQgdmlhIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290
LgogICAgICAgICBpZiAoIWRmYVN0YXJ0KSB7CiAgICAgICAgICAgICB3aGlsZSAocHJvZ3JhbUNv
dW50ZXIgPCBkZmFCeXRlY29kZUxlbmd0aCkgewotICAgICAgICAgICAgICAgIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0
aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3VudGVyXSk7CisgICAgICAgICAgICAgICAgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQogICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291
bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KTsKICAgICAgICAgICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24p
CkBAIC0xMzcsMTggKzE3OCwxOCBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERG
QUJ5dGVjCiAgICAgICAgICAgICBpZiAocHJvZ3JhbUNvdW50ZXIgPj0gbV9ieXRlY29kZUxlbmd0
aCkKICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0
cnVjdGlvbj4obV9ieXRlY29kZVtwcm9ncmFtQ291bnRlcl0pICE9IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbgotICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKSAhPSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24sIAorICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpICE9IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbgorICAgICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1f
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkg
IT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uLAogICAg
ICAgICAgICAgICAgICJUcmlnZ2VycyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgc2hvdWxkIG9ubHkg
YmUgaW4gdGhlIGZpcnN0IERGQS4iKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8g
SW50ZXJwcmV0IHRoZSBieXRlY29kZSBmcm9tIHRoaXMgREZBLgogICAgICAgICAvLyBUaGlzIHNo
b3VsZCBhbHdheXMgdGVybWluYXRlIGlmIGludGVycHJldGluZyBjb3JyZWN0bHkgY29tcGlsZWQg
Ynl0ZWNvZGUuCi0gICAgICAgIHVuc2lnbmVkIHVybEluZGV4ID0gMDsKKyAgICAgICAgdWludDMy
X3QgdXJsSW5kZXggPSAwOwogICAgICAgICBib29sIHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5n
ID0gZmFsc2U7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbUNvdW50ZXIgPD0gbV9ieXRlY29kZUxlbmd0aCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3JhbUNvdW50
ZXJdKSkgeworICAgICAgICAgICAgc3dpdGNoIChnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpKSB7CiAKICAgICAg
ICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAgICAg
ICAgICAgIGdvdG8gbmV4dERGQTsKQEAgLTE1OSwxMyArMjAwLDE1IEBAIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKIAogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVybCBpcyB0aGUgdmFsdWUgc3RvcmVk
IHdpdGggdGhlIGJ5dGVjb2RlLgogICAgICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gdXJs
W3VybEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09IGdldEJpdHM8dWlu
dDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXpl
b2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbUNvdW50ZXIgPSBkZmFTdGFydCArIGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNp
emVvZih1aW50OF90KSwgbV9wYWdlc1VzZWQpOworICAgICAgICAgICAgICAgIERGQUJ5dGVjb2Rl
SnVtcFNpemUganVtcFNpemUgPSBnZXRKdW1wU2l6ZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpOworICAgICAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3Ro
LCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSwgbV9wYWdl
c1VzZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IHBy
b2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVp
bnQ4X3QpOworICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGp1bXBMb2NhdGlv
biArIGdldEp1bXBEaXN0YW5jZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBqdW1wTG9j
YXRpb24sIG1fcGFnZXNVc2VkLCBqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2hhcmFjdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgdXJsSW5kZXhJc0FmdGVyRW5kT2ZT
dHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJl
cHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgogICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gc2l6ZW9mKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsganVtcFNpemVJbkJ5dGVzKGp1bXBTaXpl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTc1LDEzICsy
MTgsMTUgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogCiAgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUg
dXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0ZWNvZGUuCiAgICAgICAgICAgICAg
ICAgY2hhciBjaGFyYWN0ZXIgPSB0b0FTQ0lJTG93ZXIodXJsW3VybEluZGV4XSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9w
YWdlc1VzZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZGZhU3Rh
cnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCksIG1fcGFn
ZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0g
Z2V0SnVtcFNpemUobV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIs
IG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09IGdldEJpdHM8
dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBz
aXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiksIG1fcGFnZXNVc2VkKSkgeworICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBqdW1wTG9jYXRpb24gKyBnZXRKdW1wRGlzdGFuY2Uo
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwganVtcExvY2F0aW9uLCBtX3BhZ2VzVXNlZCwg
anVtcFNpemUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAg
ICAgICAgICAgICAgICAgIHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4g
dGhlIERGQS4KICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbUNvdW50ZXIgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6
ZW9mKHVpbnQ4X3QpICsganVtcFNpemVJbkJ5dGVzKGp1bXBTaXplKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xOTAsMTQg
KzIzNSwxNiBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gbmV4dERGQTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHVybFt1cmxJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKGNoYXJhY3RlciA+PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVM
ZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQp
Ci0gICAgICAgICAgICAgICAgICAgICYmIGNoYXJhY3RlciA8PSBnZXRCaXRzPHVpbnQ4X3Q+KG1f
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1VzZWQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb2dyYW1Db3VudGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRl
Y29kZSkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsK
KyAgICAgICAgICAgICAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gZ2V0SnVtcFNp
emUobV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNV
c2VkKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IGdldEJpdHM8dWludDhfdD4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbiksIG1fcGFnZXNVc2VkKQorICAgICAgICAgICAgICAgICAgICAm
JiBjaGFyYWN0ZXIgPD0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNp
emVvZih1aW50OF90KSwgbV9wYWdlc1VzZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGp1bXBMb2NhdGlvbiA9IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgMiAqIHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbUNvdW50ZXIgPSBqdW1wTG9jYXRpb24gKyBnZXRKdW1wRGlzdGFuY2UobV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwganVtcExvY2F0aW9uLCBtX3BhZ2VzVXNlZCwganVtcFNpemUpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAg
ICAgIHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KICAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpD
aGVja1ZhbHVlUmFuZ2VDYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bUNvdW50ZXIgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgMiAqIHNpemVvZih1
aW50OF90KSArIGp1bXBTaXplSW5CeXRlcyhqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKQEAgLTIwNiwyNCArMjUzLDI5IEBAIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0
REZBOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0g
dG9BU0NJSUxvd2VyKHVybFt1cmxJbmRleF0pOwotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0
ZXIgPj0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKQotICAgICAgICAg
ICAgICAgICAgICAmJiBjaGFyYWN0ZXIgPD0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBz
aXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGRmYVN0YXJ0ICsgZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6
ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAg
ICAgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IGdldEp1bXBTaXplKG1fYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA+PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pLCBtX3BhZ2VzVXNlZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2hhcmFjdGVy
IDw9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3Jh
bUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhf
dCksIG1fcGFnZXNVc2VkKSkgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBqdW1wTG9j
YXRpb24gPSBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSAr
IDIgKiBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ID0ganVtcExvY2F0aW9uICsgZ2V0SnVtcERpc3RhbmNlKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVM
ZW5ndGgsIGp1bXBMb2NhdGlvbiwgbV9wYWdlc1VzZWQsIGp1bXBTaXplKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICB1cmxJbmRl
eElzQWZ0ZXJFbmRPZlN0cmluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4
Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCiAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0
aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJh
bmdlQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgMiAqIHNpemVvZih1aW50OF90KSAr
IGp1bXBTaXplSW5CeXRlcyhqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVt
cDoKKyAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDogewogICAg
ICAgICAgICAgICAgIGlmICghdXJsW3VybEluZGV4XSB8fCB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0
cmluZykKICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0REZBOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVu
c2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNp
emVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICB1aW50MzJf
dCBqdW1wTG9jYXRpb24gPSBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3Ry
dWN0aW9uKTsKKyAgICAgICAgICAgICAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0g
Z2V0SnVtcFNpemUobV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIs
IG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGp1bXBMb2Nh
dGlvbiArIGdldEp1bXBEaXN0YW5jZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBqdW1w
TG9jYXRpb24sIG1fcGFnZXNVc2VkLCBqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgdXJsSW5k
ZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKICAgICAgICAg
ICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZh
bHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE3MCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA2LTAzICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nv
bnRlbnQgRXh0ZW5zaW9uc10gSW1wbGVtZW50IGJyYW5jaCBjb21wYWN0aW9uIGZvciBERkEgYnl0
ZWNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDU2MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICBJ
bmNyZW1lbnQgdmVyc2lvbiBudW1iZXIgdG8gcmVmbGVjdCBjaGFuZ2VzIHRvIGJ5dGVjb2RlLgor
CiAyMDE1LTA2LTAyICBIeXVuZ3dvb2sgTGVlICA8aHl1bmd3b29rLmxlZUBuYXZlcmNvcnAuY29t
PgogCiAgICAgICAgIFtFRkxdIEltcGxlbWVudCBsb2FkX3N0YXJ0ZWQgY2FsbGJhY2sgaW4gRXdr
UGFnZUNsaWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAxODQ5ODYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gVGhpcyBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSBhIGZ1bmN0aW9uYWwg
Y2hhbmdlIGlzIG1hZGUgdG8gdGhlIGJ5dGVjb2RlLCBmaWxlIGZvcm1hdCwgZXRjLgogICAgIC8v
IHRvIHByZXZlbnQgY3Jhc2hpbmcgd2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KLSAgICBjb25zdCBz
dGF0aWMgdWludDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDM7Cisg
ICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNp
b24gPSA0OwogCiAgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRT
dG9yZSgpOwogICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVX
aXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254965</attachid>
            <date>2015-06-16 13:31:03 -0700</date>
            <delta_ts>2015-06-16 14:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145619-20150616133028.patch</filename>
            <type>text/plain</type>
            <size>45246</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTYwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTA2LTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gSW1wbGVtZW50IGJyYW5jaCBjb21wYWN0aW9uIGZvciBERkEgYnl0ZWNvZGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU2MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyBhbm90aGVyIHBhc3MgdG8gdGhlIERGQUJ5dGVjb2RlQ29tcGlsZXIgd2hpY2gg
ZmluZHMgd2hlcmUgdGhlIGJ5dGVjb2RlIGZyb20gZWFjaCBub2RlCisgICAgICAgIHdvdWxkIGJl
IGlmIGl0IHdlcmUgY29tcGlsZWQgd2l0aCBubyBicmFuY2ggY29tcGFjdGlvbiwgdGhlbiB1c2Vz
IHRoYXQgYXMgYSB3b3JzdC1jYXNlIHZhbHVlIHRvIGRldGVybWluZQorICAgICAgICBob3cgbWFu
eSBieXRlcyBhcmUgbmVlZGVkIHRvIHN0b3JlIHRoZSByZWxhdGl2ZSBqdW1wIGRpc3RhbmNlLiAg
VGhlbiB3aGVuIGxpbmtpbmcsIGl0IHdpbGwgZmlsbCBpbiB0aGUgCisgICAgICAgIHZhbHVlIGFz
IGl0IGFscmVhZHkgZGlkLCBidXQgd2l0aCBhIHZhcmlhYmxlIHNpemUganVtcC4gIFRoZSBqdW1w
cyBhcmUgYWxzbyBub3cgc2lnbmVkIGRpc3RhbmNlcyByZWxhdGl2ZSB0bworICAgICAgICB3aGVy
ZSB0aGUganVtcCBpcyBzdG9yZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLCB3aGljaCBoYXZlIG1hbnkganVtcHMgdGhhdCBhcmUgbmVhciB0aGUg
LTEyOC8xMjcgYnl0ZSBib3VuZGFyeSwKKyAgICAgICAgYW5kIHRoZSBzd2l0Y2ggZnJvbSAxNi1i
aXQganVtcHMgdG8gMzItYml0IGp1bXBzIG5lYXIgdGhlIC02NTUzNi82NTUzNSBieXRlIGJvdW5k
YXJ5IGlzIGFuYWxvZ291cy4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnNtYWxsZXN0UG9z
c2libGVKdW1wU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBl
bmRaZXJvZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnNldEJpdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmFwcGVuZEFjdGlvbkJ5dGVj
b2RlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6bG9uZ2VzdFBvc3NpYmxlSnVtcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6
ZW1pdEp1bXApOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVj
b2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpl
bWl0VGVybWluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZWROb2RlTWF4Qnl0ZWNvZGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjpyYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlQ29tcGlsZXI6OmNoZWNrRm9yUmFuZ2VNYXhCeXRlY29kZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGVDaGVja0ZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZUNvbXBpbGVyOjpub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNv
bXBpbGVOb2RlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OnNldDMyQml0cyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OmdldEJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmdldEluc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpqdW1wU2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmdldEp1bXBTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRK
dW1wRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hl
ZXRGcm9tREZBUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3Vy
Y2VMb2FkSW5mby5oOgorCiAyMDE1LTA2LTE2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FudmFzIGRpbWVuc2lvbnMgc2hvdWxkIGJlIGxp
bWl0ZWQgdG8gNDA5Nng0MDk2IHBpeGVscyBvbiBpT1MgZGV2aWNlcy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg1NTkzKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDYgKzE3OCw4IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29u
dGVudEUKICAgICAgICAgQVNTRVJUKHRyaWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKIAogICAg
ICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgZm9yIGZsYWdzLiBUaGlzIHNob3VsZCBtYXRjaCBo
b3cgdGhleSBhcmUgdXNlZCBpbiBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZS4KKyAg
ICAgICAgQVNTRVJUKEFjdGlvbkZsYWdNYXNrICYgKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0cmln
Z2VyLmZsYWdzKSA8PCAzMikpOworICAgICAgICBBU1NFUlQoISh+QWN0aW9uRmxhZ01hc2sgJiAo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIuZmxhZ3MpIDw8IDMyKSkpOwogICAgICAgICB1
aW50NjRfdCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0
cmlnZ2VyLmZsYWdzKSA8PCAzMikgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYWN0aW9uTG9jYXRp
b25zW3J1bGVJbmRleF0pOwogICAgICAgICBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIHN0
YXR1cyA9IFVSTEZpbHRlclBhcnNlcjo6T2s7CiAgICAgICAgIGlmICh0cmlnZ2VyLmRvbWFpbnMu
aXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDE4NTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDQ2ICs0MSw2
OSBAQCBlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50CiAKICAgICAvLyBD
aGVja1ZhbHVlIGhhcyB0d28gYXJndW1lbnRzOgogICAgIC8vIFRoZSB2YWx1ZSB0byBjaGVjayAo
MSBieXRlKSwKLSAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBpZiB0aGUgdmFsdWVzIGFyZSBl
cXVhbCAoNCBieXRlcykuCi0gICAgQ2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSwKLSAgICBDaGVj
a1ZhbHVlQ2FzZVNlbnNpdGl2ZSwKKyAgICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCBpZiB0aGUg
dmFsdWVzIGFyZSBlcXVhbCAoMS00IGJ5dGVzLCBzaWduZWQpLgorICAgIENoZWNrVmFsdWVDYXNl
SW5zZW5zaXRpdmUgPSAweDAsCisgICAgQ2hlY2tWYWx1ZUNhc2VTZW5zaXRpdmUgPSAweDEsCiAK
ICAgICAvLyBKdW1wIHRvIGFuIG9mZnNldCBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgd2l0aGluIGEg
Y2VydGFpbiByYW5nZS4KICAgICAvLyBUaGUgbG93ZXIgdmFsdWUgKDEgYnl0ZSkuCiAgICAgLy8g
VGhlIGhpZ2hlciB2YWx1ZSAoMSBieXRlKS4KLSAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBp
ZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdlICg0IGJ5dGVzKS4KLSAgICBDaGVja1ZhbHVlUmFu
Z2VDYXNlSW5zZW5zaXRpdmUsCi0gICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZVNlbnNpdGl2ZSwKKyAg
ICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdlICgx
LTQgYnl0ZXMsIHNpZ25lZCkuCisgICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlID0g
MHgyLAorICAgIENoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRpdmUgPSAweDMsCiAKICAgICAvLyBB
cHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVu
ZCAoNCBieXRlcykuCi0gICAgQXBwZW5kQWN0aW9uLAotICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRT
dHlsZXNoZWV0LAotICAgIEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiwKKyAgICBBcHBlbmRBY3Rp
b24gPSAweDQsCisgICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQgPSAweDUsCisgICAg
QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg2LAogICAgIAogICAgIC8vIFRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKICAgICAvLyBUaGUgZmxhZ3MgdG8gY2hl
Y2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcykuCiAgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBl
bmQgKDQgYnl0ZXMpLgotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiwKLSAgICBUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4sCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uID0gMHg3LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4
OCwKIAogICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRzLgotICAgIFRlcm1pbmF0ZSwK
KyAgICBUZXJtaW5hdGUgPSAweDksCiAKICAgICAvLyBKdW1wIGhhcyBvbmUgYXJndW1lbnQ6Ci0g
ICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8gdW5jb25kaXRpb25hbGx5ICg0IGJ5dGVzKS4KLSAg
ICBKdW1wLAorICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wICgxLTQgYnl0ZXMsIHNpZ25lZCku
CisgICAgSnVtcCA9IDB4QSwKIH07CiAKKy8vIFRoZSBsYXN0IGZvdXIgYml0cyBjb250YWluIHRo
ZSBpbnN0cnVjdGlvbiB0eXBlLgorY29uc3QgdWludDhfdCBERkFCeXRlY29kZUluc3RydWN0aW9u
TWFzayA9IDB4MEY7Citjb25zdCB1aW50OF90IERGQUJ5dGVjb2RlSnVtcFNpemVNYXNrID0gMHhG
MDsKKworLy8gREZBIGJ5dGVjb2RlIHN0YXJ0cyB3aXRoIGEgNCBieXRlIGhlYWRlciB3aGljaCBj
b250YWlucyB0aGUgc2l6ZSBvZiB0aGlzIERGQS4KK3R5cGVkZWYgdWludDMyX3QgREZBSGVhZGVy
OworCisvLyBBIERGQUJ5dGVjb2RlSnVtcFNpemUgaXMgc3RvcmVkIGluIHRoZSB0b3AgZm91ciBi
aXRzIG9mIHRoZSBERkFCeXRlY29kZUluc3RydWN0aW9ucyB0aGF0IGhhdmUgYSBqdW1wLgorZW51
bSBERkFCeXRlY29kZUp1bXBTaXplIHsKKyAgICBJbnQ4ID0gMHgxMCwKKyAgICBJbnQxNiA9IDB4
MjAsCisgICAgSW50MzIgPSAweDMwLAorfTsKKworc3RhdGljIGlubGluZSBERkFCeXRlY29kZUp1
bXBTaXplIHNtYWxsZXN0UG9zc2libGVKdW1wU2l6ZShpbnQzMl90IGxvbmdlc3RQb3NzaWJsZUp1
bXApCit7CisgICAgaWYgKGxvbmdlc3RQb3NzaWJsZUp1bXAgPD0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ4X3Q+OjptYXgoKSAmJiBsb25nZXN0UG9zc2libGVKdW1wID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50OF90Pjo6bWluKCkpCisgICAgICAgIHJldHVybiBJbnQ4OworICAgIGlmIChsb25n
ZXN0UG9zc2libGVKdW1wIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1heCgpICYm
IGxvbmdlc3RQb3NzaWJsZUp1bXAgPj0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWlu
KCkpCisgICAgICAgIHJldHVybiBJbnQxNjsKKyAgICByZXR1cm4gSW50MzI7Cit9CisgICAgCiBz
dGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCiB7CiAgICAgc3dpdGNoIChpbnN0cnVjdGlvbikg
ewogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VTZW5zaXRp
dmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZUluc2Vu
c2l0aXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsg
c2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQzMl90KTsKICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRpdmU6CiAgICAgY2FzZSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5zaXRpdmU6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhf
dCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOworICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gVmFyaWFibGUgaW5zdHJ1Y3Rpb24gc2l6ZS4KICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0OgogICAgIGNhc2UgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgpAQCAtOTAsOCArMTEzLDYgQEAg
c3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgICAgICByZXR1cm4g
c2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQxNl90KSArIHNpemVv
Zih1aW50MzJfdCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6
CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbik7Ci0gICAgY2Fz
ZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgotICAgICAgICByZXR1cm4gc2l6ZW9mKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQzMl90KTsKICAgICB9CiB9CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg1NTkzKQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDE1ICs0Myw0MCBAQCBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPERGQUJ5dGVj
b2RlPiYgCiAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8SW50VHlwZSo+KCZieXRlY29kZVtieXRlY29k
ZS5zaXplKCkgLSBzaXplb2YoSW50VHlwZSldKSA9IHZhbHVlOwogfQogCi1pbmxpbmUgdm9pZCBz
ZXQzMkJpdHMoVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVpbnQzMl90IGluZGV4LCB1
aW50MzJfdCB2YWx1ZSkKK2lubGluZSB2b2lkIGFwcGVuZFplcm9lcyhWZWN0b3I8REZBQnl0ZWNv
ZGU+JiBieXRlY29kZSwgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSkKIHsKLSAgICAqcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZieXRlY29kZVtpbmRleF0pID0gdmFsdWU7CisgICAg
c3dpdGNoIChqdW1wU2l6ZSkgeworICAgIGNhc2UgREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50ODoK
KyAgICAgICAgYXBwZW5kPGludDhfdD4oYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZhbHVlIHdpbGwg
YmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBERkFCeXRlY29k
ZUp1bXBTaXplOjpJbnQxNjoKKyAgICAgICAgYXBwZW5kPGludDE2X3Q+KGJ5dGVjb2RlLCAwKTsg
Ly8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50MzI6CisgICAgICAgIGFwcGVuZDxpbnQz
Ml90PihieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5n
LgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBl
PgoraW5saW5lIHZvaWQgc2V0Qml0cyhWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdWlu
dDMyX3QgaW5kZXgsIEludFR5cGUgdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
KyBzaXplb2YoSW50VHlwZSkgPD0gYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCEqcmVpbnRlcnByZXRfY2FzdDxJbnRUeXBlKj4oJmJ5dGVjb2RlW2luZGV4XSksICJS
aWdodCBub3cgd2Ugc2hvdWxkIG9ubHkgYmUgdXNpbmcgc2V0Qml0cyB0byBvdmVyd3JpdGUgdmFs
dWVzIHRoYXQgd2VyZSB6ZXJvIGFzIGEgcGxhY2Vob2xkZXIuIik7CisgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8SW50VHlwZSo+KCZieXRlY29kZVtpbmRleF0pID0gdmFsdWU7CiB9CiAKK3N0YXRpYyB1
bnNpZ25lZCBhcHBlbmRBY3Rpb25CeXRlY29kZVNpemUodWludDY0X3QgYWN0aW9uKQoreworICAg
IGlmIChhY3Rpb24gJiBBY3Rpb25GbGFnTWFzaykKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFC
eXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3Qp
OworICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWlu
dDMyX3QpOworfQorICAgIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0
aW9uKHVpbnQ2NF90IGFjdGlvbikKIHsKICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgdG8gc3Rv
cmUgZmxhZ3MuIFNlZSBjb21waWxlUnVsZUxpc3QuCi0gICAgaWYgKGFjdGlvbiAmIDB4RkZGRjAw
MDAwMDAwKSB7CisgICAgaWYgKGFjdGlvbiAmIEFjdGlvbkZsYWdNYXNrKSB7CiAgICAgICAgIEFT
U0VSVCghKGFjdGlvbiAmIERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWcpKTsKICAgICAgICAgaWYg
KGFjdGlvbiAmIElmRG9tYWluRmxhZykKICAgICAgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwpAQCAtNzEsMzAgKzk2LDYyIEBAIHZvaWQgREZB
Qnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKICAgICB9CiB9CiAKLXZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6ZW1pdEp1bXAodWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpCitp
bnQzMl90IERGQUJ5dGVjb2RlQ29tcGlsZXI6Omxvbmdlc3RQb3NzaWJsZUp1bXAodWludDMyX3Qg
anVtcExvY2F0aW9uLCB1aW50MzJfdCBzb3VyY2VOb2RlSW5kZXgsIHVpbnQzMl90IGRlc3RpbmF0
aW9uTm9kZUluZGV4KQogewotICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5
dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wKTsKLSAgICBtX2xpbmtSZWNvcmRz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX2J5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2Rl
SW5kZXgpKTsKLSAgICBhcHBlbmQ8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZh
bHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICBpZiAobV9ub2RlU3RhcnRPZmZzZXRz
W2Rlc3RpbmF0aW9uTm9kZUluZGV4XSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpIHsKKyAgICAgICAgLy8gSnVtcGluZyB0byBhIG5vZGUgdGhhdCBoYXNuJ3QgYmVlbiBj
b21waWxlZCB5ZXQsIHdlIGRvbid0IGtub3cgZXhhY3RseSBob3cgZmFyIGZvcndhcmQgd2Ugd2ls
bCBuZWVkIHRvIGp1bXAsCisgICAgICAgIC8vIHNvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBy
b29tIGZvciB0aGUgd29yc3QgcG9zc2libGUgY2FzZSwgdGhlIGZhcnRoZXN0IHBvc3NpYmxlIGp1
bXAKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgdGhlIGRpc3RhbmNlIGlmIHRoZXJlIHdlcmUg
bm8gY29tcGFjdGVkIGJyYW5jaGVzIGJldHdlZW4gdGhpcyBqdW1wIGFuZCBpdHMgZGVzdGluYXRp
b24uCisgICAgICAgIEFTU0VSVChqdW1wTG9jYXRpb24gPiBtX25vZGVTdGFydE9mZnNldHNbc291
cmNlTm9kZUluZGV4XSk7CisgICAgICAgIEFTU0VSVChtX21heE5vZGVTdGFydE9mZnNldHNbZGVz
dGluYXRpb25Ob2RlSW5kZXhdID4gbV9tYXhOb2RlU3RhcnRPZmZzZXRzW3NvdXJjZU5vZGVJbmRl
eF0pOworICAgICAgICBBU1NFUlQobV9ub2RlU3RhcnRPZmZzZXRzW3NvdXJjZU5vZGVJbmRleF0g
IT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0c1tkZXN0aW5hdGlvbk5vZGVJbmRleF0gLSBtX21heE5vZGVT
dGFydE9mZnNldHNbc291cmNlTm9kZUluZGV4XSAtIChtX25vZGVTdGFydE9mZnNldHNbc291cmNl
Tm9kZUluZGV4XSAtIGp1bXBMb2NhdGlvbik7CisgICAgfQorICAgIAorICAgIC8vIEp1bXBpbmcg
dG8gYW4gYWxyZWFkeSBjb21waWxlZCBub2RlLCB3ZSBhbHJlYWR5IGtub3cgZXhhY3RseSB3aGVy
ZSB3ZSB3aWxsIG5lZWQgdG8ganVtcCB0by4KKyAgICBBU1NFUlQobV9ub2RlU3RhcnRPZmZzZXRz
W2Rlc3RpbmF0aW9uTm9kZUluZGV4XSA8IGp1bXBMb2NhdGlvbik7CisgICAgcmV0dXJuIG1fbm9k
ZVN0YXJ0T2Zmc2V0c1tkZXN0aW5hdGlvbk5vZGVJbmRleF0gLSBqdW1wTG9jYXRpb247Cit9Cisg
ICAgCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVpbnQzMl90IHNvdXJjZU5v
ZGVJbmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpCit7CisgICAgdWludDMyX3Qg
aW5zdHJ1Y3Rpb25Mb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgIHVpbnQzMl90IGp1
bXBMb2NhdGlvbiA9IGluc3RydWN0aW9uTG9jYXRpb24gKyBzaXplb2YodWludDhfdCk7CisgICAg
aW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UgPSBsb25nZXN0UG9zc2libGVKdW1w
KGluc3RydWN0aW9uTG9jYXRpb24sIHNvdXJjZU5vZGVJbmRleCwgZGVzdGluYXRpb25Ob2RlSW5k
ZXgpOworICAgIERGQUJ5dGVjb2RlSnVtcFNpemUganVtcFNpemUgPSBzbWFsbGVzdFBvc3NpYmxl
SnVtcFNpemUobG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlKTsKKyAgICBhcHBlbmQ8dWludDhf
dD4obV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6SnVtcCkgfCBqdW1wU2l6ZSk7CisKKyAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChMaW5rUmVj
b3JkKHtqdW1wU2l6ZSwgbG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlLCBpbnN0cnVjdGlvbkxv
Y2F0aW9uLCBqdW1wTG9jYXRpb24sIGRlc3RpbmF0aW9uTm9kZUluZGV4fSkpOworICAgIGFwcGVu
ZFplcm9lcyhtX2J5dGVjb2RlLCBqdW1wU2l6ZSk7CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21w
aWxlcjo6ZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25O
b2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6
ZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMyX3Qgc291cmNlTm9kZUluZGV4LCB1
aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewotICAg
IGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBjYXNlU2Vuc2l0aXZl
ID8gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VTZW5zaXRpdmUgOiBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICB1aW50
MzJfdCBpbnN0cnVjdGlvbkxvY2F0aW9uID0gbV9ieXRlY29kZS5zaXplKCk7CisgICAgdWludDMy
X3QganVtcExvY2F0aW9uID0gaW5zdHJ1Y3Rpb25Mb2NhdGlvbiArIDIgKiBzaXplb2YodWludDhf
dCk7CisgICAgaW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UgPSBsb25nZXN0UG9z
c2libGVKdW1wKGluc3RydWN0aW9uTG9jYXRpb24sIHNvdXJjZU5vZGVJbmRleCwgZGVzdGluYXRp
b25Ob2RlSW5kZXgpOworICAgIERGQUJ5dGVjb2RlSnVtcFNpemUganVtcFNpemUgPSBzbWFsbGVz
dFBvc3NpYmxlSnVtcFNpemUobG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlKTsKKyAgICBERkFC
eXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uID0gY2FzZVNlbnNpdGl2ZSA/IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlIDogREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZTsKKyAgICBhcHBlbmQ8dWludDhfdD4o
bV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oaW5zdHJ1Y3Rpb24pIHwganVtcFNpemUp
OwogICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVjb2RlLCB2YWx1ZSk7Ci0gICAgbV9saW5rUmVj
b3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9ieXRlY29kZS5zaXplKCksIGRlc3RpbmF0aW9u
Tm9kZUluZGV4KSk7Ci0gICAgYXBwZW5kPHVpbnQzMl90PihtX2J5dGVjb2RlLCAwKTsgLy8gVGhp
cyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgbV9saW5rUmVjb3Jkcy5hcHBl
bmQoTGlua1JlY29yZCh7anVtcFNpemUsIGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSwgaW5z
dHJ1Y3Rpb25Mb2NhdGlvbiwganVtcExvY2F0aW9uLCBkZXN0aW5hdGlvbk5vZGVJbmRleH0pKTsK
KyAgICBhcHBlbmRaZXJvZXMobV9ieXRlY29kZSwganVtcFNpemUpOwogfQogCi12b2lkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlUmFuZ2UodWludDhfdCBsb3dWYWx1ZSwgdWlu
dDhfdCBoaWdoVmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNhc2VT
ZW5zaXRpdmUpCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlUmFuZ2Uo
dWludDhfdCBsb3dWYWx1ZSwgdWludDhfdCBoaWdoVmFsdWUsIHVpbnQzMl90IHNvdXJjZU5vZGVJ
bmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGxvd1ZhbHVlIDwgaGlnaFZhbHVlLCAiVGhlIGlu
c3RydWN0aW9uIHNlbWFudGljIGltcG9zZSBsb3dWYWx1ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4g
aGlnaFZhbHVlLiIpOwogCi0gICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0
ZWNvZGUsIGNhc2VTZW5zaXRpdmUgPyBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVl
UmFuZ2VDYXNlU2Vuc2l0aXZlIDogREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJh
bmdlQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICB1aW50MzJfdCBpbnN0cnVjdGlvbkxvY2F0aW9uID0g
bV9ieXRlY29kZS5zaXplKCk7CisgICAgdWludDMyX3QganVtcExvY2F0aW9uID0gaW5zdHJ1Y3Rp
b25Mb2NhdGlvbiArIDMgKiBzaXplb2YodWludDhfdCk7CisgICAgaW50MzJfdCBsb25nZXN0UG9z
c2libGVKdW1wRGlzdGFuY2UgPSBsb25nZXN0UG9zc2libGVKdW1wKGluc3RydWN0aW9uTG9jYXRp
b24sIHNvdXJjZU5vZGVJbmRleCwgZGVzdGluYXRpb25Ob2RlSW5kZXgpOworICAgIERGQUJ5dGVj
b2RlSnVtcFNpemUganVtcFNpemUgPSBzbWFsbGVzdFBvc3NpYmxlSnVtcFNpemUobG9uZ2VzdFBv
c3NpYmxlSnVtcERpc3RhbmNlKTsKKyAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0
aW9uID0gY2FzZVNlbnNpdGl2ZSA/IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVS
YW5nZUNhc2VTZW5zaXRpdmUgOiBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFu
Z2VDYXNlSW5zZW5zaXRpdmU7CisgICAgYXBwZW5kPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGluc3RydWN0aW9uKSB8IGp1bXBTaXplKTsKICAgICBhcHBlbmQ8dWlu
dDhfdD4obV9ieXRlY29kZSwgbG93VmFsdWUpOwogICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVj
b2RlLCBoaWdoVmFsdWUpOwotICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5vZGVJbmRleCkpOwotICAgIGFwcGVuZDx1
aW50MzJfdD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBs
aW5raW5nLgorICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKExpbmtSZWNvcmQoe2p1bXBTaXplLCBs
b25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UsIGluc3RydWN0aW9uTG9jYXRpb24sIGp1bXBMb2Nh
dGlvbiwgZGVzdGluYXRpb25Ob2RlSW5kZXh9KSk7CisgICAgYXBwZW5kWmVyb2VzKG1fYnl0ZWNv
ZGUsIGp1bXBTaXplKTsKIH0KIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWlu
YXRlKCkKQEAgLTEwNCw5ICsxNjEsMTEgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0
VGVybWluYXRlKAogCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVpbnQz
Ml90IGluZGV4LCBib29sIHJvb3QpCiB7CisgICAgdW5zaWduZWQgc3RhcnRTaXplID0gbV9ieXRl
Y29kZS5zaXplKCk7CisgICAgCiAgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IG1fZGZhLm5vZGVz
W2luZGV4XTsKICAgICBpZiAobm9kZS5pc0tpbGxlZCgpKSB7Ci0gICAgICAgIG1fbm9kZVN0YXJ0
T2Zmc2V0c1tpbmRleF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Cisg
ICAgICAgIEFTU0VSVChtX25vZGVTdGFydE9mZnNldHNbaW5kZXhdID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEy
MiwxMCArMTgxLDI0IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodWkK
ICAgICBpZiAocm9vdCkKICAgICAgICAgbV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9IG1fYnl0
ZWNvZGUuc2l6ZSgpOwogICAgIAotICAgIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMobm9kZSk7Cisg
ICAgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyhpbmRleCk7CisgICAgCisgICAgQVNTRVJUX1VOVVNF
RChzdGFydFNpemUsIG1fYnl0ZWNvZGUuc2l6ZSgpIC0gc3RhcnRTaXplIDw9IGNvbXBpbGVkTm9k
ZU1heEJ5dGVjb2RlU2l6ZShpbmRleCkpOworfQorICAgIAordW5zaWduZWQgREZBQnl0ZWNvZGVD
b21waWxlcjo6Y29tcGlsZWROb2RlTWF4Qnl0ZWNvZGVTaXplKHVpbnQzMl90IGluZGV4KQorewor
ICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2Rlc1tpbmRleF07CisgICAgaWYgKG5v
ZGUuaXNLaWxsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7
CisgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBub2RlLmFjdGlvbnMobV9kZmEpKQorICAgICAg
ICBzaXplICs9IGFwcGVuZEFjdGlvbkJ5dGVjb2RlU2l6ZShhY3Rpb24pOworICAgIHNpemUgKz0g
bm9kZVRyYW5zaXRpb25zTWF4Qnl0ZWNvZGVTaXplKG5vZGUpOworICAgIHJldHVybiBzaXplOwog
fQogCi12b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhbnNpdGlvbnMoY29u
c3QgREZBTm9kZSYgbm9kZSkKK1ZlY3RvcjxERkFCeXRlY29kZUNvbXBpbGVyOjpSYW5nZT4gREZB
Qnl0ZWNvZGVDb21waWxlcjo6cmFuZ2VzKGNvbnN0IERGQU5vZGUmIG5vZGUpCiB7CiAgICAgdWlu
dDMyX3QgZGVzdGluYXRpb25zWzEyOF07CiAgICAgbWVtc2V0KGRlc3RpbmF0aW9ucywgMHhmZiwg
c2l6ZW9mKGRlc3RpbmF0aW9ucykpOwpAQCAtMTg3LDMyICsyNjAsODIgQEAgdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYQogICAgICAgICAvLyBJZiBhIHJhbmdlIGdvZXMg
dG8gMTI3LCB0aGVyZSB3aWxsIG5ldmVyIGJlIHZhbHVlcyBoaWdoZXIgdGhhbiBpdCwgc28gY2hl
Y2tpbmcgZm9yIGNhc2UtaW5zZW5zaXRpdmUgcmFuZ2VzIHdvdWxkIGFsd2F5cyBmYWlsLgogICAg
ICAgICByYW5nZXMuYXBwZW5kKFJhbmdlKHJhbmdlTWluLCAxMjcsIGRlc3RpbmF0aW9uc1tyYW5n
ZU1pbl0sIHRydWUpKTsKICAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFu
Z2VzKQotICAgICAgICBjb21waWxlQ2hlY2tGb3JSYW5nZShyYW5nZSk7Ci0gICAgaWYgKG5vZGUu
aGFzRmFsbGJhY2tUcmFuc2l0aW9uKCkpCi0gICAgICAgIGVtaXRKdW1wKG5vZGUuZmFsbGJhY2tU
cmFuc2l0aW9uRGVzdGluYXRpb24obV9kZmEpKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRUZXJt
aW5hdGUoKTsKKyAgICByZXR1cm4gcmFuZ2VzOworfQorICAgIAordW5zaWduZWQgREZBQnl0ZWNv
ZGVDb21waWxlcjo6Y2hlY2tGb3JSYW5nZU1heEJ5dGVjb2RlU2l6ZShjb25zdCBSYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKHJhbmdlLm1pbiA9PSByYW5nZS5tYXgpCisgICAgICAgIHJldHVybiBz
aXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSkg
KyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOworICAgIHJldHVybiBzaXplb2Yo
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlKSAr
IDIgKiBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOwogfQogCi12b2lkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVDaGVja0ZvclJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkK
K3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZUNoZWNrRm9yUmFuZ2UodWludDMyX3Qg
bm9kZUluZGV4LCBjb25zdCBSYW5nZSYgcmFuZ2UpCiB7CisgICAgdW5zaWduZWQgc3RhcnRTaXpl
ID0gbV9ieXRlY29kZS5zaXplKCk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyYW5nZS5tYXgg
PCAxMjgsICJUaGUgREZBIGVuZ2luZSBvbmx5IHN1cHBvcnRzIHRoZSBBU0NJSSBhbHBoYWJldC4i
KTsKICAgICBBU1NFUlQocmFuZ2UubWluIDw9IHJhbmdlLm1heCk7CiAKICAgICBpZiAocmFuZ2Uu
bWluID09IHJhbmdlLm1heCkKLSAgICAgICAgZW1pdENoZWNrVmFsdWUocmFuZ2UubWluLCByYW5n
ZS5kZXN0aW5hdGlvbiwgcmFuZ2UuY2FzZVNlbnNpdGl2ZSk7CisgICAgICAgIGVtaXRDaGVja1Zh
bHVlKHJhbmdlLm1pbiwgbm9kZUluZGV4LCByYW5nZS5kZXN0aW5hdGlvbiwgcmFuZ2UuY2FzZVNl
bnNpdGl2ZSk7CiAgICAgZWxzZQotICAgICAgICBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHJhbmdlLm1p
biwgcmFuZ2UubWF4LCByYW5nZS5kZXN0aW5hdGlvbiwgcmFuZ2UuY2FzZVNlbnNpdGl2ZSk7Cisg
ICAgICAgIGVtaXRDaGVja1ZhbHVlUmFuZ2UocmFuZ2UubWluLCByYW5nZS5tYXgsIG5vZGVJbmRl
eCwgcmFuZ2UuZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5zaXRpdmUpOworICAgIAorICAgIEFT
U0VSVF9VTlVTRUQoc3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBj
aGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKHJhbmdlKSk7Cit9CisKK3Vuc2lnbmVkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6Om5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShjb25zdCBERkFO
b2RlJiBub2RlKQoreworICAgIHVuc2lnbmVkIHNpemUgPSAwOworICAgIGZvciAoY29uc3QgYXV0
byYgcmFuZ2UgOiByYW5nZXMobm9kZSkpCisgICAgICAgIHNpemUgKz0gY2hlY2tGb3JSYW5nZU1h
eEJ5dGVjb2RlU2l6ZShyYW5nZSk7CisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9u
KCkpCisgICAgICAgIHNpemUgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXAp
ICsgc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBlbHNlCisgICAgICAgIHNpemUgKz0gaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOwor
ICAgIHJldHVybiBzaXplOworfQorCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVO
b2RlVHJhbnNpdGlvbnModWludDMyX3Qgbm9kZUluZGV4KQoreworICAgIGNvbnN0IERGQU5vZGUm
IG5vZGUgPSBtX2RmYS5ub2Rlc1tub2RlSW5kZXhdOworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9
IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgIAorICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiBy
YW5nZXMobm9kZSkpCisgICAgICAgIGNvbXBpbGVDaGVja0ZvclJhbmdlKG5vZGVJbmRleCwgcmFu
Z2UpOworICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbigpKQorICAgICAgICBlbWl0
SnVtcChub2RlSW5kZXgsIG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uRGVzdGluYXRpb24obV9kZmEp
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKKworICAgIEFTU0VSVF9VTlVT
RUQoc3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBub2RlVHJhbnNp
dGlvbnNNYXhCeXRlY29kZVNpemUobm9kZSkpOwogfQogCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGls
ZXI6OmNvbXBpbGUoKQogewotICAgIC8vIERGQSBoZWFkZXIuCiAgICAgdWludDMyX3Qgc3RhcnRM
b2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpOwotICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRl
Y29kZSwgMCk7CisgICAgYXBwZW5kPERGQUhlYWRlcj4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMg
d2lsbCBiZSBzZXQgd2hlbiB3ZSBhcmUgZmluaXNoZWQgY29tcGlsaW5nIHRoaXMgREZBLgorCiAg
ICAgbV9ub2RlU3RhcnRPZmZzZXRzLnJlc2l6ZShtX2RmYS5ub2Rlcy5zaXplKCkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmYS5ub2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9ub2RlU3RhcnRPZmZzZXRzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgIAorICAgIC8vIFBvcHVsYXRlIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cyB3aXRoIGEg
d29yc3QtY2FzZSBpbmRleCBvZiB3aGVyZSB0aGUgbm9kZSB3b3VsZCBiZSB3aXRoIG5vIGJyYW5j
aCBjb21wYWN0aW9uLgorICAgIC8vIENvbXBhY3RpbmcgdGhlIGJyYW5jaGVzIHVzaW5nIDEtNCBi
eXRlIHNpZ25lZCBqdW1wIGRpc3RhbmNlcyBzaG91bGQgb25seSBtYWtlIG5vZGVzIGNsb3NlciB0
b2dldGhlciB0aGFuIHRoaXMuCisgICAgQVNTRVJUKG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cy5pc0Vt
cHR5KCkpOworICAgIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0cy5jbGVhcigpOworICAgIG1fbWF4Tm9k
ZVN0YXJ0T2Zmc2V0cy5yZXNpemUobV9kZmEubm9kZXMuc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBy
b290QWN0aW9uc1NpemUgPSAwOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbV9kZmEubm9k
ZXNbbV9kZmEucm9vdF0uYWN0aW9ucyhtX2RmYSkpCisgICAgICAgIHJvb3RBY3Rpb25zU2l6ZSAr
PSBhcHBlbmRBY3Rpb25CeXRlY29kZVNpemUoYWN0aW9uKTsKKyAgICBtX21heE5vZGVTdGFydE9m
ZnNldHNbbV9kZmEucm9vdF0gPSBzaXplb2YoREZBSGVhZGVyKSArIHJvb3RBY3Rpb25zU2l6ZTsK
KyAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBzaXplb2YoREZBSGVhZGVyKSArIGNvbXBpbGVkTm9k
ZU1heEJ5dGVjb2RlU2l6ZShtX2RmYS5yb290KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbV9kZmEubm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgIT0gbV9kZmEucm9v
dCkgeworICAgICAgICAgICAgbV9tYXhOb2RlU3RhcnRPZmZzZXRzW2ldID0gbmV4dEluZGV4Owor
ICAgICAgICAgICAgbmV4dEluZGV4ICs9IGNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6ZShpKTsK
KyAgICAgICAgfQorICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHJvb3QgaXMgYWx3
YXlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ5dGVjb2RlLgogICAgIGNvbXBpbGVOb2RlKG1f
ZGZhLnJvb3QsIHRydWUpOwpAQCAtMjIwLDE5ICszNDMsMzYgQEAgdm9pZCBERkFCeXRlY29kZUNv
bXBpbGVyOjpjb21waWxlKCkKICAgICAgICAgaWYgKGkgIT0gbV9kZmEucm9vdCkKICAgICAgICAg
ICAgIGNvbXBpbGVOb2RlKGksIGZhbHNlKTsKICAgICB9CisgICAgCisgICAgQVNTRVJUKG1fbWF4
Tm9kZVN0YXJ0T2Zmc2V0cy5zaXplKCkgPT0gbV9ub2RlU3RhcnRPZmZzZXRzLnNpemUoKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZhLm5vZGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX25vZGVTdGFydE9mZnNldHNbaV0gIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKQorICAgICAgICAgICAgQVNTRVJUKG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0
c1tpXSA+PSBtX25vZGVTdGFydE9mZnNldHNbaV0pOworICAgIH0KIAogICAgIC8vIExpbmsuCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBsaW5rUmVjb3JkIDogbV9saW5rUmVjb3JkcykgewotICAgICAg
ICB1aW50MzJfdCBvZmZzZXQgPSBsaW5rUmVjb3JkLmZpcnN0OwotICAgICAgICBBU1NFUlQoISgq
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZtX2J5dGVjb2RlW29mZnNldF0pKSk7Ci0KLSAg
ICAgICAgdWludDMyX3QgdGFyZ2V0ID0gbV9ub2RlU3RhcnRPZmZzZXRzW2xpbmtSZWNvcmQuc2Vj
b25kXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSk7Ci0gICAgICAgIHNldDMyQml0cyhtX2J5dGVjb2RlLCBvZmZz
ZXQsIG1fbm9kZVN0YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29uZF0pOworICAgICAgICB1aW50
MzJfdCBkZXN0aW5hdGlvbiA9IG1fbm9kZVN0YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLmRlc3RpbmF0
aW9uTm9kZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdGluYXRpb24gPCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgIGludDMyX3QgZGlzdGFu
Y2UgPSBkZXN0aW5hdGlvbiAtIGxpbmtSZWNvcmQuaW5zdHJ1Y3Rpb25Mb2NhdGlvbjsKKyAgICAg
ICAgQVNTRVJUKGFicyhkaXN0YW5jZSkgPD0gYWJzKGxpbmtSZWNvcmQubG9uZ2VzdFBvc3NpYmxl
SnVtcCkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChsaW5rUmVjb3JkLmp1bXBTaXplKSB7
CisgICAgICAgIGNhc2UgSW50ODoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpc3RhbmNl
ID09IHN0YXRpY19jYXN0PGludDhfdD4oZGlzdGFuY2UpKTsKKyAgICAgICAgICAgIHNldEJpdHM8
aW50OF90PihtX2J5dGVjb2RlLCBsaW5rUmVjb3JkLmp1bXBMb2NhdGlvbiwgc3RhdGljX2Nhc3Q8
aW50OF90PihkaXN0YW5jZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
MTY6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaXN0YW5jZSA9PSBzdGF0aWNfY2FzdDxp
bnQxNl90PihkaXN0YW5jZSkpOworICAgICAgICAgICAgc2V0Qml0czxpbnQxNl90PihtX2J5dGVj
b2RlLCBsaW5rUmVjb3JkLmp1bXBMb2NhdGlvbiwgc3RhdGljX2Nhc3Q8aW50MTZfdD4oZGlzdGFu
Y2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAg
ICAgc2V0Qml0czxpbnQzMl90PihtX2J5dGVjb2RlLCBsaW5rUmVjb3JkLmp1bXBMb2NhdGlvbiwg
ZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgLy8gU2V0IHNpemUgaGVhZGVyLgotICAgIHNldDMyQml0cyhtX2J5dGVjb2RlLCBzdGFydExv
Y2F0aW9uLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0TG9jYXRpb24pOworICAgIHNldEJpdHM8
REZBSGVhZGVyPihtX2J5dGVjb2RlLCBzdGFydExvY2F0aW9uLCBtX2J5dGVjb2RlLnNpemUoKSAt
IHN0YXJ0TG9jYXRpb24pOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29t
cGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUNvbXBpbGVyLmgJKHJldmlzaW9uIDE4NTU5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjIsMjQgKzYyLDM2IEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnQzMl90IGRlc3RpbmF0aW9u
OwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmU7CiAgICAgfTsKLSAgICB2b2lkIGNvbXBpbGVO
b2RlKHVpbnQzMl90LCBib29sIHJvb3QpOwotICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9u
cyhjb25zdCBERkFOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBS
YW5nZSYpOworICAgIFZlY3RvcjxSYW5nZT4gcmFuZ2VzKGNvbnN0IERGQU5vZGUmKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBjb21waWxlZE5vZGVNYXhCeXRlY29kZVNpemUodWludDMyX3QgaW5kZXgp
OworICAgIHZvaWQgY29tcGlsZU5vZGUodWludDMyX3QgaW5kZXgsIGJvb2wgcm9vdCk7CisgICAg
dW5zaWduZWQgbm9kZVRyYW5zaXRpb25zTWF4Qnl0ZWNvZGVTaXplKGNvbnN0IERGQU5vZGUmKTsK
KyAgICB2b2lkIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnModWludDMyX3Qgbm9kZUluZGV4KTsKKyAg
ICB1bnNpZ25lZCBjaGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKGNvbnN0IFJhbmdlJik7Cisg
ICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZSh1aW50MzJfdCBub2RlSW5kZXgsIGNvbnN0IFJh
bmdlJik7CisgICAgaW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wKHVpbnQzMl90IGp1bXBMb2Nh
dGlvbiwgdWludDMyX3Qgc291cmNlTm9kZUluZGV4LCB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJ
bmRleCk7CiAKICAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24odWludDY0X3QpOwotICAgIHZvaWQg
ZW1pdEp1bXAodWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwotICAgIHZvaWQgZW1pdENo
ZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJv
b2wgY2FzZVNlbnNpdGl2ZSk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3Qg
bG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKKyAgICB2b2lkIGVtaXRKdW1wKHVpbnQzMl90IHNvdXJj
ZU5vZGVJbmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpOworICAgIHZvaWQgZW1p
dENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMyX3Qgc291cmNlTm9kZUluZGV4LCB1aW50
MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKKyAgICB2b2lk
IGVtaXRDaGVja1ZhbHVlUmFuZ2UodWludDhfdCBsb3dWYWx1ZSwgdWludDhfdCBoaWdoVmFsdWUs
IHVpbnQzMl90IHNvdXJjZU5vZGVJbmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgs
IGJvb2wgY2FzZVNlbnNpdGl2ZSk7CiAgICAgdm9pZCBlbWl0VGVybWluYXRlKCk7CiAKICAgICBW
ZWN0b3I8REZBQnl0ZWNvZGU+JiBtX2J5dGVjb2RlOwogICAgIGNvbnN0IERGQSYgbV9kZmE7CiAg
ICAgCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX21heE5vZGVTdGFydE9mZnNldHM7CiAgICAgVmVj
dG9yPHVpbnQzMl90PiBtX25vZGVTdGFydE9mZnNldHM7CiAgICAgCi0gICAgLy8gVGhlIGZpcnN0
IHZhbHVlIGlzIHRoZSBpbmRleCBpbiB0aGUgYnl0ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1w
IGlzIHRvIGJlIHdyaXR0ZW4uCi0gICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXgg
b2YgdGhlIG5vZGUgdG8ganVtcCB0by4KLSAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQzMl90LCB1
aW50MzJfdD4+IG1fbGlua1JlY29yZHM7CisgICAgc3RydWN0IExpbmtSZWNvcmQgeworICAgICAg
ICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplOworICAgICAgICBpbnQzMl90IGxvbmdlc3RQ
b3NzaWJsZUp1bXA7CisgICAgICAgIHVpbnQzMl90IGluc3RydWN0aW9uTG9jYXRpb247CisgICAg
ICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbjsKKyAgICAgICAgdWludDMyX3QgZGVzdGluYXRpb25O
b2RlSW5kZXg7CisgICAgfTsKKyAgICBWZWN0b3I8TGlua1JlY29yZD4gbV9saW5rUmVjb3JkczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMTg1NTkzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDEwICszNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgQ29udGVudEV4dGVu
c2lvbnMgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KLXN0YXRpYyBpbmxpbmUgSW50
VHlwZSBnZXRCaXRzKGNvbnN0IERGQUJ5dGVjb2RlKiBieXRlY29kZSwgdW5zaWduZWQgYnl0ZWNv
ZGVMZW5ndGgsIHVuc2lnbmVkIGluZGV4LCBWZWN0b3I8Ym9vbD4mIHBhZ2VzVXNlZCkKK3N0YXRp
YyBpbmxpbmUgSW50VHlwZSBnZXRCaXRzKGNvbnN0IERGQUJ5dGVjb2RlKiBieXRlY29kZSwgdWlu
dDMyX3QgYnl0ZWNvZGVMZW5ndGgsIHVpbnQzMl90IGluZGV4LCBWZWN0b3I8Ym9vbD4mIHBhZ2Vz
VXNlZCkKIHsKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfTUVNT1JZX1JFUE9SVElORwotICAgIHVu
c2lnbmVkIHBhZ2UgPSBpbmRleCAvIENPTlRFTlRfRVhURU5TSU9OU19QQUdFX1NJWkU7CisgICAg
dWludDMyX3QgcGFnZSA9IGluZGV4IC8gQ09OVEVOVF9FWFRFTlNJT05TX1BBR0VfU0laRTsKICAg
ICB3aGlsZSAocGFnZXNVc2VkLnNpemUoKSA8IChieXRlY29kZUxlbmd0aCArIENPTlRFTlRfRVhU
RU5TSU9OU19QQUdFX1NJWkUgLSAxKSAvIENPTlRFTlRfRVhURU5TSU9OU19QQUdFX1NJWkUpCiAg
ICAgICAgIHBhZ2VzVXNlZC5hcHBlbmQoZmFsc2UpOwogICAgIHBhZ2VzVXNlZFtwYWdlXSA9IHRy
dWU7CkBAIC00OSwyMyArNDksNjQgQEAgc3RhdGljIGlubGluZSBJbnRUeXBlIGdldEJpdHMoY29u
c3QgREZBQgogICAgIEFTU0VSVF9VTlVTRUQoYnl0ZWNvZGVMZW5ndGgsIGluZGV4ICsgc2l6ZW9m
KEludFR5cGUpIDw9IGJ5dGVjb2RlTGVuZ3RoKTsKICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSW50VHlwZSo+KCZieXRlY29kZVtpbmRleF0pOwogfQotICAgIAotdm9pZCBERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dy
YW1Db3VudGVyLCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQorCisvLyBGSVhNRTog
R2V0IHJpZCBvZiBwYWdlc1VzZWQuIFdlIGRvbid0IG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUg
cGFnZXMgdXNlZC4KK3N0YXRpYyBpbmxpbmUgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBnZXRJbnN0
cnVjdGlvbihjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUsIHVpbnQzMl90IGJ5dGVjb2RlTGVu
Z3RoLCB1aW50MzJfdCBpbmRleCwgVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpCit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KGdldEJpdHM8dWludDhfdD4o
Ynl0ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFnZXNVc2VkKSAmIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb25NYXNrKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QganVtcFNpemVJbkJ5
dGVzKERGQUJ5dGVjb2RlSnVtcFNpemUganVtcFNpemUpCit7CisgICAgc3dpdGNoIChqdW1wU2l6
ZSkgeworICAgIGNhc2UgSW50ODoKKyAgICAgICAgcmV0dXJuIHNpemVvZihpbnQ4X3QpOworICAg
IGNhc2UgSW50MTY6CisgICAgICAgIHJldHVybiBzaXplb2YoaW50MTZfdCk7CisgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihpbnQzMl90KTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSBERkFCeXRlY29kZUp1bXBTaXplIGdldEp1bXBTaXplKGNvbnN0IERGQUJ5dGVjb2RlKiBi
eXRlY29kZSwgdWludDMyX3QgYnl0ZWNvZGVMZW5ndGgsIHVpbnQzMl90IGluZGV4LCBWZWN0b3I8
Ym9vbD4mIHBhZ2VzVXNlZCkKIHsKLSAgICBBU1NFUlQoZ2V0Qml0czxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9w
YWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgotICAgICAg
ICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCi0gICAgICAgIHx8IGdldEJpdHM8REZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3Jh
bUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRB
Y3Rpb25EZWZhdWx0U3R5bGVzaGVldCk7Ci0gICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8gSWZE
b21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpKTsKKyAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBT
aXplID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVKdW1wU2l6ZT4oZ2V0Qml0czx1aW50OF90Pihi
eXRlY29kZSwgYnl0ZWNvZGVMZW5ndGgsIGluZGV4LCBwYWdlc1VzZWQpICYgREZBQnl0ZWNvZGVK
dW1wU2l6ZU1hc2spOworICAgIEFTU0VSVChqdW1wU2l6ZSA9PSBERkFCeXRlY29kZUp1bXBTaXpl
OjpJbnQzMiB8fCBqdW1wU2l6ZSA9PSBERkFCeXRlY29kZUp1bXBTaXplOjpJbnQxNiB8fCBqdW1w
U2l6ZSA9PSBERkFCeXRlY29kZUp1bXBTaXplOjpJbnQ4KTsKKyAgICByZXR1cm4ganVtcFNpemU7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBnZXRKdW1wRGlzdGFuY2UoY29uc3QgREZBQnl0
ZWNvZGUqIGJ5dGVjb2RlLCB1aW50MzJfdCBieXRlY29kZUxlbmd0aCwgdWludDMyX3QgaW5kZXgs
IFZlY3Rvcjxib29sPiYgcGFnZXNVc2VkLCBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplKQor
eworICAgIHN3aXRjaCAoanVtcFNpemUpIHsKKyAgICBjYXNlIEludDg6CisgICAgICAgIHJldHVy
biBnZXRCaXRzPGludDhfdD4oYnl0ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFnZXNV
c2VkKTsKKyAgICBjYXNlIEludDE2OgorICAgICAgICByZXR1cm4gZ2V0Qml0czxpbnQxNl90Pihi
eXRlY29kZSwgYnl0ZWNvZGVMZW5ndGgsIGluZGV4LCBwYWdlc1VzZWQpOworICAgIGNhc2UgSW50
MzI6CisgICAgICAgIHJldHVybiBnZXRCaXRzPGludDMyX3Q+KGJ5dGVjb2RlLCBieXRlY29kZUxl
bmd0aCwgaW5kZXgsIHBhZ2VzVXNlZCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFtQ291bnRlciwgQWN0
aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKK3sKKyAgICBBU1NFUlQoZ2V0SW5zdHJ1Y3Rp
b24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNV
c2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KKyAgICAgICAgfHwg
Z2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25X
aXRoSWZEb21haW4KKyAgICAgICAgfHwgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCk7CisgICAgYWN0aW9ucy5h
ZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Z2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNv
dW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiksIG1fcGFnZXNVc2VkKSkpOwog
ICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25T
aXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pID09
IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKSA9PSBpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bkRlZmF1bHRTdHlsZXNoZWV0KSk7CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRl
ciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCit2b2lk
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bih1aW50MzJfdCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rp
b25zLCBib29sIGlmRG9tYWluKQogewotICAgIEFTU0VSVChnZXRCaXRzPERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBt
X3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uCi0gICAgICAgIHx8IGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21h
aW4pOwotICAgIHVpbnQxNl90IGZsYWdzVG9DaGVjayA9IGdldEJpdHM8dWludDE2X3Q+KG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVj
b2RlKSwgbV9wYWdlc1VzZWQpOworICAgIEFTU0VSVChnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2Rl
LCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbgorICAgICAgICB8fCBn
ZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgdWludDE2X3QgZmxhZ3NUb0NoZWNrID0gZ2V0
Qml0czx1aW50MTZfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiksIG1fcGFnZXNVc2VkKTsKIAogICAg
IHVpbnQxNl90IGxvYWRUeXBlRmxhZ3MgPSBmbGFnc1RvQ2hlY2sgJiBMb2FkVHlwZU1hc2s7CiAg
ICAgdWludDE2X3QgcmVzc291cmNlVHlwZUZsYWdzID0gZmxhZ3NUb0NoZWNrICYgUmVzb3VyY2VU
eXBlTWFzazsKQEAgLTc0LDcgKzExNSw3IEBAIHZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
aW50ZXJwcmV0VGUKICAgICBib29sIHJlc3NvdXJjZVR5cGVNYXRjaGVzID0gcmVzc291cmNlVHlw
ZUZsYWdzID8gKHJlc3NvdXJjZVR5cGVGbGFncyAmIGZsYWdzKSA6IHRydWU7CiAgICAgCiAgICAg
aWYgKGxvYWRUeXBlTWF0Y2hlcyAmJiByZXNzb3VyY2VUeXBlTWF0Y2hlcykKLSAgICAgICAgYWN0
aW9ucy5hZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQxNl90KSwgbV9w
YWdlc1VzZWQpKSk7CisgICAgICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxh
ZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQxNl90KSwgbV9wYWdlc1VzZWQpKSk7CiAgICAgcHJv
Z3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOwogICAgIEFTU0VSVChpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKIH0K
QEAgLTg0LDExICsxMjUsMTEgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlYwogICAgIEFjdGlvbnMgYWN0aW9uczsKIAogICAgIC8vIERGQSBoZWFkZXIuCi0gICAgdW5z
aWduZWQgZGZhQnl0ZWNvZGVMZW5ndGggPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCAwLCBtX3BhZ2VzVXNlZCk7Ci0gICAgdW5zaWduZWQgcHJvZ3JhbUNv
dW50ZXIgPSBzaXplb2YodW5zaWduZWQpOworICAgIHVpbnQzMl90IGRmYUJ5dGVjb2RlTGVuZ3Ro
ID0gZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgMCwgbV9w
YWdlc1VzZWQpOworICAgIHVpbnQzMl90IHByb2dyYW1Db3VudGVyID0gc2l6ZW9mKHVpbnQzMl90
KTsKIAogICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVjb2RlTGVuZ3RoKSB7Ci0g
ICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDxE
RkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3VudGVyXSk7CisgICAg
ICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBnZXRJbnN0cnVjdGlvbiht
X2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQp
OwogICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCiAgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRB
Y3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQpAQCAt
MTEzLDE4ICsxNTQsMTggQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRl
YwogICAgIAogICAgIEFjdGlvbnMgYWN0aW9uczsKICAgICAKLSAgICB1bnNpZ25lZCBwcm9ncmFt
Q291bnRlciA9IDA7CisgICAgdWludDMyX3QgcHJvZ3JhbUNvdW50ZXIgPSAwOwogICAgIHdoaWxl
IChwcm9ncmFtQ291bnRlciA8IG1fYnl0ZWNvZGVMZW5ndGgpIHsKIAogICAgICAgICAvLyBERkEg
aGVhZGVyLgotICAgICAgICB1bnNpZ25lZCBkZmFTdGFydCA9IHByb2dyYW1Db3VudGVyOwotICAg
ICAgICB1bnNpZ25lZCBkZmFCeXRlY29kZUxlbmd0aCA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7Ci0g
ICAgICAgIHByb2dyYW1Db3VudGVyICs9IHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVpbnQz
Ml90IGRmYVN0YXJ0ID0gcHJvZ3JhbUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IGRmYUJ5dGVj
b2RlTGVuZ3RoID0gZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gc2l6ZW9mKHVpbnQzMl90KTsKIAogICAgICAgICAvLyBTa2lwIHRoZSBkZWZhdWx0IHN0eWxl
c2hlZXQgYWN0aW9ucyBvbiB0aGUgREZBIHJvb3QuIFRoZXNlIGFyZSBhY2Nlc3NlZCB2aWEgYWN0
aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QuCiAgICAgICAgIGlmICghZGZhU3Rh
cnQpIHsKICAgICAgICAgICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVjb2RlTGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlv
biA9IHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3Jh
bUNvdW50ZXJdKTsKKyAgICAgICAgICAgICAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3Ry
dWN0aW9uID0gZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hl
ZXQpCiAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVs
dFN0eWxlc2hlZXQpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikKQEAgLTEzNywxOCArMTc4LDE4IEBA
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgIGlm
IChwcm9ncmFtQ291bnRlciA+PSBtX2J5dGVjb2RlTGVuZ3RoKQogICAgICAgICAgICAgICAgIHJl
dHVybiBhY3Rpb25zOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlW3By
b2dyYW1Db3VudGVyXSkgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCi0g
ICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9i
eXRlY29kZVtwcm9ncmFtQ291bnRlcl0pICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbiwgCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGdl
dEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
LCBtX3BhZ2VzVXNlZCkgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCisg
ICAgICAgICAgICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSAhPSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24sCiAgICAgICAgICAgICAgICAgIlRyaWdnZXJz
IHRoYXQgbWF0Y2ggZXZlcnl0aGluZyBzaG91bGQgb25seSBiZSBpbiB0aGUgZmlyc3QgREZBLiIp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJbnRlcnByZXQgdGhlIGJ5dGVjb2Rl
IGZyb20gdGhpcyBERkEuCiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUg
aWYgaW50ZXJwcmV0aW5nIGNvcnJlY3RseSBjb21waWxlZCBieXRlY29kZS4KLSAgICAgICAgdW5z
aWduZWQgdXJsSW5kZXggPSAwOworICAgICAgICB1aW50MzJfdCB1cmxJbmRleCA9IDA7CiAgICAg
ICAgIGJvb2wgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSBmYWxzZTsKICAgICAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtQ291bnRlciA8PSBtX2J5dGVj
b2RlTGVuZ3RoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbj4obV9ieXRlY29kZVtwcm9ncmFtQ291bnRlcl0pKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkpIHsKIAogICAgICAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6CiAgICAgICAgICAgICAgICAgZ290byBuZXh0REZBOwpA
QCAtMTU5LDEzICsyMDAsMTUgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlYwogCiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJh
Y3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0ZWNvZGUuCiAg
ICAgICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSB1cmxbdXJsSW5kZXhdOwotICAgICAgICAg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFn
ZXNVc2VkKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGRmYVN0YXJ0
ICsgZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3Jh
bUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2Vz
VXNlZCk7CisgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IGdl
dEp1bXBTaXplKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBt
X3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBnZXRCaXRzPHVp
bnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6
ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pLCBtX3BhZ2VzVXNlZCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QganVtcExvY2F0aW9uID0gcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2Yo
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW1Db3VudGVyICs9IGdldEp1bXBEaXN0YW5jZShtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBqdW1wTG9jYXRpb24sIG1fcGFnZXNVc2VkLCBqdW1wU2l6ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAg
dXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB1
cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgogICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBp
bnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNr
VmFsdWVDYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsganVt
cFNpemVJbkJ5dGVzKGp1bXBTaXplKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIApAQCAtMTc1LDEzICsyMTgsMTUgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyBERkFCeXRlYwogCiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBu
ZXh0IGNoYXJhY3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0
ZWNvZGUuCiAgICAgICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSB0b0FTQ0lJTG93ZXIodXJs
W3VybEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBnZXRCaXRzPHVp
bnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6
ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy
b2dyYW1Db3VudGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBz
aXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBERkFCeXRlY29k
ZUp1bXBTaXplIGp1bXBTaXplID0gZ2V0SnVtcFNpemUobV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiksIG1fcGFn
ZXNVc2VkKSkgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1
aW50OF90KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gZ2V0SnVtcERp
c3RhbmNlKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIGp1bXBMb2NhdGlvbiwgbV9wYWdl
c1VzZWQsIGp1bXBTaXplKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBl
ZGdlIGluIHRoZSBERkEuCiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSk7CisgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIHNpemVvZih1aW50OF90KSArIGp1bXBTaXplSW5CeXRlcyhqdW1wU2l6ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MTkwLDE0ICsyMzUsMTYgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRl
YwogICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRERkE7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSB1cmxbdXJsSW5kZXhdOwotICAgICAgICAg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPj0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFn
ZXNVc2VkKQotICAgICAgICAgICAgICAgICAgICAmJiBjaGFyYWN0ZXIgPD0gZ2V0Qml0czx1aW50
OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKSkgewotICAgICAg
ICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGRmYVN0YXJ0ICsgZ2V0Qml0czx1bnNpZ25l
ZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2Yo
REZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2Vz
VXNlZCk7CisgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IGdl
dEp1bXBTaXplKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBt
X3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA+PSBnZXRCaXRzPHVp
bnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6
ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pLCBtX3BhZ2VzVXNlZCkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgY2hhcmFjdGVyIDw9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bikgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKSkgeworICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRl
Y29kZUluc3RydWN0aW9uKSArIDIgKiBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW1Db3VudGVyICs9IGdldEp1bXBEaXN0YW5jZShtX2J5dGVjb2RlLCBtX2J5dGVj
b2RlTGVuZ3RoLCBqdW1wTG9jYXRpb24sIG1fcGFnZXNVc2VkLCBqdW1wU2l6ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgdXJs
SW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB1cmxJ
bmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgogICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFs
dWVSYW5nZUNhc2VTZW5zaXRpdmUpOworICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRl
ciArPSBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyAyICogc2l6ZW9mKHVpbnQ4X3Qp
ICsganVtcFNpemVJbkJ5dGVzKGp1bXBTaXplKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KIApAQCAtMjA2LDI0ICsyNTMsMjkgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRERkE7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSB0b0FTQ0lJ
TG93ZXIodXJsW3VybEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA+PSBn
ZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpCi0gICAgICAgICAgICAgICAg
ICAgICYmIGNoYXJhY3RlciA8PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1
aW50OF90KSwgbV9wYWdlc1VzZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3Vu
dGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWlu
dDhfdCkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICBE
RkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gZ2V0SnVtcFNpemUobV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVyID49IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlv
biksIG1fcGFnZXNVc2VkKQorICAgICAgICAgICAgICAgICAgICAmJiBjaGFyYWN0ZXIgPD0gZ2V0
Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSwgbV9w
YWdlc1VzZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9
IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgMiAqIHNp
emVvZih1aW50OF90KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gZ2V0
SnVtcERpc3RhbmNlKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIGp1bXBMb2NhdGlvbiwg
bV9wYWdlc1VzZWQsIGp1bXBTaXplKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZyA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50
cyBhbiBlZGdlIGluIHRoZSBERkEuCiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMo
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gc2l6ZW9mKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24pICsgMiAqIHNpemVvZih1aW50OF90KSArIGp1bXBTaXplSW5CeXRlcyhqdW1w
U2l6ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKKyAgICAgICAgICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDogewogICAgICAgICAgICAgICAgIGlmICghdXJs
W3VybEluZGV4XSB8fCB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZykKICAgICAgICAgICAgICAg
ICAgICAgZ290byBuZXh0REZBOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBy
b2dyYW1Db3VudGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1f
cGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gZ2V0SnVtcFNpemUobV9ieXRlY29k
ZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsKKyAgICAg
ICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBnZXRKdW1wRGlzdGFuY2UobV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwganVtcExvY2F0aW9uLCBtX3BhZ2VzVXNlZCwganVtcFNpemUpOwog
ICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGlu
IHRoZSBERkEuCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb246CiAgICAgICAgICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHByb2dy
YW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRJbmZvLmgJKHJldmlzaW9uIDE4NTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
dHlwZWRlZiB1aW50MTZfdCBSZXNvdXJjZUZsYWdzOwogLy8gVGhlIG5leHQgYml0IGlzIHVzZWQg
dG8gbWFyayBhY3Rpb25zIHRoYXQgYXJlIGZyb20gYSBydWxlIHdpdGggYW4gaWYtZG9tYWluIGNv
bmRpdGlvbi4KIC8vIFRoZSBuZXh0IGJpdCBpcyB1c2VkIHRvIG1hcmsgYWN0aW9ucyB0aGF0IGlu
IHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQuCiAvLyBUaGUgdmFsdWVzIC0xIGFuZCAtMiBhcmUgdXNl
ZCBmb3IgcmVtb3ZlZCBhbmQgZW1wdHkgdmFsdWVzIGluIEhhc2hUYWJsZXMuCitjb25zdCB1aW50
NjRfdCBBY3Rpb25GbGFnTWFzayA9IDB4MDAwMEZGRkYwMDAwMDAwMDsKIGNvbnN0IHVpbnQ2NF90
IElmRG9tYWluRmxhZyA9IDB4MDAwMTAwMDAwMDAwMDAwMDsKIGNvbnN0IHVpbnQ2NF90IERpc3Bs
YXlOb25lU3R5bGVTaGVldEZsYWcgPSAweDAwMDIwMDAwMDAwMDAwMDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254969</attachid>
            <date>2015-06-16 14:30:43 -0700</date>
            <delta_ts>2015-06-16 15:29:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145619-20150616143008.patch</filename>
            <type>text/plain</type>
            <size>46703</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTYwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTA2LTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gSW1wbGVtZW50IGJyYW5jaCBjb21wYWN0aW9uIGZvciBERkEgYnl0ZWNvZGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU2MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyBhbm90aGVyIHBhc3MgdG8gdGhlIERGQUJ5dGVjb2RlQ29tcGlsZXIgd2hpY2gg
ZmluZHMgd2hlcmUgdGhlIGJ5dGVjb2RlIGZyb20gZWFjaCBub2RlCisgICAgICAgIHdvdWxkIGJl
IGlmIGl0IHdlcmUgY29tcGlsZWQgd2l0aCBubyBicmFuY2ggY29tcGFjdGlvbiwgdGhlbiB1c2Vz
IHRoYXQgYXMgYSB3b3JzdC1jYXNlIHZhbHVlIHRvIGRldGVybWluZQorICAgICAgICBob3cgbWFu
eSBieXRlcyBhcmUgbmVlZGVkIHRvIHN0b3JlIHRoZSByZWxhdGl2ZSBqdW1wIGRpc3RhbmNlLiAg
VGhlbiB3aGVuIGxpbmtpbmcsIGl0IHdpbGwgZmlsbCBpbiB0aGUgCisgICAgICAgIHZhbHVlIGFz
IGl0IGFscmVhZHkgZGlkLCBidXQgd2l0aCBhIHZhcmlhYmxlIHNpemUganVtcC4gIFRoZSBqdW1w
cyBhcmUgYWxzbyBub3cgc2lnbmVkIGRpc3RhbmNlcyByZWxhdGl2ZSB0bworICAgICAgICB3aGVy
ZSB0aGUganVtcCBpcyBzdG9yZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLCB3aGljaCBoYXZlIG1hbnkganVtcHMgdGhhdCBhcmUgbmVhciB0aGUg
LTEyOC8xMjcgYnl0ZSBib3VuZGFyeSwKKyAgICAgICAgYW5kIHRoZSBzd2l0Y2ggZnJvbSAxNi1i
aXQganVtcHMgdG8gMzItYml0IGp1bXBzIG5lYXIgdGhlIC02NTUzNi82NTUzNSBieXRlIGJvdW5k
YXJ5IGlzIGFuYWxvZ291cy4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnNtYWxsZXN0UG9z
c2libGVKdW1wU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBl
bmRaZXJvZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnNldEJpdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmFwcGVuZEFjdGlvbkJ5dGVj
b2RlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6bG9uZ2VzdFBvc3NpYmxlSnVtcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6
ZW1pdEp1bXApOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVj
b2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpl
bWl0VGVybWluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZWROb2RlTWF4Qnl0ZWNvZGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjpyYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlQ29tcGlsZXI6OmNoZWNrRm9yUmFuZ2VNYXhCeXRlY29kZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGVDaGVja0ZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZUNvbXBpbGVyOjpub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNv
bXBpbGVOb2RlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OnNldDMyQml0cyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OmdldEJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmdldEluc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpqdW1wU2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmdldEp1bXBTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRK
dW1wRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hl
ZXRGcm9tREZBUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3Vy
Y2VMb2FkSW5mby5oOgorCiAyMDE1LTA2LTE2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FudmFzIGRpbWVuc2lvbnMgc2hvdWxkIGJlIGxp
bWl0ZWQgdG8gNDA5Nng0MDk2IHBpeGVscyBvbiBpT1MgZGV2aWNlcy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg1NTkzKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDYgKzE3OCw4IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29u
dGVudEUKICAgICAgICAgQVNTRVJUKHRyaWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKIAogICAg
ICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgZm9yIGZsYWdzLiBUaGlzIHNob3VsZCBtYXRjaCBo
b3cgdGhleSBhcmUgdXNlZCBpbiBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZS4KKyAg
ICAgICAgQVNTRVJUKCF0cmlnZ2VyLmZsYWdzIHx8IEFjdGlvbkZsYWdNYXNrICYgKHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih0cmlnZ2VyLmZsYWdzKSA8PCAzMikpOworICAgICAgICBBU1NFUlQoISh+
QWN0aW9uRmxhZ01hc2sgJiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIuZmxhZ3MpIDw8
IDMyKSkpOwogICAgICAgICB1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzID0gKHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih0cmlnZ2VyLmZsYWdzKSA8PCAzMikgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYWN0aW9uTG9jYXRpb25zW3J1bGVJbmRleF0pOwogICAgICAgICBVUkxGaWx0ZXJQYXJz
ZXI6OlBhcnNlU3RhdHVzIHN0YXR1cyA9IFVSTEZpbHRlclBhcnNlcjo6T2s7CiAgICAgICAgIGlm
ICh0cmlnZ2VyLmRvbWFpbnMuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDE4NTU5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDQ2ICs0MSw2OSBAQCBlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24g
OiB1aW50CiAKICAgICAvLyBDaGVja1ZhbHVlIGhhcyB0d28gYXJndW1lbnRzOgogICAgIC8vIFRo
ZSB2YWx1ZSB0byBjaGVjayAoMSBieXRlKSwKLSAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBp
ZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCAoNCBieXRlcykuCi0gICAgQ2hlY2tWYWx1ZUNhc2VJbnNl
bnNpdGl2ZSwKLSAgICBDaGVja1ZhbHVlQ2FzZVNlbnNpdGl2ZSwKKyAgICAvLyBUaGUgZGlzdGFu
Y2UgdG8ganVtcCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCAoMS00IGJ5dGVzLCBzaWduZWQpLgor
ICAgIENoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmUgPSAweDAsCisgICAgQ2hlY2tWYWx1ZUNhc2VT
ZW5zaXRpdmUgPSAweDEsCiAKICAgICAvLyBKdW1wIHRvIGFuIG9mZnNldCBpZiB0aGUgaW5wdXQg
dmFsdWUgaXMgd2l0aGluIGEgY2VydGFpbiByYW5nZS4KICAgICAvLyBUaGUgbG93ZXIgdmFsdWUg
KDEgYnl0ZSkuCiAgICAgLy8gVGhlIGhpZ2hlciB2YWx1ZSAoMSBieXRlKS4KLSAgICAvLyBUaGUg
aW5kZXggdG8ganVtcCB0byBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdlICg0IGJ5dGVzKS4K
LSAgICBDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5zaXRpdmUsCi0gICAgQ2hlY2tWYWx1ZVJhbmdl
Q2FzZVNlbnNpdGl2ZSwKKyAgICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCBpZiB0aGUgdmFsdWUg
aXMgaW4gdGhlIHJhbmdlICgxLTQgYnl0ZXMsIHNpZ25lZCkuCisgICAgQ2hlY2tWYWx1ZVJhbmdl
Q2FzZUluc2Vuc2l0aXZlID0gMHgyLAorICAgIENoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRpdmUg
PSAweDMsCiAKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoKICAgICAvLyBU
aGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCi0gICAgQXBwZW5kQWN0aW9uLAotICAgIEFw
cGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0LAotICAgIEFwcGVuZEFjdGlvbldpdGhJZkRvbWFp
biwKKyAgICBBcHBlbmRBY3Rpb24gPSAweDQsCisgICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxl
c2hlZXQgPSAweDUsCisgICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg2LAogICAgIAog
ICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKICAgICAv
LyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcykuCiAgICAgLy8g
VGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbiwKLSAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4sCisgICAgVGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg3LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bldpdGhJZkRvbWFpbiA9IDB4OCwKIAogICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRz
LgotICAgIFRlcm1pbmF0ZSwKKyAgICBUZXJtaW5hdGUgPSAweDksCiAKICAgICAvLyBKdW1wIGhh
cyBvbmUgYXJndW1lbnQ6Ci0gICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8gdW5jb25kaXRpb25h
bGx5ICg0IGJ5dGVzKS4KLSAgICBKdW1wLAorICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wICgx
LTQgYnl0ZXMsIHNpZ25lZCkuCisgICAgSnVtcCA9IDB4QSwKIH07CiAKKy8vIFRoZSBsYXN0IGZv
dXIgYml0cyBjb250YWluIHRoZSBpbnN0cnVjdGlvbiB0eXBlLgorY29uc3QgdWludDhfdCBERkFC
eXRlY29kZUluc3RydWN0aW9uTWFzayA9IDB4MEY7Citjb25zdCB1aW50OF90IERGQUJ5dGVjb2Rl
SnVtcFNpemVNYXNrID0gMHhGMDsKKworLy8gREZBIGJ5dGVjb2RlIHN0YXJ0cyB3aXRoIGEgNCBi
eXRlIGhlYWRlciB3aGljaCBjb250YWlucyB0aGUgc2l6ZSBvZiB0aGlzIERGQS4KK3R5cGVkZWYg
dWludDMyX3QgREZBSGVhZGVyOworCisvLyBBIERGQUJ5dGVjb2RlSnVtcFNpemUgaXMgc3RvcmVk
IGluIHRoZSB0b3AgZm91ciBiaXRzIG9mIHRoZSBERkFCeXRlY29kZUluc3RydWN0aW9ucyB0aGF0
IGhhdmUgYSBqdW1wLgorZW51bSBERkFCeXRlY29kZUp1bXBTaXplIHsKKyAgICBJbnQ4ID0gMHgx
MCwKKyAgICBJbnQxNiA9IDB4MjAsCisgICAgSW50MzIgPSAweDMwLAorfTsKKworc3RhdGljIGlu
bGluZSBERkFCeXRlY29kZUp1bXBTaXplIHNtYWxsZXN0UG9zc2libGVKdW1wU2l6ZShpbnQzMl90
IGxvbmdlc3RQb3NzaWJsZUp1bXApCit7CisgICAgaWYgKGxvbmdlc3RQb3NzaWJsZUp1bXAgPD0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSAmJiBsb25nZXN0UG9zc2libGVKdW1w
ID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkpCisgICAgICAgIHJldHVybiBJ
bnQ4OworICAgIGlmIChsb25nZXN0UG9zc2libGVKdW1wIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MTZfdD46Om1heCgpICYmIGxvbmdlc3RQb3NzaWJsZUp1bXAgPj0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQxNl90Pjo6bWluKCkpCisgICAgICAgIHJldHVybiBJbnQxNjsKKyAgICByZXR1cm4g
SW50MzI7Cit9CisgICAgCiBzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCiB7CiAgICAgc3dp
dGNoIChpbnN0cnVjdGlvbikgewogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hl
Y2tWYWx1ZUNhc2VTZW5zaXRpdmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpD
aGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQzMl90KTsKICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRp
dmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNl
SW5zZW5zaXRpdmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3Qp
OworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVmFyaWFibGUgaW5zdHJ1Y3Rpb24gc2l6ZS4KICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKICAgICBjYXNlIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0OgogICAg
IGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgpA
QCAtOTAsOCArMTEzLDYgQEAgc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0
aAogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9m
KHVpbnQxNl90KSArIHNpemVvZih1aW50MzJfdCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpUZXJtaW5hdGU6CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbik7Ci0gICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQzMl90
KTsKICAgICB9CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg1NTkz
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE1ICs0Myw0MCBAQCBpbmxpbmUgdm9pZCBhcHBl
bmQoVmVjdG9yPERGQUJ5dGVjb2RlPiYgCiAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8SW50VHlwZSo+
KCZieXRlY29kZVtieXRlY29kZS5zaXplKCkgLSBzaXplb2YoSW50VHlwZSldKSA9IHZhbHVlOwog
fQogCi1pbmxpbmUgdm9pZCBzZXQzMkJpdHMoVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUs
IHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCB2YWx1ZSkKK2lubGluZSB2b2lkIGFwcGVuZFplcm9l
cyhWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1w
U2l6ZSkKIHsKLSAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZieXRlY29kZVtpbmRl
eF0pID0gdmFsdWU7CisgICAgc3dpdGNoIChqdW1wU2l6ZSkgeworICAgIGNhc2UgREZBQnl0ZWNv
ZGVKdW1wU2l6ZTo6SW50ODoKKyAgICAgICAgYXBwZW5kPGludDhfdD4oYnl0ZWNvZGUsIDApOyAv
LyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBERkFCeXRlY29kZUp1bXBTaXplOjpJbnQxNjoKKyAgICAgICAgYXBwZW5kPGludDE2
X3Q+KGJ5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcu
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50MzI6Cisg
ICAgICAgIGFwcGVuZDxpbnQzMl90PihieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBi
ZSBzZXQgd2hlbiBsaW5raW5nLgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIHZvaWQgc2V0Qml0cyhWZWN0b3I8REZBQnl0ZWNv
ZGU+JiBieXRlY29kZSwgdWludDMyX3QgaW5kZXgsIEludFR5cGUgdmFsdWUpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggKyBzaXplb2YoSW50VHlwZSkgPD0gYnl0ZWNvZGUuc2l6ZSgpKTsK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEqcmVpbnRlcnByZXRfY2FzdDxJbnRUeXBlKj4oJmJ5
dGVjb2RlW2luZGV4XSksICJSaWdodCBub3cgd2Ugc2hvdWxkIG9ubHkgYmUgdXNpbmcgc2V0Qml0
cyB0byBvdmVyd3JpdGUgdmFsdWVzIHRoYXQgd2VyZSB6ZXJvIGFzIGEgcGxhY2Vob2xkZXIuIik7
CisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8SW50VHlwZSo+KCZieXRlY29kZVtpbmRleF0pID0gdmFs
dWU7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBhcHBlbmRBY3Rpb25CeXRlY29kZVNpemUodWludDY0
X3QgYWN0aW9uKQoreworICAgIGlmIChhY3Rpb24gJiBBY3Rpb25GbGFnTWFzaykKKyAgICAgICAg
cmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkg
KyBzaXplb2YodWludDMyX3QpOworICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbikgKyBzaXplb2YodWludDMyX3QpOworfQorICAgIAogdm9pZCBERkFCeXRlY29kZUNvbXBp
bGVyOjplbWl0QXBwZW5kQWN0aW9uKHVpbnQ2NF90IGFjdGlvbikKIHsKICAgICAvLyBIaWdoIGJp
dHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3MuIFNlZSBjb21waWxlUnVsZUxpc3QuCi0gICAgaWYg
KGFjdGlvbiAmIDB4RkZGRjAwMDAwMDAwKSB7CisgICAgaWYgKGFjdGlvbiAmIEFjdGlvbkZsYWdN
YXNrKSB7CiAgICAgICAgIEFTU0VSVCghKGFjdGlvbiAmIERpc3BsYXlOb25lU3R5bGVTaGVldEZs
YWcpKTsKICAgICAgICAgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykKICAgICAgICAgICAgIGFw
cGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwpAQCAtNzEsMzAg
Kzk2LDYyIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKICAgICB9
CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEp1bXAodWludDMyX3QgZGVzdGlu
YXRpb25Ob2RlSW5kZXgpCitpbnQzMl90IERGQUJ5dGVjb2RlQ29tcGlsZXI6Omxvbmdlc3RQb3Nz
aWJsZUp1bXAodWludDMyX3QgaW5zdHJ1Y3Rpb25Mb2NhdGlvbiwgdWludDMyX3Qgc291cmNlTm9k
ZUluZGV4LCB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKIHsKLSAgICBhcHBlbmQ8REZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
SnVtcCk7Ci0gICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9ieXRlY29k
ZS5zaXplKCksIGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7Ci0gICAgYXBwZW5kPHVpbnQzMl90Piht
X2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisg
ICAgaWYgKG1fbm9kZVN0YXJ0T2Zmc2V0c1tkZXN0aW5hdGlvbk5vZGVJbmRleF0gPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgICAgIC8vIEp1bXBpbmcgdG8g
YSBub2RlIHRoYXQgaGFzbid0IGJlZW4gY29tcGlsZWQgeWV0LCB3ZSBkb24ndCBrbm93IGV4YWN0
bHkgaG93IGZhciBmb3J3YXJkIHdlIHdpbGwgbmVlZCB0byBqdW1wLAorICAgICAgICAvLyBzbyBt
YWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggcm9vbSBmb3IgdGhlIHdvcnN0IHBvc3NpYmxlIGNhc2Us
IHRoZSBmYXJ0aGVzdCBwb3NzaWJsZSBqdW1wCisgICAgICAgIC8vIHdoaWNoIHdvdWxkIGJlIHRo
ZSBkaXN0YW5jZSBpZiB0aGVyZSB3ZXJlIG5vIGNvbXBhY3RlZCBicmFuY2hlcyBiZXR3ZWVuIHRo
aXMganVtcCBhbmQgaXRzIGRlc3RpbmF0aW9uLgorICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25M
b2NhdGlvbiA+PSBtX25vZGVTdGFydE9mZnNldHNbc291cmNlTm9kZUluZGV4XSk7CisgICAgICAg
IEFTU0VSVChtX21heE5vZGVTdGFydE9mZnNldHNbZGVzdGluYXRpb25Ob2RlSW5kZXhdID4gbV9t
YXhOb2RlU3RhcnRPZmZzZXRzW3NvdXJjZU5vZGVJbmRleF0pOworICAgICAgICBBU1NFUlQobV9u
b2RlU3RhcnRPZmZzZXRzW3NvdXJjZU5vZGVJbmRleF0gIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0c1tk
ZXN0aW5hdGlvbk5vZGVJbmRleF0gLSBtX21heE5vZGVTdGFydE9mZnNldHNbc291cmNlTm9kZUlu
ZGV4XSAtIChtX25vZGVTdGFydE9mZnNldHNbc291cmNlTm9kZUluZGV4XSAtIGluc3RydWN0aW9u
TG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICAvLyBKdW1waW5nIHRvIGFuIGFscmVhZHkgY29t
cGlsZWQgbm9kZSwgd2UgYWxyZWFkeSBrbm93IGV4YWN0bHkgd2hlcmUgd2Ugd2lsbCBuZWVkIHRv
IGp1bXAgdG8uCisgICAgQVNTRVJUKG1fbm9kZVN0YXJ0T2Zmc2V0c1tkZXN0aW5hdGlvbk5vZGVJ
bmRleF0gPD0gaW5zdHJ1Y3Rpb25Mb2NhdGlvbik7CisgICAgcmV0dXJuIG1fbm9kZVN0YXJ0T2Zm
c2V0c1tkZXN0aW5hdGlvbk5vZGVJbmRleF0gLSBpbnN0cnVjdGlvbkxvY2F0aW9uOworfQorICAg
IAordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0SnVtcCh1aW50MzJfdCBzb3VyY2VOb2Rl
SW5kZXgsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KQoreworICAgIHVpbnQzMl90IGlu
c3RydWN0aW9uTG9jYXRpb24gPSBtX2J5dGVjb2RlLnNpemUoKTsKKyAgICB1aW50MzJfdCBqdW1w
TG9jYXRpb24gPSBpbnN0cnVjdGlvbkxvY2F0aW9uICsgc2l6ZW9mKHVpbnQ4X3QpOworICAgIGlu
dDMyX3QgbG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlID0gbG9uZ2VzdFBvc3NpYmxlSnVtcChp
bnN0cnVjdGlvbkxvY2F0aW9uLCBzb3VyY2VOb2RlSW5kZXgsIGRlc3RpbmF0aW9uTm9kZUluZGV4
KTsKKyAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gc21hbGxlc3RQb3NzaWJsZUp1
bXBTaXplKGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSk7CisgICAgYXBwZW5kPHVpbnQ4X3Q+
KG1fYnl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
Okp1bXApIHwganVtcFNpemUpOworCisgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoTGlua1JlY29y
ZCh7anVtcFNpemUsIGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSwgaW5zdHJ1Y3Rpb25Mb2Nh
dGlvbiwganVtcExvY2F0aW9uLCBkZXN0aW5hdGlvbk5vZGVJbmRleH0pKTsKKyAgICBhcHBlbmRa
ZXJvZXMobV9ieXRlY29kZSwganVtcFNpemUpOwogfQogCi12b2lkIERGQUJ5dGVjb2RlQ29tcGls
ZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9k
ZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVt
aXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IHNvdXJjZU5vZGVJbmRleCwgdWlu
dDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKIHsKLSAgICBh
cHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgY2FzZVNlbnNpdGl2ZSA/
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlIDogREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSk7CisgICAgdWludDMy
X3QgaW5zdHJ1Y3Rpb25Mb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgIHVpbnQzMl90
IGp1bXBMb2NhdGlvbiA9IGluc3RydWN0aW9uTG9jYXRpb24gKyAyICogc2l6ZW9mKHVpbnQ4X3Qp
OworICAgIGludDMyX3QgbG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlID0gbG9uZ2VzdFBvc3Np
YmxlSnVtcChpbnN0cnVjdGlvbkxvY2F0aW9uLCBzb3VyY2VOb2RlSW5kZXgsIGRlc3RpbmF0aW9u
Tm9kZUluZGV4KTsKKyAgICBERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplID0gc21hbGxlc3RQ
b3NzaWJsZUp1bXBTaXplKGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSk7CisgICAgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGNhc2VTZW5zaXRpdmUgPyBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZVNlbnNpdGl2ZSA6IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkNoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmU7CisgICAgYXBwZW5kPHVpbnQ4X3Q+KG1f
Ynl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGluc3RydWN0aW9uKSB8IGp1bXBTaXplKTsK
ICAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwgdmFsdWUpOwotICAgIG1fbGlua1JlY29y
ZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCkpOwotICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMg
dmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgIG1fbGlua1JlY29yZHMuYXBwZW5k
KExpbmtSZWNvcmQoe2p1bXBTaXplLCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UsIGluc3Ry
dWN0aW9uTG9jYXRpb24sIGp1bXBMb2NhdGlvbiwgZGVzdGluYXRpb25Ob2RlSW5kZXh9KSk7Cisg
ICAgYXBwZW5kWmVyb2VzKG1fYnl0ZWNvZGUsIGp1bXBTaXplKTsKIH0KIAotdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUsIHVpbnQ4
X3QgaGlnaFZhbHVlLCB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vu
c2l0aXZlKQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKHVp
bnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1aW50MzJfdCBzb3VyY2VOb2RlSW5k
ZXgsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShsb3dWYWx1ZSA8IGhpZ2hWYWx1ZSwgIlRoZSBpbnN0
cnVjdGlvbiBzZW1hbnRpYyBpbXBvc2UgbG93VmFsdWUgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIGhp
Z2hWYWx1ZS4iKTsKIAotICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVj
b2RlLCBjYXNlU2Vuc2l0aXZlID8gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJh
bmdlQ2FzZVNlbnNpdGl2ZSA6IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5n
ZUNhc2VJbnNlbnNpdGl2ZSk7CisgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25Mb2NhdGlvbiA9IG1f
Ynl0ZWNvZGUuc2l6ZSgpOworICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IGluc3RydWN0aW9u
TG9jYXRpb24gKyAzICogc2l6ZW9mKHVpbnQ4X3QpOworICAgIGludDMyX3QgbG9uZ2VzdFBvc3Np
YmxlSnVtcERpc3RhbmNlID0gbG9uZ2VzdFBvc3NpYmxlSnVtcChpbnN0cnVjdGlvbkxvY2F0aW9u
LCBzb3VyY2VOb2RlSW5kZXgsIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICBERkFCeXRlY29k
ZUp1bXBTaXplIGp1bXBTaXplID0gc21hbGxlc3RQb3NzaWJsZUp1bXBTaXplKGxvbmdlc3RQb3Nz
aWJsZUp1bXBEaXN0YW5jZSk7CisgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlv
biA9IGNhc2VTZW5zaXRpdmUgPyBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFu
Z2VDYXNlU2Vuc2l0aXZlIDogREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdl
Q2FzZUluc2Vuc2l0aXZlOworICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVjb2RlLCBzdGF0aWNf
Y2FzdDx1aW50OF90PihpbnN0cnVjdGlvbikgfCBqdW1wU2l6ZSk7CiAgICAgYXBwZW5kPHVpbnQ4
X3Q+KG1fYnl0ZWNvZGUsIGxvd1ZhbHVlKTsKICAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29k
ZSwgaGlnaFZhbHVlKTsKLSAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpciht
X2J5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsKLSAgICBhcHBlbmQ8dWlu
dDMyX3Q+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlu
a2luZy4KKyAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChMaW5rUmVjb3JkKHtqdW1wU2l6ZSwgbG9u
Z2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlLCBpbnN0cnVjdGlvbkxvY2F0aW9uLCBqdW1wTG9jYXRp
b24sIGRlc3RpbmF0aW9uTm9kZUluZGV4fSkpOworICAgIGFwcGVuZFplcm9lcyhtX2J5dGVjb2Rl
LCBqdW1wU2l6ZSk7CiB9CiAKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlcm1pbmF0
ZSgpCkBAIC0xMDQsOSArMTYxLDExIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRl
cm1pbmF0ZSgKIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1aW50MzJf
dCBpbmRleCwgYm9vbCByb290KQogeworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9IG1fYnl0ZWNv
ZGUuc2l6ZSgpOworICAgIAogICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2Rlc1tp
bmRleF07CiAgICAgaWYgKG5vZGUuaXNLaWxsZWQoKSkgewotICAgICAgICBtX25vZGVTdGFydE9m
ZnNldHNbaW5kZXhdID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAg
ICAgICBBU1NFUlQobV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjIs
MTAgKzE4MSwyNCBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVpCiAg
ICAgaWYgKHJvb3QpCiAgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVj
b2RlLnNpemUoKTsKICAgICAKLSAgICBjb21waWxlTm9kZVRyYW5zaXRpb25zKG5vZGUpOworICAg
IGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMoaW5kZXgpOworICAgIAorICAgIEFTU0VSVF9VTlVTRUQo
c3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBjb21waWxlZE5vZGVN
YXhCeXRlY29kZVNpemUoaW5kZXgpKTsKK30KKyAgICAKK3Vuc2lnbmVkIERGQUJ5dGVjb2RlQ29t
cGlsZXI6OmNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6ZSh1aW50MzJfdCBpbmRleCkKK3sKKyAg
ICBjb25zdCBERkFOb2RlJiBub2RlID0gbV9kZmEubm9kZXNbaW5kZXhdOworICAgIGlmIChub2Rl
LmlzS2lsbGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIHNpemUgPSAwOwor
ICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKG1fZGZhKSkKKyAgICAgICAg
c2l6ZSArPSBhcHBlbmRBY3Rpb25CeXRlY29kZVNpemUoYWN0aW9uKTsKKyAgICBzaXplICs9IG5v
ZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShub2RlKTsKKyAgICByZXR1cm4gc2l6ZTsKIH0K
IAotdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYW5zaXRpb25zKGNvbnN0
IERGQU5vZGUmIG5vZGUpCitWZWN0b3I8REZBQnl0ZWNvZGVDb21waWxlcjo6UmFuZ2U+IERGQUJ5
dGVjb2RlQ29tcGlsZXI6OnJhbmdlcyhjb25zdCBERkFOb2RlJiBub2RlKQogewogICAgIHVpbnQz
Ml90IGRlc3RpbmF0aW9uc1sxMjhdOwogICAgIG1lbXNldChkZXN0aW5hdGlvbnMsIDB4ZmYsIHNp
emVvZihkZXN0aW5hdGlvbnMpKTsKQEAgLTE4NywzMiArMjYwLDgyIEBAIHZvaWQgREZBQnl0ZWNv
ZGVDb21waWxlcjo6Y29tcGlsZU5vZGVUcmEKICAgICAgICAgLy8gSWYgYSByYW5nZSBnb2VzIHRv
IDEyNywgdGhlcmUgd2lsbCBuZXZlciBiZSB2YWx1ZXMgaGlnaGVyIHRoYW4gaXQsIHNvIGNoZWNr
aW5nIGZvciBjYXNlLWluc2Vuc2l0aXZlIHJhbmdlcyB3b3VsZCBhbHdheXMgZmFpbC4KICAgICAg
ICAgcmFuZ2VzLmFwcGVuZChSYW5nZShyYW5nZU1pbiwgMTI3LCBkZXN0aW5hdGlvbnNbcmFuZ2VN
aW5dLCB0cnVlKSk7CiAgICAgfQotCi0gICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdl
cykKLSAgICAgICAgY29tcGlsZUNoZWNrRm9yUmFuZ2UocmFuZ2UpOwotICAgIGlmIChub2RlLmhh
c0ZhbGxiYWNrVHJhbnNpdGlvbigpKQotICAgICAgICBlbWl0SnVtcChub2RlLmZhbGxiYWNrVHJh
bnNpdGlvbkRlc3RpbmF0aW9uKG1fZGZhKSk7Ci0gICAgZWxzZQotICAgICAgICBlbWl0VGVybWlu
YXRlKCk7CisgICAgcmV0dXJuIHJhbmdlczsKK30KKyAgICAKK3Vuc2lnbmVkIERGQUJ5dGVjb2Rl
Q29tcGlsZXI6OmNoZWNrRm9yUmFuZ2VNYXhCeXRlY29kZVNpemUoY29uc3QgUmFuZ2UmIHJhbmdl
KQoreworICAgIGlmIChyYW5nZS5taW4gPT0gcmFuZ2UubWF4KQorICAgICAgICByZXR1cm4gc2l6
ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmUpICsg
c2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQzMl90KTsKKyAgICByZXR1cm4gc2l6ZW9mKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VJbnNlbnNpdGl2ZSkgKyAy
ICogc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQzMl90KTsKIH0KIAotdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjpjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCit2
b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVDaGVja0ZvclJhbmdlKHVpbnQzMl90IG5v
ZGVJbmRleCwgY29uc3QgUmFuZ2UmIHJhbmdlKQogeworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9
IG1fYnl0ZWNvZGUuc2l6ZSgpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmFuZ2UubWF4IDwg
MTI4LCAiVGhlIERGQSBlbmdpbmUgb25seSBzdXBwb3J0cyB0aGUgQVNDSUkgYWxwaGFiZXQuIik7
CiAgICAgQVNTRVJUKHJhbmdlLm1pbiA8PSByYW5nZS5tYXgpOwogCiAgICAgaWYgKHJhbmdlLm1p
biA9PSByYW5nZS5tYXgpCi0gICAgICAgIGVtaXRDaGVja1ZhbHVlKHJhbmdlLm1pbiwgcmFuZ2Uu
ZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5zaXRpdmUpOworICAgICAgICBlbWl0Q2hlY2tWYWx1
ZShyYW5nZS5taW4sIG5vZGVJbmRleCwgcmFuZ2UuZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5z
aXRpdmUpOwogICAgIGVsc2UKLSAgICAgICAgZW1pdENoZWNrVmFsdWVSYW5nZShyYW5nZS5taW4s
IHJhbmdlLm1heCwgcmFuZ2UuZGVzdGluYXRpb24sIHJhbmdlLmNhc2VTZW5zaXRpdmUpOworICAg
ICAgICBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHJhbmdlLm1pbiwgcmFuZ2UubWF4LCBub2RlSW5kZXgs
IHJhbmdlLmRlc3RpbmF0aW9uLCByYW5nZS5jYXNlU2Vuc2l0aXZlKTsKKyAgICAKKyAgICBBU1NF
UlRfVU5VU0VEKHN0YXJ0U2l6ZSwgbV9ieXRlY29kZS5zaXplKCkgLSBzdGFydFNpemUgPD0gY2hl
Y2tGb3JSYW5nZU1heEJ5dGVjb2RlU2l6ZShyYW5nZSkpOworfQorCit1bnNpZ25lZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjpub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNpemUoY29uc3QgREZBTm9k
ZSYgbm9kZSkKK3sKKyAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHJhbmdlIDogcmFuZ2VzKG5vZGUpKQorICAgICAgICBzaXplICs9IGNoZWNrRm9yUmFuZ2VNYXhC
eXRlY29kZVNpemUocmFuZ2UpOworICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbigp
KQorICAgICAgICBzaXplICs9IHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wKSAr
IHNpemVvZih1aW50MzJfdCk7CisgICAgZWxzZQorICAgICAgICBzaXplICs9IGluc3RydWN0aW9u
U2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlKTsKKyAg
ICByZXR1cm4gc2l6ZTsKK30KKwordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9k
ZVRyYW5zaXRpb25zKHVpbnQzMl90IG5vZGVJbmRleCkKK3sKKyAgICBjb25zdCBERkFOb2RlJiBu
b2RlID0gbV9kZmEubm9kZXNbbm9kZUluZGV4XTsKKyAgICB1bnNpZ25lZCBzdGFydFNpemUgPSBt
X2J5dGVjb2RlLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFu
Z2VzKG5vZGUpKQorICAgICAgICBjb21waWxlQ2hlY2tGb3JSYW5nZShub2RlSW5kZXgsIHJhbmdl
KTsKKyAgICBpZiAobm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24oKSkKKyAgICAgICAgZW1pdEp1
bXAobm9kZUluZGV4LCBub2RlLmZhbGxiYWNrVHJhbnNpdGlvbkRlc3RpbmF0aW9uKG1fZGZhKSk7
CisgICAgZWxzZQorICAgICAgICBlbWl0VGVybWluYXRlKCk7CisKKyAgICBBU1NFUlRfVU5VU0VE
KHN0YXJ0U2l6ZSwgbV9ieXRlY29kZS5zaXplKCkgLSBzdGFydFNpemUgPD0gbm9kZVRyYW5zaXRp
b25zTWF4Qnl0ZWNvZGVTaXplKG5vZGUpKTsKIH0KIAogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVy
Ojpjb21waWxlKCkKIHsKLSAgICAvLyBERkEgaGVhZGVyLgogICAgIHVpbnQzMl90IHN0YXJ0TG9j
YXRpb24gPSBtX2J5dGVjb2RlLnNpemUoKTsKLSAgICBhcHBlbmQ8dWludDMyX3Q+KG1fYnl0ZWNv
ZGUsIDApOworICAgIGFwcGVuZDxERkFIZWFkZXI+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHdp
bGwgYmUgc2V0IHdoZW4gd2UgYXJlIGZpbmlzaGVkIGNvbXBpbGluZyB0aGlzIERGQS4KKwogICAg
IG1fbm9kZVN0YXJ0T2Zmc2V0cy5yZXNpemUobV9kZmEubm9kZXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZmEubm9kZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
bm9kZVN0YXJ0T2Zmc2V0c1tpXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KTsKKyAgICAKKyAgICAvLyBQb3B1bGF0ZSBtX21heE5vZGVTdGFydE9mZnNldHMgd2l0aCBhIHdv
cnN0LWNhc2UgaW5kZXggb2Ygd2hlcmUgdGhlIG5vZGUgd291bGQgYmUgd2l0aCBubyBicmFuY2gg
Y29tcGFjdGlvbi4KKyAgICAvLyBDb21wYWN0aW5nIHRoZSBicmFuY2hlcyB1c2luZyAxLTQgYnl0
ZSBzaWduZWQganVtcCBkaXN0YW5jZXMgc2hvdWxkIG9ubHkgbWFrZSBub2RlcyBjbG9zZXIgdG9n
ZXRoZXIgdGhhbiB0aGlzLgorICAgIEFTU0VSVChtX21heE5vZGVTdGFydE9mZnNldHMuaXNFbXB0
eSgpKTsKKyAgICBtX21heE5vZGVTdGFydE9mZnNldHMuY2xlYXIoKTsKKyAgICBtX21heE5vZGVT
dGFydE9mZnNldHMucmVzaXplKG1fZGZhLm5vZGVzLnNpemUoKSk7CisgICAgdW5zaWduZWQgcm9v
dEFjdGlvbnNTaXplID0gMDsKKyAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG1fZGZhLm5vZGVz
W21fZGZhLnJvb3RdLmFjdGlvbnMobV9kZmEpKQorICAgICAgICByb290QWN0aW9uc1NpemUgKz0g
YXBwZW5kQWN0aW9uQnl0ZWNvZGVTaXplKGFjdGlvbik7CisgICAgbV9tYXhOb2RlU3RhcnRPZmZz
ZXRzW21fZGZhLnJvb3RdID0gc2l6ZW9mKERGQUhlYWRlcikgKyByb290QWN0aW9uc1NpemU7Cisg
ICAgdW5zaWduZWQgbmV4dEluZGV4ID0gc2l6ZW9mKERGQUhlYWRlcikgKyBjb21waWxlZE5vZGVN
YXhCeXRlY29kZVNpemUobV9kZmEucm9vdCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG1fZGZhLm5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpICE9IG1fZGZhLnJvb3Qp
IHsKKyAgICAgICAgICAgIG1fbWF4Tm9kZVN0YXJ0T2Zmc2V0c1tpXSA9IG5leHRJbmRleDsKKyAg
ICAgICAgICAgIG5leHRJbmRleCArPSBjb21waWxlZE5vZGVNYXhCeXRlY29kZVNpemUoaSk7Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSByb290IGlzIGFsd2F5
cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRlY29kZS4KICAgICBjb21waWxlTm9kZShtX2Rm
YS5yb290LCB0cnVlKTsKQEAgLTIyMCwxOSArMzQzLDM2IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21w
aWxlcjo6Y29tcGlsZSgpCiAgICAgICAgIGlmIChpICE9IG1fZGZhLnJvb3QpCiAgICAgICAgICAg
ICBjb21waWxlTm9kZShpLCBmYWxzZSk7CiAgICAgfQorICAgIAorICAgIEFTU0VSVChtX21heE5v
ZGVTdGFydE9mZnNldHMuc2l6ZSgpID09IG1fbm9kZVN0YXJ0T2Zmc2V0cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmYS5ub2Rlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9ub2RlU3RhcnRPZmZzZXRzW2ldICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX21heE5vZGVTdGFydE9mZnNldHNb
aV0gPj0gbV9ub2RlU3RhcnRPZmZzZXRzW2ldKTsKKyAgICB9CiAKICAgICAvLyBMaW5rLgogICAg
IGZvciAoY29uc3QgYXV0byYgbGlua1JlY29yZCA6IG1fbGlua1JlY29yZHMpIHsKLSAgICAgICAg
dWludDMyX3Qgb2Zmc2V0ID0gbGlua1JlY29yZC5maXJzdDsKLSAgICAgICAgQVNTRVJUKCEoKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmbV9ieXRlY29kZVtvZmZzZXRdKSkpOwotCi0gICAg
ICAgIHVpbnQzMl90IHRhcmdldCA9IG1fbm9kZVN0YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29u
ZF07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpOwotICAgICAgICBzZXQzMkJpdHMobV9ieXRlY29kZSwgb2Zmc2V0
LCBtX25vZGVTdGFydE9mZnNldHNbbGlua1JlY29yZC5zZWNvbmRdKTsKKyAgICAgICAgdWludDMy
X3QgZGVzdGluYXRpb24gPSBtX25vZGVTdGFydE9mZnNldHNbbGlua1JlY29yZC5kZXN0aW5hdGlv
bk5vZGVJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RpbmF0aW9uIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICBpbnQzMl90IGRpc3RhbmNl
ID0gZGVzdGluYXRpb24gLSBsaW5rUmVjb3JkLmluc3RydWN0aW9uTG9jYXRpb247CisgICAgICAg
IEFTU0VSVChhYnMoZGlzdGFuY2UpIDw9IGFicyhsaW5rUmVjb3JkLmxvbmdlc3RQb3NzaWJsZUp1
bXApKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobGlua1JlY29yZC5qdW1wU2l6ZSkgewor
ICAgICAgICBjYXNlIEludDg6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaXN0YW5jZSA9
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGRpc3RhbmNlKSk7CisgICAgICAgICAgICBzZXRCaXRzPGlu
dDhfdD4obV9ieXRlY29kZSwgbGlua1JlY29yZC5qdW1wTG9jYXRpb24sIHN0YXRpY19jYXN0PGlu
dDhfdD4oZGlzdGFuY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDE2
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGlzdGFuY2UgPT0gc3RhdGljX2Nhc3Q8aW50
MTZfdD4oZGlzdGFuY2UpKTsKKyAgICAgICAgICAgIHNldEJpdHM8aW50MTZfdD4obV9ieXRlY29k
ZSwgbGlua1JlY29yZC5qdW1wTG9jYXRpb24sIHN0YXRpY19jYXN0PGludDE2X3Q+KGRpc3RhbmNl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
IHNldEJpdHM8aW50MzJfdD4obV9ieXRlY29kZSwgbGlua1JlY29yZC5qdW1wTG9jYXRpb24sIGRp
c3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFNldCBzaXplIGhlYWRlci4KLSAgICBzZXQzMkJpdHMobV9ieXRlY29kZSwgc3RhcnRMb2Nh
dGlvbiwgbV9ieXRlY29kZS5zaXplKCkgLSBzdGFydExvY2F0aW9uKTsKKyAgICBzZXRCaXRzPERG
QUhlYWRlcj4obV9ieXRlY29kZSwgc3RhcnRMb2NhdGlvbiwgbV9ieXRlY29kZS5zaXplKCkgLSBz
dGFydExvY2F0aW9uKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25z
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODU1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDI0ICs2MiwzNiBAQCBwcml2YXRlOgogICAgICAgICB1aW50MzJfdCBkZXN0aW5hdGlvbjsK
ICAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOwogICAgIH07Ci0gICAgdm9pZCBjb21waWxlTm9k
ZSh1aW50MzJfdCwgYm9vbCByb290KTsKLSAgICB2b2lkIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMo
Y29uc3QgREZBTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUNoZWNrRm9yUmFuZ2UoY29uc3QgUmFu
Z2UmKTsKKyAgICBWZWN0b3I8UmFuZ2U+IHJhbmdlcyhjb25zdCBERkFOb2RlJik7CisgICAgCisg
ICAgdW5zaWduZWQgY29tcGlsZWROb2RlTWF4Qnl0ZWNvZGVTaXplKHVpbnQzMl90IGluZGV4KTsK
KyAgICB2b2lkIGNvbXBpbGVOb2RlKHVpbnQzMl90IGluZGV4LCBib29sIHJvb3QpOworICAgIHVu
c2lnbmVkIG5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShjb25zdCBERkFOb2RlJik7Cisg
ICAgdm9pZCBjb21waWxlTm9kZVRyYW5zaXRpb25zKHVpbnQzMl90IG5vZGVJbmRleCk7CisgICAg
dW5zaWduZWQgY2hlY2tGb3JSYW5nZU1heEJ5dGVjb2RlU2l6ZShjb25zdCBSYW5nZSYpOworICAg
IHZvaWQgY29tcGlsZUNoZWNrRm9yUmFuZ2UodWludDMyX3Qgbm9kZUluZGV4LCBjb25zdCBSYW5n
ZSYpOworICAgIGludDMyX3QgbG9uZ2VzdFBvc3NpYmxlSnVtcCh1aW50MzJfdCBqdW1wTG9jYXRp
b24sIHVpbnQzMl90IHNvdXJjZU5vZGVJbmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5k
ZXgpOwogCiAgICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVpbnQ2NF90KTsKLSAgICB2b2lkIGVt
aXRKdW1wKHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKLSAgICB2b2lkIGVtaXRDaGVj
a1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29s
IGNhc2VTZW5zaXRpdmUpOwotICAgIHZvaWQgZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxv
d1ZhbHVlLCB1aW50OF90IGhpZ2hWYWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgs
IGJvb2wgY2FzZVNlbnNpdGl2ZSk7CisgICAgdm9pZCBlbWl0SnVtcCh1aW50MzJfdCBzb3VyY2VO
b2RlSW5kZXgsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICB2b2lkIGVtaXRD
aGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IHNvdXJjZU5vZGVJbmRleCwgdWludDMy
X3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CisgICAgdm9pZCBl
bWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1
aW50MzJfdCBzb3VyY2VOb2RlSW5kZXgsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBi
b29sIGNhc2VTZW5zaXRpdmUpOwogICAgIHZvaWQgZW1pdFRlcm1pbmF0ZSgpOwogCiAgICAgVmVj
dG9yPERGQUJ5dGVjb2RlPiYgbV9ieXRlY29kZTsKICAgICBjb25zdCBERkEmIG1fZGZhOwogICAg
IAorICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9tYXhOb2RlU3RhcnRPZmZzZXRzOwogICAgIFZlY3Rv
cjx1aW50MzJfdD4gbV9ub2RlU3RhcnRPZmZzZXRzOwogICAgIAotICAgIC8vIFRoZSBmaXJzdCB2
YWx1ZSBpcyB0aGUgaW5kZXggaW4gdGhlIGJ5dGVjb2RlIGJ1ZmZlciB3aGVyZSB0aGUganVtcCBp
cyB0byBiZSB3cml0dGVuLgotICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIGluZGV4IG9m
IHRoZSBub2RlIHRvIGp1bXAgdG8uCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWlu
dDMyX3Q+PiBtX2xpbmtSZWNvcmRzOworICAgIHN0cnVjdCBMaW5rUmVjb3JkIHsKKyAgICAgICAg
REZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZTsKKyAgICAgICAgaW50MzJfdCBsb25nZXN0UG9z
c2libGVKdW1wOworICAgICAgICB1aW50MzJfdCBpbnN0cnVjdGlvbkxvY2F0aW9uOworICAgICAg
ICB1aW50MzJfdCBqdW1wTG9jYXRpb247CisgICAgICAgIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9k
ZUluZGV4OworICAgIH07CisgICAgVmVjdG9yPExpbmtSZWNvcmQ+IG1fbGlua1JlY29yZHM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDE4NTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MCArMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNp
b25zIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Ci1zdGF0aWMgaW5saW5lIEludFR5
cGUgZ2V0Qml0cyhjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
TGVuZ3RoLCB1bnNpZ25lZCBpbmRleCwgVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpCitzdGF0aWMg
aW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUsIHVpbnQz
Ml90IGJ5dGVjb2RlTGVuZ3RoLCB1aW50MzJfdCBpbmRleCwgVmVjdG9yPGJvb2w+JiBwYWdlc1Vz
ZWQpCiB7CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX01FTU9SWV9SRVBPUlRJTkcKLSAgICB1bnNp
Z25lZCBwYWdlID0gaW5kZXggLyBDT05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFOworICAgIHVp
bnQzMl90IHBhZ2UgPSBpbmRleCAvIENPTlRFTlRfRVhURU5TSU9OU19QQUdFX1NJWkU7CiAgICAg
d2hpbGUgKHBhZ2VzVXNlZC5zaXplKCkgPCAoYnl0ZWNvZGVMZW5ndGggKyBDT05URU5UX0VYVEVO
U0lPTlNfUEFHRV9TSVpFIC0gMSkgLyBDT05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFKQogICAg
ICAgICBwYWdlc1VzZWQuYXBwZW5kKGZhbHNlKTsKICAgICBwYWdlc1VzZWRbcGFnZV0gPSB0cnVl
OwpAQCAtNDksMjMgKzQ5LDY0IEBAIHN0YXRpYyBpbmxpbmUgSW50VHlwZSBnZXRCaXRzKGNvbnN0
IERGQUIKICAgICBBU1NFUlRfVU5VU0VEKGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCArIHNpemVvZihJ
bnRUeXBlKSA8PSBieXRlY29kZUxlbmd0aCk7CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhdKTsKIH0KLSAgICAKLXZvaWQgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFt
Q291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKKworLy8gRklYTUU6IEdl
dCByaWQgb2YgcGFnZXNVc2VkLiBXZSBkb24ndCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBh
Z2VzIHVzZWQuCitzdGF0aWMgaW5saW5lIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gZ2V0SW5zdHJ1
Y3Rpb24oY29uc3QgREZBQnl0ZWNvZGUqIGJ5dGVjb2RlLCB1aW50MzJfdCBieXRlY29kZUxlbmd0
aCwgdWludDMyX3QgaW5kZXgsIFZlY3Rvcjxib29sPiYgcGFnZXNVc2VkKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihnZXRCaXRzPHVpbnQ4X3Q+KGJ5
dGVjb2RlLCBieXRlY29kZUxlbmd0aCwgaW5kZXgsIHBhZ2VzVXNlZCkgJiBERkFCeXRlY29kZUlu
c3RydWN0aW9uTWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGp1bXBTaXplSW5CeXRl
cyhERkFCeXRlY29kZUp1bXBTaXplIGp1bXBTaXplKQoreworICAgIHN3aXRjaCAoanVtcFNpemUp
IHsKKyAgICBjYXNlIEludDg6CisgICAgICAgIHJldHVybiBzaXplb2YoaW50OF90KTsKKyAgICBj
YXNlIEludDE2OgorICAgICAgICByZXR1cm4gc2l6ZW9mKGludDE2X3QpOworICAgIGNhc2UgSW50
MzI6CisgICAgICAgIHJldHVybiBzaXplb2YoaW50MzJfdCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgREZBQnl0ZWNvZGVKdW1wU2l6ZSBnZXRKdW1wU2l6ZShjb25zdCBERkFCeXRlY29kZSogYnl0
ZWNvZGUsIHVpbnQzMl90IGJ5dGVjb2RlTGVuZ3RoLCB1aW50MzJfdCBpbmRleCwgVmVjdG9yPGJv
b2w+JiBwYWdlc1VzZWQpCiB7Ci0gICAgQVNTRVJUKGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVj
dGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFn
ZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KLSAgICAgICAg
fHwgZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbgotICAgICAgICB8fCBnZXRCaXRzPERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uRGVmYXVsdFN0eWxlc2hlZXQpOwotICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElmRG9t
YWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1f
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSwgbV9wYWdlc1VzZWQpKSk7CisgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6
ZSA9IHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSnVtcFNpemU+KGdldEJpdHM8dWludDhfdD4oYnl0
ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFnZXNVc2VkKSAmIERGQUJ5dGVjb2RlSnVt
cFNpemVNYXNrKTsKKyAgICBBU1NFUlQoanVtcFNpemUgPT0gREZBQnl0ZWNvZGVKdW1wU2l6ZTo6
SW50MzIgfHwganVtcFNpemUgPT0gREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50MTYgfHwganVtcFNp
emUgPT0gREZBQnl0ZWNvZGVKdW1wU2l6ZTo6SW50OCk7CisgICAgcmV0dXJuIGp1bXBTaXplOwor
fQorCitzdGF0aWMgaW5saW5lIGludDMyX3QgZ2V0SnVtcERpc3RhbmNlKGNvbnN0IERGQUJ5dGVj
b2RlKiBieXRlY29kZSwgdWludDMyX3QgYnl0ZWNvZGVMZW5ndGgsIHVpbnQzMl90IGluZGV4LCBW
ZWN0b3I8Ym9vbD4mIHBhZ2VzVXNlZCwgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSkKK3sK
KyAgICBzd2l0Y2ggKGp1bXBTaXplKSB7CisgICAgY2FzZSBJbnQ4OgorICAgICAgICByZXR1cm4g
Z2V0Qml0czxpbnQ4X3Q+KGJ5dGVjb2RlLCBieXRlY29kZUxlbmd0aCwgaW5kZXgsIHBhZ2VzVXNl
ZCk7CisgICAgY2FzZSBJbnQxNjoKKyAgICAgICAgcmV0dXJuIGdldEJpdHM8aW50MTZfdD4oYnl0
ZWNvZGUsIGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCwgcGFnZXNVc2VkKTsKKyAgICBjYXNlIEludDMy
OgorICAgICAgICByZXR1cm4gZ2V0Qml0czxpbnQzMl90PihieXRlY29kZSwgYnl0ZWNvZGVMZW5n
dGgsIGluZGV4LCBwYWdlc1VzZWQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbih1aW50MzJfdCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlv
bnMmIGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCit7CisgICAgQVNTRVJUKGdldEluc3RydWN0aW9u
KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNl
ZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCisgICAgICAgIHx8IGdl
dEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
LCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0
aElmRG9tYWluCisgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpOworICAgIGFjdGlvbnMuYWRk
KChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdl
dEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pLCBtX3BhZ2VzVXNlZCkpKTsKICAg
ICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKSA9PSBp
bnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbldpdGhJZkRvbWFpbikpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25E
ZWZhdWx0U3R5bGVzaGVldCkpOwogfQogCi12b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6Omlu
dGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIs
IHVpbnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQordm9pZCBE
RkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24o
dWludDMyX3QmIHByb2dyYW1Db3VudGVyLCB1aW50MTZfdCBmbGFncywgQWN0aW9ucyYgYWN0aW9u
cywgYm9vbCBpZkRvbWFpbikKIHsKLSAgICBBU1NFUlQoZ2V0Qml0czxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9w
YWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbgotICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWlu
KTsKLSAgICB1aW50MTZfdCBmbGFnc1RvQ2hlY2sgPSBnZXRCaXRzPHVpbnQxNl90PihtX2J5dGVj
b2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29k
ZSksIG1fcGFnZXNVc2VkKTsKKyAgICBBU1NFUlQoZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24KKyAgICAgICAgfHwgZ2V0
SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIs
IG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgIHVpbnQxNl90IGZsYWdzVG9DaGVjayA9IGdldEJp
dHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
ICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pLCBtX3BhZ2VzVXNlZCk7CiAKICAgICB1
aW50MTZfdCBsb2FkVHlwZUZsYWdzID0gZmxhZ3NUb0NoZWNrICYgTG9hZFR5cGVNYXNrOwogICAg
IHVpbnQxNl90IHJlc3NvdXJjZVR5cGVGbGFncyA9IGZsYWdzVG9DaGVjayAmIFJlc291cmNlVHlw
ZU1hc2s7CkBAIC03NCw3ICsxMTUsNyBAQCB2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6Omlu
dGVycHJldFRlCiAgICAgYm9vbCByZXNzb3VyY2VUeXBlTWF0Y2hlcyA9IHJlc3NvdXJjZVR5cGVG
bGFncyA/IChyZXNzb3VyY2VUeXBlRmxhZ3MgJiBmbGFncykgOiB0cnVlOwogICAgIAogICAgIGlm
IChsb2FkVHlwZU1hdGNoZXMgJiYgcmVzc291cmNlVHlwZU1hdGNoZXMpCi0gICAgICAgIGFjdGlv
bnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCksIG1fcGFn
ZXNVc2VkKSkpOworICAgICAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcg
OiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVpbnQzMl90PihtX2J5dGVjb2Rl
LCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUlu
c3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCksIG1fcGFnZXNVc2VkKSkpOwogICAgIHByb2dy
YW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRB
cHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiB9CkBA
IC04NCwxMSArMTI1LDExIEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0
ZWMKICAgICBBY3Rpb25zIGFjdGlvbnM7CiAKICAgICAvLyBERkEgaGVhZGVyLgotICAgIHVuc2ln
bmVkIGRmYUJ5dGVjb2RlTGVuZ3RoID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgMCwgbV9wYWdlc1VzZWQpOwotICAgIHVuc2lnbmVkIHByb2dyYW1Db3Vu
dGVyID0gc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCBkZmFCeXRlY29kZUxlbmd0aCA9
IGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIDAsIG1fcGFn
ZXNVc2VkKTsKKyAgICB1aW50MzJfdCBwcm9ncmFtQ291bnRlciA9IHNpemVvZih1aW50MzJfdCk7
CiAKICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBkZmFCeXRlY29kZUxlbmd0aCkgewotICAg
ICAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uID0gc3RhdGljX2Nhc3Q8REZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtwcm9ncmFtQ291bnRlcl0pOworICAgICAg
ICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3RydWN0aW9uID0gZ2V0SW5zdHJ1Y3Rpb24obV9i
eXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKTsK
ICAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQogICAgICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0
aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgaWYgKGlu
c3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikKQEAgLTEx
MywxOCArMTU0LDE4IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMK
ICAgICAKICAgICBBY3Rpb25zIGFjdGlvbnM7CiAgICAgCi0gICAgdW5zaWduZWQgcHJvZ3JhbUNv
dW50ZXIgPSAwOworICAgIHVpbnQzMl90IHByb2dyYW1Db3VudGVyID0gMDsKICAgICB3aGlsZSAo
cHJvZ3JhbUNvdW50ZXIgPCBtX2J5dGVjb2RlTGVuZ3RoKSB7CiAKICAgICAgICAgLy8gREZBIGhl
YWRlci4KLSAgICAgICAgdW5zaWduZWQgZGZhU3RhcnQgPSBwcm9ncmFtQ291bnRlcjsKLSAgICAg
ICAgdW5zaWduZWQgZGZhQnl0ZWNvZGVMZW5ndGggPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVj
b2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpOwotICAg
ICAgICBwcm9ncmFtQ291bnRlciArPSBzaXplb2YodW5zaWduZWQpOworICAgICAgICB1aW50MzJf
dCBkZmFTdGFydCA9IHByb2dyYW1Db3VudGVyOworICAgICAgICB1aW50MzJfdCBkZmFCeXRlY29k
ZUxlbmd0aCA9IGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IHNpemVvZih1aW50MzJfdCk7CiAKICAgICAgICAgLy8gU2tpcCB0aGUgZGVmYXVsdCBzdHlsZXNo
ZWV0IGFjdGlvbnMgb24gdGhlIERGQSByb290LiBUaGVzZSBhcmUgYWNjZXNzZWQgdmlhIGFjdGlv
bnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290LgogICAgICAgICBpZiAoIWRmYVN0YXJ0
KSB7CiAgICAgICAgICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBkZmFCeXRlY29kZUxlbmd0
aCkgewotICAgICAgICAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24g
PSBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1D
b3VudGVyXSk7CisgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVj
dGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CiAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9u
ID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0
KQogICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRT
dHlsZXNoZWV0KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCkBAIC0xMzcsMTggKzE3OCwxOCBAQCBE
RkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICBpZiAo
cHJvZ3JhbUNvdW50ZXIgPj0gbV9ieXRlY29kZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1
cm4gYWN0aW9uczsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0Uoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtwcm9n
cmFtQ291bnRlcl0pICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgotICAg
ICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0
ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24sIAorICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShnZXRJ
bnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwg
bV9wYWdlc1VzZWQpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgorICAg
ICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uLAogICAgICAgICAgICAgICAgICJUcmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgc2hvdWxkIG9ubHkgYmUgaW4gdGhlIGZpcnN0IERGQS4iKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSW50ZXJwcmV0IHRoZSBieXRlY29kZSBm
cm9tIHRoaXMgREZBLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgdGVybWluYXRlIGlm
IGludGVycHJldGluZyBjb3JyZWN0bHkgY29tcGlsZWQgYnl0ZWNvZGUuCi0gICAgICAgIHVuc2ln
bmVkIHVybEluZGV4ID0gMDsKKyAgICAgICAgdWludDMyX3QgdXJsSW5kZXggPSAwOwogICAgICAg
ICBib29sIHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gZmFsc2U7CiAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbUNvdW50ZXIgPD0gbV9ieXRlY29k
ZUxlbmd0aCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKSkgeworICAgICAgICAgICAgc3dp
dGNoIChnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFt
Q291bnRlciwgbV9wYWdlc1VzZWQpKSB7CiAKICAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAgICAgICAgICAgIGdvdG8gbmV4dERGQTsKQEAg
LTE1OSwxMyArMjAwLDE1IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0
ZWMKIAogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0
ZXIgaW4gdGhlIHVybCBpcyB0aGUgdmFsdWUgc3RvcmVkIHdpdGggdGhlIGJ5dGVjb2RlLgogICAg
ICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gdXJsW3VybEluZGV4XTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVyID09IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2Vz
VXNlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBkZmFTdGFydCAr
IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1Vz
ZWQpOworICAgICAgICAgICAgICAgIERGQUJ5dGVjb2RlSnVtcFNpemUganVtcFNpemUgPSBnZXRK
dW1wU2l6ZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9w
YWdlc1VzZWQpOworICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gZ2V0Qml0czx1aW50
OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSwgbV9wYWdlc1VzZWQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtQ291bnRlciArPSBnZXRKdW1wRGlzdGFuY2UobV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwganVtcExvY2F0aW9uLCBtX3BhZ2VzVXNlZCwganVtcFNpemUpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgICAgIHVy
bEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdXJs
SW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1Zh
bHVlQ2FzZVNlbnNpdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSArIGp1bXBT
aXplSW5CeXRlcyhqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKQEAgLTE3NSwxMyArMjE4LDE1IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlv
bnMgREZBQnl0ZWMKIAogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbmV4
dCBjaGFyYWN0ZXIgaW4gdGhlIHVybCBpcyB0aGUgdmFsdWUgc3RvcmVkIHdpdGggdGhlIGJ5dGVj
b2RlLgogICAgICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gdG9BU0NJSUxvd2VyKHVybFt1
cmxJbmRleF0pOwotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gZ2V0Qml0czx1aW50
OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGRmYVN0YXJ0ICsgZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6
ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVK
dW1wU2l6ZSBqdW1wU2l6ZSA9IGdldEp1bXBTaXplKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pLCBtX3BhZ2Vz
VXNlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QganVtcExvY2F0aW9uID0gcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWlu
dDhfdCk7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGdldEp1bXBEaXN0
YW5jZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBqdW1wTG9jYXRpb24sIG1fcGFnZXNV
c2VkLCBqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRn
ZSBpbiB0aGUgREZBLgogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmUpOworICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtQ291bnRlciArPSBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikg
KyBzaXplb2YodWludDhfdCkgKyBqdW1wU2l6ZUluQnl0ZXMoanVtcFNpemUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE5
MCwxNCArMjM1LDE2IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMK
ICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0REZBOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gdXJsW3VybEluZGV4XTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVyID49IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2Vz
VXNlZCkKLSAgICAgICAgICAgICAgICAgICAgJiYgY2hhcmFjdGVyIDw9IGdldEJpdHM8dWludDhf
dD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2Yo
REZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBkZmFTdGFydCArIGdldEJpdHM8dW5zaWduZWQ+
KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERG
QUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1Vz
ZWQpOworICAgICAgICAgICAgICAgIERGQUJ5dGVjb2RlSnVtcFNpemUganVtcFNpemUgPSBnZXRK
dW1wU2l6ZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9w
YWdlc1VzZWQpOworICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPj0gZ2V0Qml0czx1aW50
OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSwgbV9wYWdlc1VzZWQpCisgICAgICAgICAgICAgICAg
ICAgICYmIGNoYXJhY3RlciA8PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24p
ICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QganVtcExvY2F0aW9uID0gcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikgKyAyICogc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtQ291bnRlciArPSBnZXRKdW1wRGlzdGFuY2UobV9ieXRlY29kZSwgbV9ieXRlY29k
ZUxlbmd0aCwganVtcExvY2F0aW9uLCBtX3BhZ2VzVXNlZCwganVtcFNpemUpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgICAgIHVybElu
ZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdXJsSW5k
ZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVl
UmFuZ2VDYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgMiAqIHNpemVvZih1aW50OF90KSAr
IGp1bXBTaXplSW5CeXRlcyhqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAKQEAgLTIwNiwyNCArMjUzLDI5IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6
OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0REZBOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoYXIgY2hhcmFjdGVyID0gdG9BU0NJSUxv
d2VyKHVybFt1cmxJbmRleF0pOwotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPj0gZ2V0
Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKQotICAgICAgICAgICAgICAgICAg
ICAmJiBjaGFyYWN0ZXIgPD0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWlu
dDhfdCksIG1fcGFnZXNVc2VkKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRl
ciA9IGRmYVN0YXJ0ICsgZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4
X3QpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAgICAgREZB
Qnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IGdldEp1bXBTaXplKG1fYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNoYXJhY3RlciA+PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24p
LCBtX3BhZ2VzVXNlZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2hhcmFjdGVyIDw9IGdldEJp
dHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhfdCksIG1fcGFn
ZXNVc2VkKSkgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIDIgKiBzaXpl
b2YodWludDhfdCk7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGdldEp1
bXBEaXN0YW5jZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBqdW1wTG9jYXRpb24sIG1f
cGFnZXNVc2VkLCBqdW1wU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVy
KQogICAgICAgICAgICAgICAgICAgICAgICAgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMg
YW4gZWRnZSBpbiB0aGUgREZBLgogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VJbnNlbnNpdGl2ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IHNpemVvZihERkFCeXRlY29kZUlu
c3RydWN0aW9uKSArIDIgKiBzaXplb2YodWludDhfdCkgKyBqdW1wU2l6ZUluQnl0ZXMoanVtcFNp
emUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6CisgICAgICAgICAgICBjYXNlIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6IHsKICAgICAgICAgICAgICAgICBpZiAoIXVybFt1
cmxJbmRleF0gfHwgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcpCiAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gbmV4dERGQTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGRmYVN0YXJ0ICsgZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3Bh
Z2VzVXNlZCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QganVtcExvY2F0aW9uID0gcHJvZ3Jh
bUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAg
ICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IGdldEp1bXBTaXplKG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CisgICAgICAg
ICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gZ2V0SnVtcERpc3RhbmNlKG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIGp1bXBMb2NhdGlvbiwgbV9wYWdlc1VzZWQsIGp1bXBTaXplKTsKICAg
ICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0
aGUgREZBLgogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uOgogICAgICAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFt
Q291bnRlciwgYWN0aW9ucywgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkSW5mby5oCShyZXZpc2lvbiAxODU1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHR5
cGVkZWYgdWludDE2X3QgUmVzb3VyY2VGbGFnczsKIC8vIFRoZSBuZXh0IGJpdCBpcyB1c2VkIHRv
IG1hcmsgYWN0aW9ucyB0aGF0IGFyZSBmcm9tIGEgcnVsZSB3aXRoIGFuIGlmLWRvbWFpbiBjb25k
aXRpb24uCiAvLyBUaGUgbmV4dCBiaXQgaXMgdXNlZCB0byBtYXJrIGFjdGlvbnMgdGhhdCBpbiB0
aGUgZGVmYXVsdCBzdHlsZXNoZWV0LgogLy8gVGhlIHZhbHVlcyAtMSBhbmQgLTIgYXJlIHVzZWQg
Zm9yIHJlbW92ZWQgYW5kIGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFibGVzLgorY29uc3QgdWludDY0
X3QgQWN0aW9uRmxhZ01hc2sgPSAweDAwMDBGRkZGMDAwMDAwMDA7CiBjb25zdCB1aW50NjRfdCBJ
ZkRvbWFpbkZsYWcgPSAweDAwMDEwMDAwMDAwMDAwMDA7CiBjb25zdCB1aW50NjRfdCBEaXNwbGF5
Tm9uZVN0eWxlU2hlZXRGbGFnID0gMHgwMDAyMDAwMDAwMDAwMDAwOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODU1OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wNi0xNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIElt
cGxlbWVudCBicmFuY2ggY29tcGFjdGlvbiBmb3IgREZBIGJ5dGVjb2RlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NjE5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICBJbmNyZW1lbnQgdmVyc2lvbiBu
dW1iZXIgdG8gcmVmbGVjdCBjaGFuZ2VzIHRvIGJ5dGVjb2RlLgorCiAyMDE1LTA2LTE2ICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LgpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDE4NTU5MykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIHNob3VsZCBi
ZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0
aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBjcmFzaGlu
ZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgotICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJy
ZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gMzsKKyAgICBjb25zdCBzdGF0aWMgdWlu
dDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDQ7CiAKICAgICBzdGF0
aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7CiAgICAgc3RhdGlj
IFJlZjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6
U3RyaW5nJiBzdG9yZVBhdGgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>