<?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>128072</bug_id>
          
          <creation_ts>2014-02-02 10:08:41 -0800</creation_ts>
          <short_desc>[ftlopt] GC should keep structures alive if they are inlined into optimized code (DFG or FTL) and their globalObject is alive</short_desc>
          <delta_ts>2016-05-19 14:07:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>157324</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>134427</dependson>
          <blocked>128078</blocked>
    
    <blocked>128079</blocked>
    
    <blocked>132357</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>974781</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 10:08:41 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974814</commentid>
    <comment_count>1</comment_count>
      <attachid>222934</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 12:52:44 -0800</bug_when>
    <thetext>Created attachment 222934
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974815</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-02 12:54:12 -0800</bug_when>
    <thetext>Attachment 222934 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:354:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:414:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:419:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:424:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974819</commentid>
    <comment_count>3</comment_count>
      <attachid>222935</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 12:57:30 -0800</bug_when>
    <thetext>Created attachment 222935
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974834</commentid>
    <comment_count>4</comment_count>
      <attachid>222935</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-02 14:51:13 -0800</bug_when>
    <thetext>Comment on attachment 222935
the patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2059
&gt; +// Returns false if we want this reconsidered.
&gt; +static void forceStructureLiveness(

I think this comment got out of date while you were writing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974917</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 21:36:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 222935 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222935&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2059
&gt; &gt; +// Returns false if we want this reconsidered.
&gt; &gt; +static void forceStructureLiveness(
&gt; 
&gt; I think this comment got out of date while you were writing the patch.

Yup, removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974918</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 21:43:16 -0800</bug_when>
    <thetext>Further testing shows that this is basically blocked on https://bugs.webkit.org/show_bug.cgi?id=128073, and perhaps something even deeper than that: we need to be able to add the ability to:

- Track larger StructureSets for prorotype/chain access inlining.
- Convert GetByIds to inlined prototype/chain accesses.

Also, I think that this experience is suggesting that our baseline PIC&apos;s are going polymorphic too eagerly.  Perhaps a good heuristic would be to let them ping-pong N times before going polymorphic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976662</commentid>
    <comment_count>7</comment_count>
      <attachid>223213</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-04 22:05:55 -0800</bug_when>
    <thetext>Created attachment 223213
another version

I no longer think that this is a particularly good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980245</commentid>
    <comment_count>8</comment_count>
      <attachid>222935</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-13 04:08:36 -0800</bug_when>
    <thetext>Comment on attachment 222935
the patch

Cleared Oliver Hunt&apos;s review+ from obsolete attachment 222935 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018704</commentid>
    <comment_count>9</comment_count>
      <attachid>233923</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-26 12:20:21 -0700</bug_when>
    <thetext>Created attachment 233923
work in progress

This uses a slightly different approach.  It&apos;s almost done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018821</commentid>
    <comment_count>10</comment_count>
      <attachid>233951</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-26 18:04:37 -0700</bug_when>
    <thetext>Created attachment 233951
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019023</commentid>
    <comment_count>11</comment_count>
      <attachid>233951</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-27 11:08:44 -0700</bug_when>
    <thetext>Comment on attachment 233951
the patch

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

r=me, with some fixate

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:85
&gt; +        if (false &amp;&amp; jit.codeBlock()-&gt;instructionCount() == 681)
&gt; +            jit.breakpoint();

Please remove.

&gt; Source/JavaScriptCore/runtime/Executable.h:457
&gt; +    bool m_didTryToEnterInLoop;

It looks like this data member is not initialized in the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019171</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-27 20:33:37 -0700</bug_when>
    <thetext>Nooope.  Testing shows that actually, even with all of the work I did, the GC clearing structures is still profitable.

That said, we&apos;re now in a situation where it is less profitable on gbemu (i.e. it&apos;s not absolutely necessary for performance) and less evil (it&apos;s not necessary to assume that if the GC clears IC&apos;s then the IC&apos;s need to be forever polymorphic).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022686</commentid>
    <comment_count>13</comment_count>
      <attachid>233951</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-07-16 02:43:55 -0700</bug_when>
    <thetext>Comment on attachment 233951
the patch

Cleared Geoffrey Garen&apos;s review+ from obsolete attachment 233951 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194937</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 14:07:05 -0700</bug_when>
    <thetext>Oh we did something much stronger than this.

*** This bug has been marked as a duplicate of bug 157324 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222934</attachid>
            <date>2014-02-02 12:52:44 -0800</date>
            <delta_ts>2014-02-02 12:57:30 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24103</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE0LTAyLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGtlZXAgc3RydWN0dXJlcyBhbGl2ZSBpZiB0aGV5IGFyZSBpbmxpbmVkIGludG8g
b3B0aW1pemVkIGNvZGUgKERGRyBvciBGVEwpIGFuZCB0aGVpciBnbG9iYWxPYmplY3QgaXMgYWxp
dmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhlIG9yaWdpbmFsIHJvbGUgb2YgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGZpeHBvaW50
IHdhcyB0byBndWFyZCBhZ2FpbnN0IGNhc2VzCisgICAgICAgIHdoZXJlIHdlIGhhZCBjb2RlIHRo
YXQgY2FjaGVkIG9uIGEgbm93LWRlYWQgc3RydWN0dXJlIHdpdGggYSBub3ctZGVhZCBnbG9iYWwg
b2JqZWN0LgorICAgICAgICBPcmlnaW5hbGx5IGNhY2hlZCBzdHJ1Y3R1cmVzIHdlcmUgc3Ryb25n
IHJlZmVyZW5jZXMgYW5kIHNvIHN1Y2ggYSBjYXNlIGNvdWxkIGxlYWQgdG8KKyAgICAgICAgYSBt
YXNzaXZlIG1lbW9yeSBsZWFrLgorICAgICAgICAKKyAgICAgICAgT2YgY291cnNlLCB3ZSBjb3Vs
ZG4ndCB0dXJuIHRoZXNlIHJlZmVyZW5jZXMgaW50byBzaW1wbHkgd2VhayByZWZlcmVuY2VzIGJl
Y2F1c2UgdGhlbgorICAgICAgICB3ZSB3b3VsZCBiZSB0aHJvd2luZyBhd2F5IGNvZGUgdG9vIGZy
ZXF1ZW50bHkuIEl0J3Mgc3VycHJpc2luZ2x5IGNvbW1vbiB0byBoYXZlCisgICAgICAgIGlkaW9t
cyB0aGF0IHJlZHVjZSB0byBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKGZvcmV2ZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgbyA9IG5ldyBTdXBlckltcG9ydGFu
dFN0YXRlT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgLy8gRG8gYSBidW5jaCBvZiB3b3JrIGlu
dm9sdmluZyBvLgorICAgICAgICAgICAgICAgIG8gPSBudWxsOyAvLyBTb21ldGhpbmcgdGhhdCBr
aWxscyBvLgorICAgICAgICAgICAgICAgIC8vIERvIHNvbWUgbW9yZSB3b3JrLCBhbmQgd2UgR0Mg
aGVyZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFVzdWFsbHkgdGhlICJvID0g
bnVsbCIgYXJpc2VzIGJlY2F1c2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdCBpcyBpbnNp
ZGUgb2YgYQorICAgICAgICBmdW5jdGlvbiB0aGF0IHRoZSBsb29wIGNhbGxzLiBUaGlzIGlzIHBh
cnRpY3VsYXJseSBmcmVxdWVudCBvbiB0aGUgV2ViIGJlY2F1c2UgdGhhdAorICAgICAgICBvdXRl
ciBsb29wIGlzIGFjdHVhbGx5IHRoZSBydW5sb29wIGFuZCB0aGUgR0MgaXMgdHlwaWNhbGx5IHNj
aGVkdWxlZCB3aGVuIHRoZSBydW5sb29wCisgICAgICAgIGlzIGlkbGUuIFNvLCBpZiB3ZSB0cmVh
dGVkIGFsbCBjYWNoZWQgc3RydWN0dXJlcyBhcyB3ZWFrIGFuZCB0aGUgYXBwIGhhZCBhbnkgdHlw
ZXMKKyAgICAgICAgdGhhdCBleGlzdGVkIG9ubHkgZHVyaW5nIGV2ZW50IGhhbmRsaW5nIGJ1dCB0
eXBpY2FsbHkgZGlkbid0IHJlbWFpbiByZWFjaGFibGUgYWZ0ZXIKKyAgICAgICAgdGhlIGV2ZW50
IGdvdCBoYW5kbGVkLCB0aGVuIHdlIHdvdWxkIGJlIHRocm93aW5nIGF3YXkgYSBsb3Qgb2YgY29k
ZS4KKyAgICAgICAgCisgICAgICAgIFNvLCBpbnN0ZWFkIG9mIG1ha2luZyB0aG9zZSBzdHJ1Y3R1
cmVzIGNvbXBsZXRlbHkgd2Vhaywgd2UgdGhyZXcgaW4gYSBjbGV2ZXIgdHJpY2s6CisgICAgICAg
IHdlIHdvdWxkIGZpeHBvaW50IG92ZXIgYWxsIGNhY2hlZCB0cmFuc2l0aW9ucyB0aGF0IGNyZWF0
ZSBuZXcgc3RydWN0dXJlcywgYW5kIGlmIGFueQorICAgICAgICBvZiB0aG9zZSB0cmFuc2l0aW9u
cyB3YXMgYSBwYXJ0IG9mIGNvZGUgdGhhdCBhcHBlYXJlZCBsaXZlLCB0aGVuIHdlIHdvdWxkIG1h
cmsgdGhlCisgICAgICAgIHRhcmdldCBzdHJ1Y3R1cmUuIFRoaXMgdGVuZGVkIHRvIGtlZXAgYWxp
dmUgc3RydWN0dXJlcyBmb3Igb2JqZWN0cyB0aGF0IGhvdCBjb2RlCisgICAgICAgIHdvdWxkIHRl
bmQgdG8gY3JlYXRlLgorICAgICAgICAKKyAgICAgICAgQnV0IG5vdyBpdCBsb29rcyBsaWtlIHRo
aXMgaXNuJ3QgZW5vdWdoLiBUaG9zZSB0cmFuc2l0aW9uIGNhY2hlcyBhcmUganVzdCB0aGF0IC0K
KyAgICAgICAgY2FjaGVzLiBUaGV5IGFyZSBpbXBlcmZlY3QuIFNvLCB0aGlzIHBhdGNoIGFkZHMg
YW5vdGhlciBydWxlIGZvciBrZWVwaW5nIHN0cnVjdHVyZXMKKyAgICAgICAgYWxpdmU6CisgICAg
ICAgIAorICAgICAgICAgICAgSWYgYSBzdHJ1Y3R1cmUgaXMgY2FjaGVkIGJ5IGFuIG9wdGltaXpp
bmcgY29tcGlsZXIgYW5kIGl0cyBnbG9iYWwgb2JqZWN0IGlzCisgICAgICAgICAgICBvdGhlcndp
c2Ugc3RpbGwgbGl2ZSwgdGhlbiBtYXJrIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHJ1bGUgd2lsbCB1c3VhbGx5IGRvbWluYXRlIHRoZSB0cmFuc2l0aW9uIHJ1bGUsIGJ1
dCB0aGUgdHJhbnNpdGlvbiBydWxlIGlzIHN0aWxsCisgICAgICAgIGNyaXRpY2FsIGZvciB3aGVu
IHdlIGhhdmVuJ3QgY3JlYXRlZCBvcHRpbWl6ZWQgY29kZSB5ZXQgb3IgZm9yIHN0cnVjdHVyZXMg
dGhhdCBhcmVuJ3QKKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgZml4IGludHJvZHVjZXMgdHdvIHBvc3NpYmlsaXRpZXMgZm9y
IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLCBidXQgdGhleSBwcm9iYWJseQorICAgICAgICByZXF1aXJl
IHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uOgorICAgICAgICAKKyAgICAgICAgLSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc4CisgICAgICAgICAgQ29uc2lkZXIg
Z2V0dGluZyByaWQgb2YgdGhlIEdDIHRyYW5zaXRpb24gZml4cG9pbnQgZm9yIG9wdGltaXplZCBj
b2RlLCBzaW5jZSB0aGUKKyAgICAgICAgICBnbG9iYWwgb2JqZWN0IHJ1bGUgaXMgbGlrZWx5IHRv
IGRvbWluYXRlIGl0CisgICAgICAgICAgICAKKyAgICAgICAgLSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc5CisgICAgICAgICAgQ29uc2lkZXIgZ2V0dGluZyBy
aWQgb2YgdGhlIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldEJ5R0MgZmxhZyBiZWNhdXNlIHRoZSBn
bG9iYWwKKyAgICAgICAgICBvYmplY3QgcnVsZSBpbXBsaWVzIHRoYXQgY2FjaGluZyBvbiBwb3Nz
aWJseS1HQ2FibGUgc3RydWN0dXJlcyBpcyBubyBsb25nZXIKKyAgICAgICAgICBkaXNhc3Ryb3Vz
CisgICAgICAgIAorICAgICAgICBUaGlzIGxvb2tzIGxpa2UgYSA1MCUgc3BlZWQtdXAgb24gT2N0
YW5lMi9nYmVtdSBpbiB0aGUgRlRMLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmR1bXBDaGFp
bik6CisgICAgICAgIChKU0M6OmR1bXBTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOgorICAgICAgICAoSlNDOjpmb3Jj
ZVN0cnVjdHVyZUxpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE0LTAyLTAxICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHByb2ZpbGVyJ3Mgc3R1
YiBpbmZvIHByb2ZpbGluZyBzdXBwb3J0IHNob3VsZCB3b3JrIGFnYWluCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYzMjY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMiwyMSArMzEyLDIzIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5
SWRPcChQcmludFN0cmUKIH0KIAogI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkgLy8g
dW51c2VkIGluIHNvbWUgY29uZmlndXJhdGlvbnMKLXN0YXRpYyB2b2lkIGR1bXBTdHJ1Y3R1cmUo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCitzdGF0aWMgdm9pZCBk
dW1wU3RydWN0dXJlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIG5hbWUsIFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogewogICAgIGlm
ICghc3RydWN0dXJlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgb3V0LnByaW50ZigiJXMg
PSAlcCIsIG5hbWUsIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoZXhlYy0+dm0oKSwgaWRlbnQuaW1wbCgpKTsK
LSAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpCi0gICAgICAgIG91dC5wcmludGYoIiAo
b2Zmc2V0ID0gJWQpIiwgb2Zmc2V0KTsKKyAgICBpZiAoaWRlbnQpIHsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIGlkZW50LT5p
bXBsKCkpOworICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIgKG9mZnNldCA9ICVkKSIsIG9mZnNldCk7CisgICAgfQogfQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoSklUKSAvLyB1bnVzZWQgd2hlbiBub3QgRU5BQkxFKEpJVCksIGxlYWRp
bmcgdG8gc2lsbHkgd2FybmluZ3MKLXN0YXRpYyB2b2lkIGR1bXBDaGFpbihQcmludFN0cmVhbSYg
b3V0LCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpCitzdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91dCwgVk0m
IHZtLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogewog
ICAgIG91dC5wcmludGYoImNoYWluID0gJXA6IFsiLCBjaGFpbik7CiAgICAgYm9vbCBmaXJzdCA9
IHRydWU7CkBAIC0zMzcsMTAgKzMzOSwxMTIgQEAgc3RhdGljIHZvaWQgZHVtcENoYWluKFByaW50
U3RyZWFtJiBvdXQsIAogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBleGVjLCBjdXJyZW50U3RydWN0dXJlLT5nZXQoKSwgaWRlbnQpOworICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHZtLCBjdXJyZW50U3RydWN0dXJlLT5nZXQo
KSwgaWRlbnQpOwogICAgIH0KICAgICBvdXQucHJpbnRmKCJdIik7CiB9CisKK3N0YXRpYyB2b2lk
IGR1bXBTdHJ1Y3R1cmVTdHViSW5mbyhQcmludFN0cmVhbSYgb3V0LCBWTSYgdm0sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCit7CisgICAgU3Ry
dWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKKyAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSA9IDA7CisgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKKyAgICBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3QgPSAwOworICAgIGludCBsaXN0U2l6
ZSA9IDA7CisgICAgICAgICAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
KyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgb3V0LnByaW50Zigic2Vs
ZiIpOworICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfcHJvdG86CisgICAgICAgIG91dC5wcmludGYoInByb3RvIik7CisgICAgICAgIGJh
c2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpOworICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgb3V0LnByaW50ZigiY2hhaW4iKTsKKyAg
ICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIGNoYWluID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4u
Y2hhaW4uZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmX2xpc3Q6CisgICAgICAgIG91dC5wcmludGYoInNlbGZfbGlzdCIpOworICAgICAgICBzdHJ1
Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKKyAg
ICAgICAgbGlzdFNpemUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAg
ICAgIG91dC5wcmludGYoInByb3RvX2xpc3QiKTsKKyAgICAgICAgc3RydWN0dXJlTGlzdCA9IHN0
dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0U2l6
ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAg
ICBvdXQucHJpbnRmKCJnZW5lcmljIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNz
X2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgIG91dC5wcmludGYoImFycmF5X2xlbmd0aCIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAg
ICAgb3V0LnByaW50Zigic3RyaW5nX2xlbmd0aCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGFjY2Vzc19pbl9saXN0OgorICAgICAgICBvdXQucHJpbnRmKCJpbl9saXN0Iik7CisgICAgICAg
IHN0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAg
ICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF9yZXBsYWNlOgorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgorICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgorICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBkdW1w
aW5nIHRoZXNlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4MDYyCisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgaWYgKGJhc2VTdHJ1Y3R1cmUpIHsKKyAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAg
ICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCB2bSwgYmFzZVN0cnVjdHVyZSwgaWRlbnQp
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKKyAg
ICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90
b3R5cGVTdHJ1Y3QiLCB2bSwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGlmIChjaGFpbikgeworICAgICAgICBvdXQucHJpbnRmKCIsICIpOworICAgICAg
ICBkdW1wQ2hhaW4ob3V0LCB2bSwgY2hhaW4sIGlkZW50KTsKKyAgICB9CisgICAgICAgICAgICAK
KyAgICBpZiAoc3RydWN0dXJlTGlzdCkgeworICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAl
cDogWyIsIHN0cnVjdHVyZUxpc3QpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RT
aXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7CisgICAgICAgICAgICBkdW1w
U3RydWN0dXJlKG91dCwgImJhc2UiLCB2bSwgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5iYXNlLmdl
dCgpLCBpZGVudCk7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5pc0No
YWluKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0udS5jaGFp
bi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOworICAgICAg
ICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCB2bSwgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS51
LmNoYWluLmdldCgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+bGlzdFtpXS51LnByb3Rv
LmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAgICAg
ICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG8iLCB2bSwgc3RydWN0dXJlTGlz
dC0+bGlzdFtpXS51LnByb3RvLmdldCgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOworICAgICAgICB9CisgICAg
ICAgIG91dC5wcmludGYoIl0iKTsKKyAgICB9Cit9CiAjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6
OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhl
YywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQpAQCAtMzU2LDcgKzQ2MCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgb3V0
LnByaW50ZigiIGxsaW50KGFycmF5X2xlbmd0aCkiKTsKICAgICBlbHNlIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpKSB7CiAgICAgICAg
IG91dC5wcmludGYoIiBsbGludCgiKTsKLSAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1
Y3QiLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsICZpZGVudCk7CiAgICAgICAgIG91dC5w
cmludGYoIikiKTsKICAgICB9CiAjZW5kaWYKQEAgLTM2OSw5MiArNDczLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAKICAgICAgICAgaWYgKHN0
dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZSA9
IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgICAg
ICAgICAgb3V0LnByaW50Zigic2VsZiIpOwotICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUg
PSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJv
dG86Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigicHJvdG8iKTsKLSAgICAgICAgICAgICAg
ICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHViSW5m
by51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3Ry
dWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWlu
LmdldCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmX2xp
c3QiKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlk
U2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigicHJvdG9fbGlzdCIpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAg
ICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0
OgotICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCJnZW5lcmljIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlfbGVuZ3RoOgotICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoImFycmF5X2xlbmd0aCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50Zigic3RyaW5nX2xlbmd0aCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoYmFzZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAg
IG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJz
dHJ1Y3QiLCBleGVjLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJvdG90eXBlU3RydWN0IiwgZXhlYywgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hhaW4pIHsKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBDaGFpbihv
dXQsIGV4ZWMsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
ZigiLCBsaXN0ID0gJXA6IFsiLCBzdHJ1Y3R1cmVMaXN0KTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1
Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0uYmFzZS5nZXQo
KSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+bGlzdFtp
XS5pc0NoYWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+
bGlzdFtpXS51LmNoYWluLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0
LCBleGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUuY2hhaW4uZ2V0KCksIGlkZW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8u
Z2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG8iLCBl
eGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0KCksIGlkZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR1bXBTdHJ1
Y3R1cmVTdHViSW5mbyhvdXQsIGV4ZWMtPnZtKCksIHN0dWJJbmZvLCAmaWRlbnQpOwogICAgICAg
ICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNiw2ICsyMDU1
LDI1IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIH0KIAorLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSB3YW50IHRoaXMg
cmVjb25zaWRlcmVkLgorc3RhdGljIHZvaWQgZm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcygKKyAgICBT
bG90VmlzaXRvciYgdmlzaXRvciwgV3JpdGVCYXJyaWVyPEpTQ2VsbD4mIHBvc3NpYmxlU3RydWN0
dXJlKQoreworICAgIEpTQ2VsbCogY2VsbCA9IHBvc3NpYmxlU3RydWN0dXJlLmdldCgpOworICAg
IGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
IChjZWxsLT5jbGFzc0luZm8oKSAhPSBTdHJ1Y3R1cmU6OmluZm8oKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KGNl
bGwpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQoc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2aXNpdG9yLmFwcGVuZCgmcG9zc2libGVTdHJ1
Y3R1cmUpOworICAgIHJldHVybjsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKQEAgLTIxMTQsNyArMjE1MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZG9l
cyB0aGUgZm9sbG93aW5nOgorICAgICAgICAvLyAtIEZvcmNlcyBsaXZlbmVzcyBvZiBzdHJ1Y3R1
cmVzIHdpdGggbGl2ZSBnbG9iYWwgb2JqZWN0cworICAgICAgICAvLyAtIEZvcmNlcyBsaXZlbmVz
cyBvZiBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGtub3duIHRvIGJlIHRyYW5zaXRpb25lZC10bywKKyAg
ICAgICAgLy8gICBhbmQgd2hlcmUgdGhlIHNvdXJjZXMgb2YgdGhvc2UgdHJhbnNpdGlvbnMgYXJl
IGxpdmUuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZvcmNlU3RydWN0
dXJlTGl2ZW5lc3ModmlzaXRvciwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXSk7CisgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGdldHRp
bmcgcmlkIG9mIHRoZSB0cmFuc2l0aW9uIGZpeHBvaW50IHBhcnQgb2YgdGhpcy4KKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgwNzgKKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCghZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5t
X2NvZGVPcmlnaW4KICAgICAgICAgICAgICAgICAgfHwgSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9u
LT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICAgICAgICAgICYm
IEhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9mcm9tLmdldCgpKSkg
ewpAQCAtMjEzMCw3ICsyMTgwLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhTbG8KICAgICAgICAgICAgICAgICAvLyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNv
dXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMgdGhlIHRhcmdldC4KICAgICAgICAgICAgICAgICAvLyAg
IEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBsaXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBs
aXZlLgogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRp
b25zW2ldLm1fdG8pOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvcmNlU3RydWN0dXJlTGl2ZW5lc3ModmlzaXRvciwgZGZnQ29tbW9uLT50cmFuc2l0
aW9uc1tpXS5tX2Zyb20pOworICAgICAgICAgICAgZm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcyh2aXNp
dG9yLCBkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fdG8pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90
by5nZXQoKSkpCiAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTIxODQsNiArMjIzOSw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3QKIAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KCkKIHsKKyAgICBib29sIHZlcmJvc2UgPSBPcHRpb25zOjp2ZXJib3NlU3RydWN0dXJl
Q2xlYXJpbmdJbkdDKCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpOworICAgIAogICAgIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogICAgIGlmIChKSVRDb2Rl
Ojpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkgewogICAgICAgICBjb25zdCBWZWN0b3I8
dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOwpAQCAtMjE5Niw3ICsyMjUzLDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAgICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVjdGlv
bls0XS51LnN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVjdGlvbls0XS51LnN0
cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBwcm9wZXJ0
eSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVj
dHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1
cmUuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQg
PSAwOwpAQCAtMjIwOSw3ICsyMjY2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChjdXJJbnN0
cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgSGVh
cDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRpb24gd2l0aCBz
dHJ1Y3R1cmVzICVwIC0+ICVwLCBjaGFpbiAlcC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmUuZ2V0KCksCkBAIC0y
MjI1LDE0ICsyMjgyLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICAgICAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKICAgICAgICAgICAgICAgICBpZiAoIWN1
ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0
aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExM
SW50IHRvX3RoaXMgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBjdXJJbnN0cnVjdGlvblsyXS51LnN0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1
Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
b3BfZ2V0X2NhbGxlZToKICAgICAgICAgICAgICAgICBpZiAoIWN1ckluc3RydWN0aW9uWzJdLnUu
anNDZWxsIHx8IEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IGdldCBjYWxsZWUgd2l0aCBmdW5j
dGlvbiAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5jbGVhcigpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjI0MCw3ICsyMjk3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNBY3Rp
dmF0aW9uPiYgYWN0aXZhdGlvbiA9IGN1ckluc3RydWN0aW9uWzVdLnUuYWN0aXZhdGlvbjsKICAg
ICAgICAgICAgICAgICBpZiAoIWFjdGl2YXRpb24gfHwgSGVhcDo6aXNNYXJrZWQoYWN0aXZhdGlv
bi5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIGFjdGl2YXRpb24gJXAu
XG4iLCBhY3RpdmF0aW9uLmdldCgpKTsKICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjU0LDcgKzIzMTEsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1XS51LnN0
cnVjdHVyZTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtl
ZChzdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgc2NvcGUgYWNj
ZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyNjcs
NyArMjMyNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNp
ZiBFTkFCTEUoTExJTlQpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xsaW50
Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fbGxpbnRDYWxs
TGlua0luZm9zW2ldLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlu
a0luZm9zW2ldLmNhbGxlZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMsICJcbiIp
OwogICAgICAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLnVubGluaygpOwogICAg
ICAgICAgICAgfQpAQCAtMjI4MCwxMCArMjMzNywxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgbm90IGxpdmUuIElmIHdlIGFyZSwgdGhlbiBqZXR0aXNvbi4KICAgICBpZiAoIShzaG91
bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHx8IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCp0aGlzLCAiIGhhcyBkZWFkIHdlYWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdD
LlxuIik7CiAKLSAgICAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UgfHwgREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgewogICAg
ICAgICAgICAgZGF0YUxvZygqdGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0
aGUgZm9sbG93aW5nIGRlYWQgcmVmZXJlbmNlczpcbiIpOwogICAgICAgICAgICAgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKQEAgLTIzMTcsNyArMjM3NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBpZiAoQ2xvc3VyZUNhbGxTdHViUm91dGluZSog
c3R1YiA9IGNhbGxMaW5rSW5mbyhpKS5zdHViLmdldCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQoc3R1Yi0+c3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQoc3R1Yi0+ZXhlY3V0YWJsZSgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2xv
c3VyZSBjYWxsIGZyb20gIiwgKnRoaXMsICIgdG8gIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1Yi0+ZXhlY3V0YWJsZSgpLT5oYXNoRm9yKGNhbGxMaW5rSW5mbyhpKS5zcGVj
aWFsaXphdGlvbktpbmQoKSksCkBAIC0yMzI2LDcgKzIzODMsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8oaSkudW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5r
SW5mbyhpKS5jYWxsZWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkNsZWFyaW5nIGNhbGwgZnJvbSAiLCAqdGhpcywgIiB0byAiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSksICIg
KCIsCkBAIC0yMzM4LDggKzIzOTUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmICghIWNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZQotICAgICAgICAgICAgICAgICYm
ICFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQor
ICAgICAgICAgICAgICAgICYmICFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSkubGFzdFNl
ZW5DYWxsZWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIGxhc3RTZWVuQ2FsbGVlIGZyb20gIiwgKnRo
aXMsICIgdG8gIiwgUmF3UG9pbnRlcihjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUuZ2V0
KCkpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxs
ZWUuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKEJhZzxT
dHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgewogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gKippdGVyOwpAQCAtMjM0Nyw2ICsyNDA3LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgIGlmIChzdHViSW5mby52aXNpdFdlYWtSZWZl
cmVuY2VzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcg
c3R1YkluZm8gZnJvbSAiLCAqdGhpcywgIiBhdCAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdp
dGggc3RhdGU6ICIpOworICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmVTdHViSW5mbyhXVEY6
OmRhdGFGaWxlKCksICp2bSgpLCBzdHViSW5mbywgMCk7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzZXRT
dHViRHVyaW5nR0NJbnRlcm5hbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yNDEzLDYgKzI0NzksOSBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViSW50
ZXJuYWwoUmVwYXRjCiB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChS
ZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
CiB7CiAgICAgcmVzZXRTdHViSW50ZXJuYWwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAg
IAorICAgIC8vIEZJWE1FOiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGlzIGZsYWc7IGl0IG1p
Z2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc5CiAgICAgc3R1YkluZm8ucmVzZXRCeUdDID0gdHJ1ZTsK
IH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTYzMjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgdHlwZWRlZiBPcHRpb25SYW5n
ZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGFsd2F5c0NvbXB1dGVIYXNoLCBmYWxzZSkgXAog
ICAgIHYoYm9vbCwgdGVzdFRoZUZUTCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5p
dGl6ZVN0YWNrLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmVyYm9zZVN0cnVjdHVyZUNsZWFyaW5n
SW5HQywgZmFsc2UpIFwKICAgICBcCiAgICAgdihib29sLCBlbmFibGVPU1JFbnRyeVRvREZHLCB0
cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVPU1JFbnRyeVRvRlRMLCB0cnVlKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222935</attachid>
            <date>2014-02-02 12:57:30 -0800</date>
            <delta_ts>2014-02-13 04:08:35 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24252</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE0LTAyLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGtlZXAgc3RydWN0dXJlcyBhbGl2ZSBpZiB0aGV5IGFyZSBpbmxpbmVkIGludG8g
b3B0aW1pemVkIGNvZGUgKERGRyBvciBGVEwpIGFuZCB0aGVpciBnbG9iYWxPYmplY3QgaXMgYWxp
dmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhlIG9yaWdpbmFsIHJvbGUgb2YgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGZpeHBvaW50
IHdhcyB0byBndWFyZCBhZ2FpbnN0IGNhc2VzCisgICAgICAgIHdoZXJlIHdlIGhhZCBjb2RlIHRo
YXQgY2FjaGVkIG9uIGEgbm93LWRlYWQgc3RydWN0dXJlIHdpdGggYSBub3ctZGVhZCBnbG9iYWwg
b2JqZWN0LgorICAgICAgICBPcmlnaW5hbGx5IGNhY2hlZCBzdHJ1Y3R1cmVzIHdlcmUgc3Ryb25n
IHJlZmVyZW5jZXMgYW5kIHNvIHN1Y2ggYSBjYXNlIGNvdWxkIGxlYWQgdG8KKyAgICAgICAgYSBt
YXNzaXZlIG1lbW9yeSBsZWFrLgorICAgICAgICAKKyAgICAgICAgT2YgY291cnNlLCB3ZSBjb3Vs
ZG4ndCB0dXJuIHRoZXNlIHJlZmVyZW5jZXMgaW50byBzaW1wbHkgd2VhayByZWZlcmVuY2VzIGJl
Y2F1c2UgdGhlbgorICAgICAgICB3ZSB3b3VsZCBiZSB0aHJvd2luZyBhd2F5IGNvZGUgdG9vIGZy
ZXF1ZW50bHkuIEl0J3Mgc3VycHJpc2luZ2x5IGNvbW1vbiB0byBoYXZlCisgICAgICAgIGlkaW9t
cyB0aGF0IHJlZHVjZSB0byBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKGZvcmV2ZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgbyA9IG5ldyBTdXBlckltcG9ydGFu
dFN0YXRlT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgLy8gRG8gYSBidW5jaCBvZiB3b3JrIGlu
dm9sdmluZyBvLgorICAgICAgICAgICAgICAgIG8gPSBudWxsOyAvLyBTb21ldGhpbmcgdGhhdCBr
aWxscyBvLgorICAgICAgICAgICAgICAgIC8vIERvIHNvbWUgbW9yZSB3b3JrLCBhbmQgd2UgR0Mg
aGVyZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFVzdWFsbHkgdGhlICJvID0g
bnVsbCIgYXJpc2VzIGJlY2F1c2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdCBpcyBpbnNp
ZGUgb2YgYQorICAgICAgICBmdW5jdGlvbiB0aGF0IHRoZSBsb29wIGNhbGxzLiBUaGlzIGlzIHBh
cnRpY3VsYXJseSBmcmVxdWVudCBvbiB0aGUgV2ViIGJlY2F1c2UgdGhhdAorICAgICAgICBvdXRl
ciBsb29wIGlzIGFjdHVhbGx5IHRoZSBydW5sb29wIGFuZCB0aGUgR0MgaXMgdHlwaWNhbGx5IHNj
aGVkdWxlZCB3aGVuIHRoZSBydW5sb29wCisgICAgICAgIGlzIGlkbGUuIFNvLCBpZiB3ZSB0cmVh
dGVkIGFsbCBjYWNoZWQgc3RydWN0dXJlcyBhcyB3ZWFrIGFuZCB0aGUgYXBwIGhhZCBhbnkgdHlw
ZXMKKyAgICAgICAgdGhhdCBleGlzdGVkIG9ubHkgZHVyaW5nIGV2ZW50IGhhbmRsaW5nIGJ1dCB0
eXBpY2FsbHkgZGlkbid0IHJlbWFpbiByZWFjaGFibGUgYWZ0ZXIKKyAgICAgICAgdGhlIGV2ZW50
IGdvdCBoYW5kbGVkLCB0aGVuIHdlIHdvdWxkIGJlIHRocm93aW5nIGF3YXkgYSBsb3Qgb2YgY29k
ZS4KKyAgICAgICAgCisgICAgICAgIFNvLCBpbnN0ZWFkIG9mIG1ha2luZyB0aG9zZSBzdHJ1Y3R1
cmVzIGNvbXBsZXRlbHkgd2Vhaywgd2UgdGhyZXcgaW4gYSBjbGV2ZXIgdHJpY2s6CisgICAgICAg
IHdlIHdvdWxkIGZpeHBvaW50IG92ZXIgYWxsIGNhY2hlZCB0cmFuc2l0aW9ucyB0aGF0IGNyZWF0
ZSBuZXcgc3RydWN0dXJlcywgYW5kIGlmIGFueQorICAgICAgICBvZiB0aG9zZSB0cmFuc2l0aW9u
cyB3YXMgYSBwYXJ0IG9mIGNvZGUgdGhhdCBhcHBlYXJlZCBsaXZlLCB0aGVuIHdlIHdvdWxkIG1h
cmsgdGhlCisgICAgICAgIHRhcmdldCBzdHJ1Y3R1cmUuIFRoaXMgdGVuZGVkIHRvIGtlZXAgYWxp
dmUgc3RydWN0dXJlcyBmb3Igb2JqZWN0cyB0aGF0IGhvdCBjb2RlCisgICAgICAgIHdvdWxkIHRl
bmQgdG8gY3JlYXRlLgorICAgICAgICAKKyAgICAgICAgQnV0IG5vdyBpdCBsb29rcyBsaWtlIHRo
aXMgaXNuJ3QgZW5vdWdoLiBUaG9zZSB0cmFuc2l0aW9uIGNhY2hlcyBhcmUganVzdCB0aGF0IC0K
KyAgICAgICAgY2FjaGVzLiBUaGV5IGFyZSBpbXBlcmZlY3QuIFNvLCB0aGlzIHBhdGNoIGFkZHMg
YW5vdGhlciBydWxlIGZvciBrZWVwaW5nIHN0cnVjdHVyZXMKKyAgICAgICAgYWxpdmU6CisgICAg
ICAgIAorICAgICAgICAgICAgSWYgYSBzdHJ1Y3R1cmUgaXMgY2FjaGVkIGJ5IGFuIG9wdGltaXpp
bmcgY29tcGlsZXIgYW5kIGl0cyBnbG9iYWwgb2JqZWN0IGlzCisgICAgICAgICAgICBvdGhlcndp
c2Ugc3RpbGwgbGl2ZSwgdGhlbiBtYXJrIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHJ1bGUgd2lsbCB1c3VhbGx5IGRvbWluYXRlIHRoZSB0cmFuc2l0aW9uIHJ1bGUsIGJ1
dCB0aGUgdHJhbnNpdGlvbiBydWxlIGlzIHN0aWxsCisgICAgICAgIGNyaXRpY2FsIGZvciB3aGVu
IHdlIGhhdmVuJ3QgY3JlYXRlZCBvcHRpbWl6ZWQgY29kZSB5ZXQgb3IgZm9yIHN0cnVjdHVyZXMg
dGhhdCBhcmVuJ3QKKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgZml4IGludHJvZHVjZXMgdHdvIHBvc3NpYmlsaXRpZXMgZm9y
IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLCBidXQgdGhleSBwcm9iYWJseQorICAgICAgICByZXF1aXJl
IHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uOgorICAgICAgICAKKyAgICAgICAgLSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc4CisgICAgICAgICAgQ29uc2lkZXIg
Z2V0dGluZyByaWQgb2YgdGhlIEdDIHRyYW5zaXRpb24gZml4cG9pbnQgZm9yIG9wdGltaXplZCBj
b2RlLCBzaW5jZSB0aGUKKyAgICAgICAgICBnbG9iYWwgb2JqZWN0IHJ1bGUgaXMgbGlrZWx5IHRv
IGRvbWluYXRlIGl0CisgICAgICAgICAgICAKKyAgICAgICAgLSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc5CisgICAgICAgICAgQ29uc2lkZXIgZ2V0dGluZyBy
aWQgb2YgdGhlIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldEJ5R0MgZmxhZyBiZWNhdXNlIHRoZSBn
bG9iYWwKKyAgICAgICAgICBvYmplY3QgcnVsZSBpbXBsaWVzIHRoYXQgY2FjaGluZyBvbiBwb3Nz
aWJseS1HQ2FibGUgc3RydWN0dXJlcyBpcyBubyBsb25nZXIKKyAgICAgICAgICBkaXNhc3Ryb3Vz
CisgICAgICAgIAorICAgICAgICBUaGlzIGxvb2tzIGxpa2UgYSA1MCUgc3BlZWQtdXAgb24gT2N0
YW5lMi9nYmVtdSBpbiB0aGUgRlRMLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGluY2x1
ZGVzIGEgYnVuY2ggb2YgZGVidWcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgd2hhdCBpcyBnb2luZyBv
biBpbnNpZGUgb2YKKyAgICAgICAgdGhlIEdDJ3Mgc3RydWN0dXJlIGNsZWFyaW5nLiBUaGF0J3Mg
YWN0dWFsbHkgdGhlIGJ1bGsgb2YgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmR1bXBTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpkdW1wQ2hhaW4pOgorICAgICAgICAoSlNDOjpkdW1wU3RydWN0dXJlU3R1YkluZm8pOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToKKyAgICAgICAg
KEpTQzo6Zm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0w
Mi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQyBwcm9m
aWxlcidzIHN0dWIgaW5mbyBwcm9maWxpbmcgc3VwcG9ydCBzaG91bGQgd29yayBhZ2FpbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE2MzI2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsMjEgKzMxMiwyMyBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlCiB9CiAKICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUo
TExJTlQpIC8vIHVudXNlZCBpbiBzb21lIGNvbmZpZ3VyYXRpb25zCi1zdGF0aWMgdm9pZCBkdW1w
U3RydWN0dXJlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIG5hbWUsIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorc3Rh
dGljIHZvaWQgZHVtcFN0cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1l
LCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkK
IHsKICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG91dC5w
cmludGYoIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOwogICAgIAotICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGV4ZWMtPnZtKCksIGlkZW50
LmltcGwoKSk7Ci0gICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICBvdXQu
cHJpbnRmKCIgKG9mZnNldCA9ICVkKSIsIG9mZnNldCk7CisgICAgaWYgKGlkZW50KSB7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCBpZGVudC0+aW1wbCgpKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQor
ICAgICAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAlZCkiLCBvZmZzZXQpOworICAgIH0K
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkgLy8gdW51c2VkIHdoZW4gbm90IEVOQUJMRShK
SVQpLCBsZWFkaW5nIHRvIHNpbGx5IHdhcm5pbmdzCi1zdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJp
bnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50KQorc3RhdGljIHZvaWQgZHVtcENoYWluKFByaW50U3RyZWFt
JiBvdXQsIFZNJiB2bSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCkKIHsKICAgICBvdXQucHJpbnRmKCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOwogICAgIGJv
b2wgZmlyc3QgPSB0cnVlOwpAQCAtMzM3LDEwICszMzksMTEyIEBAIHN0YXRpYyB2b2lkIGR1bXBD
aGFpbihQcmludFN0cmVhbSYgb3V0LCAKICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgIGR1bXBTdHJ1
Y3R1cmUob3V0LCAic3RydWN0IiwgZXhlYywgY3VycmVudFN0cnVjdHVyZS0+Z2V0KCksIGlkZW50
KTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCB2bSwgY3VycmVudFN0cnVj
dHVyZS0+Z2V0KCksIGlkZW50KTsKICAgICB9CiAgICAgb3V0LnByaW50ZigiXSIpOwogfQorCitz
dGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlU3R1YkluZm8oUHJpbnRTdHJlYW0mIG91dCwgVk0mIHZt
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQor
eworICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7CisgICAgU3RydWN0dXJlKiBwcm90
b3R5cGVTdHJ1Y3R1cmUgPSAwOworICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IDA7CisgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKKyAgICBp
bnQgbGlzdFNpemUgPSAwOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkg
eworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBvdXQucHJpbnRmKCJz
ZWxmIik7CisgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9wcm90bzoKKyAgICAgICAgb3V0LnByaW50ZigicHJvdG8iKTsKKyAgICAgICAg
YmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCk7CisgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgorICAgICAgICBvdXQucHJpbnRmKCJjaGFpbiIpOwor
ICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgY2hhaW4gPSBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbi5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdDoKKyAgICAgICAgb3V0LnByaW50Zigic2VsZl9saXN0Iik7CisgICAgICAgIHN0
cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0Owor
ICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKKyAg
ICAgICAgb3V0LnByaW50ZigicHJvdG9fbGlzdCIpOworICAgICAgICBzdHJ1Y3R1cmVMaXN0ID0g
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RT
aXplID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAg
ICAgIG91dC5wcmludGYoImdlbmVyaWMiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nl
c3NfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAgICAgb3V0LnByaW50ZigiYXJyYXlfbGVuZ3RoIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9zdHJpbmdfbGVuZ3RoOgorICAg
ICAgICBvdXQucHJpbnRmKCJzdHJpbmdfbGVuZ3RoIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgYWNjZXNzX2luX2xpc3Q6CisgICAgICAgIG91dC5wcmludGYoImluX2xpc3QiKTsKKyAgICAg
ICAgc3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAg
ICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKKyAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6CisgICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWM6CisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGR1
bXBpbmcgdGhlc2UuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjgwNjIKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBpZiAoYmFzZVN0cnVjdHVyZSkgeworICAgICAgICBvdXQucHJpbnRmKCIsICIpOworICAg
ICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHZtLCBiYXNlU3RydWN0dXJlLCBpZGVu
dCk7CisgICAgfQorICAgIAorICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKKyAgICAgICAg
b3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVT
dHJ1Y3QiLCB2bSwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAgIH0KKyAgICAKKyAgICBpZiAo
Y2hhaW4pIHsKKyAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgZHVtcENoYWluKG91
dCwgdm0sIGNoYWluLCBpZGVudCk7CisgICAgfQorICAgIAorICAgIGlmIChzdHJ1Y3R1cmVMaXN0
KSB7CisgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgc3RydWN0dXJlTGlzdCk7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgeworICAgICAgICAg
ICAgaWYgKGkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIigiKTsKKyAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIs
IHZtLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmJhc2UuZ2V0KCksIGlkZW50KTsKKyAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmlzQ2hhaW4pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlTGlzdC0+bGlzdFtpXS51LmNoYWluLmdldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFp
bihvdXQsIHZtLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUuY2hhaW4uZ2V0KCksIGlkZW50KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJwcm90byIsIHZtLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0
KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIpIik7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50ZigiXSIpOwor
ICAgIH0KK30KICNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0
dXMoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0
IFN0dWJJbmZvTWFwJiBtYXApCkBAIC0zNTYsNyArNDYwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICBvdXQucHJpbnRmKCIgbGxpbnQoYXJyYXlf
bGVuZ3RoKSIpOwogICAgIGVsc2UgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5zdHJ1Y3Rp
b25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50ZigiIGxsaW50KCIp
OwotICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4ZWMsIHN0cnVjdHVyZSwg
aWRlbnQpOworICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSwgJmlkZW50KTsKICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgIH0KICNl
bmRpZgpAQCAtMzY5LDkyICs0NzMsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2Fj
aGVTdGF0dXMoCiAgICAgICAgIAogICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikgewogICAgICAg
ICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3Ry
dWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG90
eXBlU3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IDA7
Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxp
c3QgPSAwOwotICAgICAgICAgICAgaW50IGxpc3RTaXplID0gMDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxm
Iik7Ci0gICAgICAgICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKLSAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCJwcm90byIpOwotICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHVi
SW5mby51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwotICAgICAgICAg
ICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3Rv
dHlwZVN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJjaGFpbiIpOwotICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIGNo
YWluID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0Ogot
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoInNlbGZfbGlzdCIpOwotICAgICAgICAgICAgICAg
IHN0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Qu
bGlzdFNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJwcm90
b19saXN0Iik7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0
QnlJZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgICAgIGxpc3RTaXplID0g
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgICAgICAgICAgb3V0
LnByaW50ZigidW5zZXQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgotICAgICAgICAgICAgICAgIG91dC5wcmludGYo
ImdlbmVyaWMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYWNj
ZXNzX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiYXJyYXlf
bGVuZ3RoIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vz
c19nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzdHJpbmdf
bGVuZ3RoIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChiYXNlU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4ZWMsIGJhc2VTdHJ1
Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHByb3RvdHlwZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwg
Iik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3Qi
LCBleGVjLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChjaGFpbikgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYo
IiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgY2hhaW4sIGlkZW50
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZUxpc3QpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAlcDogWyIsIHN0
cnVjdHVyZUxpc3QpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYo
IigiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJiYXNlIiwgZXhl
Yywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5iYXNlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmlzQ2hhaW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUuY2hhaW4uZ2V0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIHN0cnVjdHVyZUxpc3Qt
Pmxpc3RbaV0udS5jaGFpbi5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0udS5wcm90by5nZXQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90byIsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxp
c3RbaV0udS5wcm90by5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiki
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiXSIpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZHVtcFN0cnVjdHVyZVN0dWJJbmZvKG91dCwgZXhl
Yy0+dm0oKSwgc3R1YkluZm8sICZpZGVudCk7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7
CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDM2LDYgKzIwNTUsMjUgQEAgdm9pZCBDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
CisvLyBSZXR1cm5zIGZhbHNlIGlmIHdlIHdhbnQgdGhpcyByZWNvbnNpZGVyZWQuCitzdGF0aWMg
dm9pZCBmb3JjZVN0cnVjdHVyZUxpdmVuZXNzKAorICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBX
cml0ZUJhcnJpZXI8SlNDZWxsPiYgcG9zc2libGVTdHJ1Y3R1cmUpCit7CisgICAgSlNDZWxsKiBj
ZWxsID0gcG9zc2libGVTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNl
bGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGNlbGwtPmNsYXNzSW5mbygpICE9
IFN0cnVjdHVyZTo6aW5mbygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oY2VsbCk7CisgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHZpc2l0b3IuYXBwZW5kKCZwb3NzaWJsZVN0cnVjdHVyZSk7CisgICAgcmV0dXJuOwor
fQorCiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpAQCAtMjExNCw3ICsyMTUyLDE5
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
ICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAg
ICAgIC8vIC0gRm9yY2VzIGxpdmVuZXNzIG9mIHN0cnVjdHVyZXMgd2l0aCBsaXZlIGdsb2JhbCBv
YmplY3RzCisgICAgICAgIC8vIC0gRm9yY2VzIGxpdmVuZXNzIG9mIHN0cnVjdHVyZXMgdGhhdCBh
cmUga25vd24gdG8gYmUgdHJhbnNpdGlvbmVkLXRvLAorICAgICAgICAvLyAgIGFuZCB3aGVyZSB0
aGUgc291cmNlcyBvZiB0aG9zZSB0cmFuc2l0aW9ucyBhcmUgbGl2ZS4KKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgZm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcyh2aXNpdG9yLCBk
ZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgZ2V0dGluZyByaWQgb2YgdGhlIHRyYW5zaXRp
b24gZml4cG9pbnQgcGFydCBvZiB0aGlzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3OAorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoKCFkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbgogICAgICAgICAg
ICAgICAgICB8fCBIZWFwOjppc01hcmtlZChkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQoZGZnQ29t
bW9uLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20uZ2V0KCkpKSB7CkBAIC0yMTMwLDcgKzIxODAsMTIg
QEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsbwogICAgICAgICAgICAg
ICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUgc291cmNlLCBhbmQgaWYgc28sIHN0b3Jl
cyB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgICAgIC8vICAgSGVuY2UgdGhlIHNvdXJjZSBtdXN0
IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJlIGxpdmUuCiAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90byk7Ci0gICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yY2VTdHJ1Y3R1cmVM
aXZlbmVzcyh2aXNpdG9yLCBkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fZnJvbSk7CisgICAg
ICAgICAgICBmb3JjZVN0cnVjdHVyZUxpdmVuZXNzKHZpc2l0b3IsIGRmZ0NvbW1vbi0+dHJhbnNp
dGlvbnNbaV0ubV90byk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQoZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvLmdldCgpKSkKICAgICAgICAgICAg
ICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjE4
NCw2ICsyMjM5LDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdAog
CiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogeworICAgIGJvb2wg
dmVyYm9zZSA9IE9wdGlvbnM6OnZlcmJvc2VTdHJ1Y3R1cmVDbGVhcmluZ0luR0MoKSB8fCBPcHRp
b25zOjp2ZXJib3NlT1NSKCk7CisgICAgCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
bV92bS0+aW50ZXJwcmV0ZXI7CiAgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKSB7CiAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zKCk7CkBAIC0yMTk2LDcgKzIyNTMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToK
ICAgICAgICAgICAgICAgICBpZiAoIWN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlIHx8IEhl
YXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHByb3BlcnR5IGFjY2VzcyB3aXRoIHN0cnVjdHVy
ZSAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAg
ICAgICAgIGN1ckluc3RydWN0aW9uWzVdLnUub3BlcmFuZCA9IDA7CkBAIC0yMjA5LDcgKzIyNjYs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAg
ICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJl
LmdldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVj
dGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBMTEludCBwdXQgdHJhbnNpdGlvbiB3aXRoIHN0cnVjdHVyZXMgJXAgLT4gJXAsIGNo
YWluICVwLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0
XS51LnN0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJbnN0
cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKSwKQEAgLTIyMjUsMTQgKzIyODIsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgY2FzZSBv
cF90b190aGlzOgogICAgICAgICAgICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1
Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0
KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVj
dHVyZSAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICBjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5jbGVhcigpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgogICAgICAg
ICAgICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwgfHwgSGVhcDo6aXNNYXJr
ZWQoY3VySW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
Q2xlYXJpbmcgTExJbnQgZ2V0IGNhbGxlZSB3aXRoIGZ1bmN0aW9uICVwLlxuIiwgY3VySW5zdHJ1
Y3Rpb25bMl0udS5qc0NlbGwuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9u
WzJdLnUuanNDZWxsLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjQwLDcg
KzIyOTcsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0FjdGl2YXRpb24+JiBhY3RpdmF0aW9uID0g
Y3VySW5zdHJ1Y3Rpb25bNV0udS5hY3RpdmF0aW9uOwogICAgICAgICAgICAgICAgIGlmICghYWN0
aXZhdGlvbiB8fCBIZWFwOjppc01hcmtlZChhY3RpdmF0aW9uLmdldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIGRlYWQgYWN0aXZhdGlvbiAlcC5cbiIsIGFjdGl2YXRpb24uZ2V0KCkp
OwogICAgICAgICAgICAgICAgIGFjdGl2YXRpb24uY2xlYXIoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIyNTQsNyArMjMxMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4m
IHN0cnVjdHVyZSA9IGN1ckluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlOwogICAgICAgICAgICAg
ICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVjdHVyZS5nZXQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAu
XG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI2Nyw3ICsyMzI0LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2lmIEVOQUJMRShMTElOVCkKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGxpbnRDYWxsTGlua0luZm9zLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBpZiAobV9sbGludENhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQo
KSAmJiAhSGVhcDo6aXNNYXJrZWQobV9sbGludENhbGxMaW5rSW5mb3NbaV0uY2FsbGVlLmdldCgp
KSkgewotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFy
aW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcywgIlxuIik7CiAgICAgICAgICAgICAgICAgbV9s
bGludENhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CiAgICAgICAgICAgICB9CkBAIC0yMjgwLDEw
ICsyMzM3LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYgd2Ug
YXJlLCB0aGVuIGpldHRpc29uLgogICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2
ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkKSkgewotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFzIGRlYWQgd2Vh
ayByZWZlcmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIAotICAgICAgICBpZiAo
REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBpZiAodmVyYm9zZSB8fCBE
Rkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlz
LCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVhZCByZWZl
cmVuY2VzOlxuIik7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1f
aml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewpAQCAtMjMxNyw3ICsyMzc0
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAg
ICAgICAgIGlmIChDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvKGkp
LnN0dWIuZ2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChz
dHViLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01h
cmtlZChzdHViLT5leGVjdXRhYmxlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9zdXJlIGNhbGwgZnJvbSAiLCAqdGhp
cywgIiB0byAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRh
YmxlKCktPmhhc2hGb3IoY2FsbExpbmtJbmZvKGkpLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKQEAg
LTIzMjYsNyArMjM4Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS51bmxpbmsoKm1fdm0s
IHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2FsbCBmcm9t
ICIsICp0aGlzLCAiIHRvICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3UG9pbnRl
cihjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSwgIiAoIiwKQEAgLTIzMzgsOCArMjM5NSwx
MSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkp
Lmxhc3RTZWVuQ2FsbGVlCi0gICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGNhbGxM
aW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgJiYgIUhl
YXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q2xlYXJpbmcgbGFzdFNlZW5DYWxsZWUgZnJvbSAiLCAqdGhpcywgIiB0byAiLCBSYXdQb2ludGVy
KGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQoKSksICJcbiIpOwogICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5jbGVhcigpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRl
cmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqKml0ZXI7CkBAIC0yMzQ3LDYg
KzI0MDcsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBzdHViSW5mbyBmcm9tICIsICp0aGlz
LCAiIGF0ICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCBzdGF0ZTogIik7CisgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZVN0dWJJbmZvKFdURjo6ZGF0YUZpbGUoKSwgKnZtKCksIHN0
dWJJbmZvLCAwKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCiAgICAgICAgICAgICByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0MTMsNiArMjQ3
OSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbChSZXBhdGMKIHZvaWQgQ29k
ZUJsb2NrOjpyZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICByZXNldFN0dWJJbnRl
cm5hbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgCisgICAgLy8gRklYTUU6IENvbnNp
ZGVyIGdldHRpbmcgcmlkIG9mIHRoaXMgZmxhZzsgaXQgbWlnaHQgbm90IGJlIG5lZWRlZCBhbnlt
b3JlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgw
NzkKICAgICBzdHViSW5mby5yZXNldEJ5R0MgPSB0cnVlOwogfQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNjMyNjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMiw2ICsxMzIsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYo
Ym9vbCwgYWx3YXlzQ29tcHV0ZUhhc2gsIGZhbHNlKSBcCiAgICAgdihib29sLCB0ZXN0VGhlRlRM
LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXplU3RhY2ssIGZhbHNlKSBcCisg
ICAgdihib29sLCB2ZXJib3NlU3RydWN0dXJlQ2xlYXJpbmdJbkdDLCBmYWxzZSkgXAogICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZU9TUkVudHJ5VG9ERkcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVu
YWJsZU9TUkVudHJ5VG9GVEwsIHRydWUpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223213</attachid>
            <date>2014-02-04 22:05:55 -0800</date>
            <delta_ts>2014-06-26 12:20:21 -0700</delta_ts>
            <desc>another version</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25340</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE0LTAyLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGtlZXAgc3RydWN0dXJlcyBhbGl2ZSBpZiB0aGV5IGFyZSBpbmxpbmVkIGludG8g
b3B0aW1pemVkIGNvZGUgKERGRyBvciBGVEwpIGFuZCB0aGVpciBnbG9iYWxPYmplY3QgaXMgYWxp
dmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAg
VGhlIG9yaWdpbmFsIHJvbGUgb2YgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGZpeHBvaW50IHdh
cyB0byBndWFyZCBhZ2FpbnN0IGNhc2VzCisgICAgICAgIHdoZXJlIHdlIGhhZCBjb2RlIHRoYXQg
Y2FjaGVkIG9uIGEgbm93LWRlYWQgc3RydWN0dXJlIHdpdGggYSBub3ctZGVhZCBnbG9iYWwgb2Jq
ZWN0LgorICAgICAgICBPcmlnaW5hbGx5IGNhY2hlZCBzdHJ1Y3R1cmVzIHdlcmUgc3Ryb25nIHJl
ZmVyZW5jZXMgYW5kIHNvIHN1Y2ggYSBjYXNlIGNvdWxkIGxlYWQgdG8KKyAgICAgICAgYSBtYXNz
aXZlIG1lbW9yeSBsZWFrLgorICAgICAgICAKKyAgICAgICAgT2YgY291cnNlLCB3ZSBjb3VsZG4n
dCB0dXJuIHRoZXNlIHJlZmVyZW5jZXMgaW50byBzaW1wbHkgd2VhayByZWZlcmVuY2VzIGJlY2F1
c2UgdGhlbgorICAgICAgICB3ZSB3b3VsZCBiZSB0aHJvd2luZyBhd2F5IGNvZGUgdG9vIGZyZXF1
ZW50bHkuIEl0J3Mgc3VycHJpc2luZ2x5IGNvbW1vbiB0byBoYXZlCisgICAgICAgIGlkaW9tcyB0
aGF0IHJlZHVjZSB0byBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KGZvcmV2ZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgbyA9IG5ldyBTdXBlckltcG9ydGFudFN0
YXRlT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgLy8gRG8gYSBidW5jaCBvZiB3b3JrIGludm9s
dmluZyBvLgorICAgICAgICAgICAgICAgIG8gPSBudWxsOyAvLyBTb21ldGhpbmcgdGhhdCBraWxs
cyBvLgorICAgICAgICAgICAgICAgIC8vIERvIHNvbWUgbW9yZSB3b3JrLCBhbmQgd2UgR0MgaGVy
ZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFVzdWFsbHkgdGhlICJvID0gbnVs
bCIgYXJpc2VzIGJlY2F1c2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdCBpcyBpbnNpZGUg
b2YgYQorICAgICAgICBmdW5jdGlvbiB0aGF0IHRoZSBsb29wIGNhbGxzLiBUaGlzIGlzIHBhcnRp
Y3VsYXJseSBmcmVxdWVudCBvbiB0aGUgV2ViIGJlY2F1c2UgdGhhdAorICAgICAgICBvdXRlciBs
b29wIGlzIGFjdHVhbGx5IHRoZSBydW5sb29wIGFuZCB0aGUgR0MgaXMgdHlwaWNhbGx5IHNjaGVk
dWxlZCB3aGVuIHRoZSBydW5sb29wCisgICAgICAgIGlzIGlkbGUuIFNvLCBpZiB3ZSB0cmVhdGVk
IGFsbCBjYWNoZWQgc3RydWN0dXJlcyBhcyB3ZWFrIGFuZCB0aGUgYXBwIGhhZCBhbnkgdHlwZXMK
KyAgICAgICAgdGhhdCBleGlzdGVkIG9ubHkgZHVyaW5nIGV2ZW50IGhhbmRsaW5nIGJ1dCB0eXBp
Y2FsbHkgZGlkbid0IHJlbWFpbiByZWFjaGFibGUgYWZ0ZXIKKyAgICAgICAgdGhlIGV2ZW50IGdv
dCBoYW5kbGVkLCB0aGVuIHdlIHdvdWxkIGJlIHRocm93aW5nIGF3YXkgYSBsb3Qgb2YgY29kZS4K
KyAgICAgICAgCisgICAgICAgIFNvLCBpbnN0ZWFkIG9mIG1ha2luZyB0aG9zZSBzdHJ1Y3R1cmVz
IGNvbXBsZXRlbHkgd2Vhaywgd2UgdGhyZXcgaW4gYSBjbGV2ZXIgdHJpY2s6CisgICAgICAgIHdl
IHdvdWxkIGZpeHBvaW50IG92ZXIgYWxsIGNhY2hlZCB0cmFuc2l0aW9ucyB0aGF0IGNyZWF0ZSBu
ZXcgc3RydWN0dXJlcywgYW5kIGlmIGFueQorICAgICAgICBvZiB0aG9zZSB0cmFuc2l0aW9ucyB3
YXMgYSBwYXJ0IG9mIGNvZGUgdGhhdCBhcHBlYXJlZCBsaXZlLCB0aGVuIHdlIHdvdWxkIG1hcmsg
dGhlCisgICAgICAgIHRhcmdldCBzdHJ1Y3R1cmUuIFRoaXMgdGVuZGVkIHRvIGtlZXAgYWxpdmUg
c3RydWN0dXJlcyBmb3Igb2JqZWN0cyB0aGF0IGhvdCBjb2RlCisgICAgICAgIHdvdWxkIHRlbmQg
dG8gY3JlYXRlLgorICAgICAgICAKKyAgICAgICAgQnV0IG5vdyBpdCBsb29rcyBsaWtlIHRoaXMg
aXNuJ3QgZW5vdWdoLiBUaG9zZSB0cmFuc2l0aW9uIGNhY2hlcyBhcmUganVzdCB0aGF0IC0KKyAg
ICAgICAgY2FjaGVzLiBUaGV5IGFyZSBpbXBlcmZlY3QuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlciBydWxlIGZvciBrZWVwaW5nIHN0cnVjdHVyZXMKKyAgICAgICAgYWxpdmU6CisgICAgICAg
IAorICAgICAgICAgICAgSWYgYSBzdHJ1Y3R1cmUgaXMgY2FjaGVkIGFuZCBpbmxpbmVkIGJ5IGFu
IG9wdGltaXppbmcgY29tcGlsZXIgYW5kIGl0cyBnbG9iYWwKKyAgICAgICAgICAgIG9iamVjdCBp
cyBvdGhlcndpc2Ugc3RpbGwgbGl2ZSwgdGhlbiBtYXJrIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAg
IAorICAgICAgICBUaGlzIHJ1bGUgd2lsbCB1c3VhbGx5IGRvbWluYXRlIHRoZSB0cmFuc2l0aW9u
IHJ1bGUsIGJ1dCB0aGUgdHJhbnNpdGlvbiBydWxlIGlzIHN0aWxsCisgICAgICAgIGNyaXRpY2Fs
IGZvciB3aGVuIHdlIGhhdmVuJ3QgY3JlYXRlZCBvcHRpbWl6ZWQgY29kZSB5ZXQsIG9yIGZvciBz
dHJ1Y3R1cmVzIHRoYXQKKyAgICAgICAgYXJlbid0IGFzc29jaWF0ZWQgd2l0aCBhIGdsb2JhbCBv
YmplY3QsIG9yIGZvciBzdHJ1Y3R1cmVzIGNhY2hlZCBidXQgbm90IF9pbmxpbmVkXyBpbgorICAg
ICAgICBvcHRpbWl6ZWQgY29kZS4gVGhlIHBoaWxvc29waHkgaGVyZSBpcyB0aGF0IGl0J3MgZ2Vu
ZXJhbGx5IHNhZmUsIGFuZCBsaWtlbHkKKyAgICAgICAgcHJvZml0YWJsZSwgdG8gdGhyb3cgYXdh
eSBzdHJ1Y3R1cmVzIGlmIHRoZSB3b3JzdCBjYXNlIG91dGNvbWUgaXMganVzdCB0aGF0IHNvbWUK
KyAgICAgICAgaW5saW5lIGNhY2hlcyBoYXZlIHRvIHJlcGF0Y2ggdGhlbXNlbHZlcy4gQnkgY29u
dHJhc3QsIHRoZSAiaW5saW5lZCBpbnRvIG9wdGltaXplZAorICAgICAgICBjb2RlIiBydWxlIG1l
YW5zIHRoYXQgd2UgZG9uJ3QgdGhyb3cgYXdheSBzdHJ1Y3R1cmVzIGlmIHRoZSB3b3JzdCBjYXNl
IGlzIHRoYXQgd2UKKyAgICAgICAgaGF2ZSB0byByZWxhdW5jaCB0aGUgQmF0dGxlc3RhciAoaS5l
LiBydW4gYW4gb3B0aW1pemluZyBjb21waWxlcikuCisgICAgICAgIAorICAgICAgICBUaGlzIGZp
eCBpbnRyb2R1Y2VzIHR3byBwb3NzaWJpbGl0aWVzIGZvciBzaW1wbGlmeWluZyB0aGUgY29kZSwg
YnV0IHRoZXkgcHJvYmFibHkKKyAgICAgICAgcmVxdWlyZSBzb21lIG1vcmUgaW52ZXN0aWdhdGlv
bjoKKyAgICAgICAgCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyODA3OAorICAgICAgICAgIENvbnNpZGVyIGdldHRpbmcgcmlkIG9mIHRoZSBHQyB0
cmFuc2l0aW9uIGZpeHBvaW50IGZvciBvcHRpbWl6ZWQgY29kZSwgc2luY2UgdGhlCisgICAgICAg
ICAgZ2xvYmFsIG9iamVjdCBydWxlIGlzIGxpa2VseSB0byBkb21pbmF0ZSBpdAorICAgICAgICAg
ICAgCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3OQorICAgICAgICAgIENvbnNpZGVyIGdldHRpbmcgcmlkIG9mIHRoZSBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXRCeUdDIGZsYWcgYmVjYXVzZSB0aGUgZ2xvYmFsCisgICAgICAgICAgb2JqZWN0
IHJ1bGUgaW1wbGllcyB0aGF0IGNhY2hpbmcgb24gcG9zc2libHktR0NhYmxlIHN0cnVjdHVyZXMg
aXMgbm8gbG9uZ2VyCisgICAgICAgICAgZGlzYXN0cm91cworICAgICAgICAKKyAgICAgICAgVGhp
cyBsb29rcyBsaWtlIGEgNTAlIHNwZWVkLXVwIG9uIE9jdGFuZTIvZ2JlbXUgaW4gdGhlIEZUTC4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBpbmNsdWRlcyBhIGJ1bmNoIG9mIGRlYnVnIHN1
cHBvcnQgZm9yIHRyYWNraW5nIHdoYXQgaXMgZ29pbmcgb24gaW5zaWRlIG9mCisgICAgICAgIHRo
ZSBHQydzIHN0cnVjdHVyZSBjbGVhcmluZy4gVGhhdCdzIGFjdHVhbGx5IHRoZSBidWxrIG9mIHRo
aXMgcGF0Y2guCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpkdW1wU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6ZHVtcENoYWluKToKKyAgICAgICAg
KEpTQzo6ZHVtcFN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpw
cmludEdldEJ5SWRDYWNoZVN0YXR1cyk6CisgICAgICAgIChKU0M6OmZvcmNlU3RydWN0dXJlTGl2
ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmg6CisKIDIwMTQtMDItMDEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0MgcHJvZmlsZXIncyBzdHViIGluZm8gcHJvZmls
aW5nIHN1cHBvcnQgc2hvdWxkIHdvcmsgYWdhaW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjMyNjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEyLDIxICszMTIsMjMgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKFByaW50U3Ry
ZQogfQogCiAjaWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKSAvLyB1bnVzZWQgaW4gc29t
ZSBjb25maWd1cmF0aW9ucwotc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVyZShQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBjaGFyKiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3N0YXRpYyB2b2lkIGR1bXBTdHJ1Y3R1cmUo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogbmFtZSwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBvdXQucHJpbnRmKCIlcyA9ICVwIiwgbmFtZSwg
c3RydWN0dXJlKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseShleGVjLT52bSgpLCBpZGVudC5pbXBsKCkpOwotICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkKLSAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAlZCki
LCBvZmZzZXQpOworICAgIGlmIChpZGVudCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgaWRlbnQtPmltcGwoKSk7CisgICAg
ICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiAob2Zmc2V0ID0gJWQpIiwgb2Zmc2V0KTsKKyAgICB9CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKSVQpIC8vIHVudXNlZCB3aGVuIG5vdCBFTkFCTEUoSklUKSwgbGVhZGluZyB0byBzaWxseSB3
YXJuaW5ncwotc3RhdGljIHZvaWQgZHVtcENoYWluKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
K3N0YXRpYyB2b2lkIGR1bXBDaGFpbihQcmludFN0cmVhbSYgb3V0LCBWTSYgdm0sIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiB7CiAgICAgb3V0LnByaW50
ZigiY2hhaW4gPSAlcDogWyIsIGNoYWluKTsKICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKQEAgLTMz
NywxMCArMzM5LDExMiBAQCBzdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91dCwg
CiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBv
dXQucHJpbnRmKCIsICIpOwotICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4
ZWMsIGN1cnJlbnRTdHJ1Y3R1cmUtPmdldCgpLCBpZGVudCk7CisgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAic3RydWN0Iiwgdm0sIGN1cnJlbnRTdHJ1Y3R1cmUtPmdldCgpLCBpZGVudCk7CiAg
ICAgfQogICAgIG91dC5wcmludGYoIl0iKTsKIH0KKworc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVy
ZVN0dWJJbmZvKFByaW50U3RyZWFtJiBvdXQsIFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKK3sKKyAgICBTdHJ1Y3R1cmUqIGJhc2VT
dHJ1Y3R1cmUgPSAwOworICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gMDsKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogc3RydWN0dXJlTGlzdCA9IDA7CisgICAgaW50IGxpc3RTaXplID0gMDsKKyAgICAK
KyAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfc2VsZjoKKyAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOworICAgICAgICBiYXNlU3Ry
dWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAg
ICAgIG91dC5wcmludGYoInByb3RvIik7CisgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5m
by51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICBwcm90
b3R5cGVTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1
cmUuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFp
bjoKKyAgICAgICAgb3V0LnByaW50ZigiY2hhaW4iKTsKKyAgICAgICAgYmFzZVN0cnVjdHVyZSA9
IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAg
ICAgIGNoYWluID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6CisgICAgICAgIG91
dC5wcmludGYoInNlbGZfbGlzdCIpOworICAgICAgICBzdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8u
dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdFNpemUgPSBzdHVi
SW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAgIG91dC5wcmludGYoInByb3Rv
X2xpc3QiKTsKKyAgICAgICAgc3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3Rv
TGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFByb3RvTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nlc3NfdW5z
ZXQ6CisgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBvdXQucHJpbnRmKCJnZW5lcmlj
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2dldF9hcnJheV9sZW5ndGg6Cisg
ICAgICAgIG91dC5wcmludGYoImFycmF5X2xlbmd0aCIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAgICAgb3V0LnByaW50Zigic3RyaW5n
X2xlbmd0aCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19pbl9saXN0OgorICAg
ICAgICBvdXQucHJpbnRmKCJpbl9saXN0Iik7CisgICAgICAgIHN0cnVjdHVyZUxpc3QgPSBzdHVi
SW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZv
LnUuaW5MaXN0Lmxpc3RTaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5l
cmljOgorICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBkdW1waW5nIHRoZXNlLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDYyCisgICAgICAg
IHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGJhc2VTdHJ1Y3R1cmUp
IHsKKyAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCB2bSwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAgIH0KKyAgICAKKyAgICBp
ZiAocHJvdG90eXBlU3RydWN0dXJlKSB7CisgICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0Iiwgdm0sIGJhc2VTdHJ1Y3R1
cmUsIGlkZW50KTsKKyAgICB9CisgICAgCisgICAgaWYgKGNoYWluKSB7CisgICAgICAgIG91dC5w
cmludGYoIiwgIik7CisgICAgICAgIGR1bXBDaGFpbihvdXQsIHZtLCBjaGFpbiwgaWRlbnQpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RydWN0dXJlTGlzdCkgeworICAgICAgICBvdXQucHJpbnRm
KCIsIGxpc3QgPSAlcDogWyIsIHN0cnVjdHVyZUxpc3QpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoIiwgIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7CisgICAg
ICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJhc2UiLCB2bSwgc3RydWN0dXJlTGlzdC0+bGlz
dFtpXS5iYXNlLmdldCgpLCBpZGVudCk7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+
bGlzdFtpXS5pc0NoYWluKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUxpc3QtPmxp
c3RbaV0udS5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIs
ICIpOworICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCB2bSwgc3RydWN0dXJlTGlz
dC0+bGlzdFtpXS51LmNoYWluLmdldCgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlzdC0+bGlz
dFtpXS51LnByb3RvLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwg
Iik7CisgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG8iLCB2bSwg
c3RydWN0dXJlTGlzdC0+bGlzdFtpXS51LnByb3RvLmdldCgpLCBpZGVudCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOworICAg
ICAgICB9CisgICAgICAgIG91dC5wcmludGYoIl0iKTsKKyAgICB9Cit9CiAjZW5kaWYKIAogdm9p
ZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQsIEV4
ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQpAQCAt
MzU2LDcgKzQ2MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygK
ICAgICAgICAgb3V0LnByaW50ZigiIGxsaW50KGFycmF5X2xlbmd0aCkiKTsKICAgICBlbHNlIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgp
KSB7CiAgICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKLSAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJzdHJ1Y3QiLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgZHVtcFN0
cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsICZpZGVudCk7CiAg
ICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICB9CiAjZW5kaWYKQEAgLTM2OSw5MiArNDczLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAKICAg
ICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmludGYoIiBqaXQo
Iik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9
IDA7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwotICAgICAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKLSAgICAgICAgICAgIGlu
dCBsaXN0U2l6ZSA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6
Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOwotICAgICAgICAgICAgICAgIGJh
c2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigicHJvdG8iKTsKLSAg
ICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1
cmUgPSBzdHViSW5mby51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
Y2hhaW46Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAg
ICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmNoYWluLmdldCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCJzZWxmX2xpc3QiKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVMaXN0ID0gc3R1Yklu
Zm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgICAgICBsaXN0
U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6
Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigicHJvdG9fbGlzdCIpOwotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJl
TGlzdDsKLSAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3Rv
TGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
YWNjZXNzX3Vuc2V0OgotICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfZ2Vu
ZXJpYzoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJnZW5lcmljIik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlfbGVuZ3RoOgot
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoImFycmF5X2xlbmd0aCIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6Ci0g
ICAgICAgICAgICAgICAgb3V0LnByaW50Zigic3RyaW5nX2xlbmd0aCIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmFzZVN0cnVjdHVyZSkgewotICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJzdHJ1Y3QiLCBleGVjLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUp
IHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0IiwgZXhlYywgYmFzZVN0cnVjdHVyZSwg
aWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hh
aW4pIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGV4ZWMsIGNoYWluLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0KSB7Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBzdHJ1Y3R1cmVMaXN0KTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIp
OwotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3Rb
aV0uYmFzZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJl
TGlzdC0+bGlzdFtpXS5pc0NoYWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlTGlzdC0+bGlzdFtpXS51LmNoYWluLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
dW1wQ2hhaW4ob3V0LCBleGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUuY2hhaW4uZ2V0KCks
IGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0
W2ldLnUucHJvdG8uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJvdG8iLCBleGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0KCksIGlk
ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmVTdHViSW5mbyhvdXQsIGV4ZWMtPnZtKCksIHN0dWJJbmZvLCAmaWRl
bnQpOwogICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjAzNiw2ICsyMDU1LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAorc3RhdGljIHZvaWQgZm9yY2VTdHJ1
Y3R1cmVMaXZlbmVzcygKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvciwgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4mIHBvc3NpYmxlU3RydWN0dXJlKQoreworICAgIEpTQ2VsbCogY2VsbCA9IHBvc3NpYmxl
U3RydWN0dXJlLmdldCgpOworICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChjZWxsLT5jbGFzc0luZm8oKSAhPSBTdHJ1Y3R1cmU6Omlu
Zm8oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
anNDYXN0PFN0cnVjdHVyZSo+KGNlbGwpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQoc3RydWN0
dXJlLT5nbG9iYWxPYmplY3QoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2aXNpdG9y
LmFwcGVuZCgmcG9zc2libGVTdHJ1Y3R1cmUpOworICAgIHJldHVybjsKK30KKwogdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKQEAgLTIxMTQsNyArMjE1MSwyNCBAQCB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoaXMgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAvLyAtIEZvcmNl
cyBsaXZlbmVzcyBvZiBzdHJ1Y3R1cmVzIHdpdGggbGl2ZSBnbG9iYWwgb2JqZWN0cyBpZiB3ZSdy
ZSBpbgorICAgICAgICAvLyAgIHRoZSBGVEwuCisgICAgICAgIC8vIC0gRm9yY2VzIGxpdmVuZXNz
IG9mIHN0cnVjdHVyZXMgdGhhdCBhcmUga25vd24gdG8gYmUgdHJhbnNpdGlvbmVkLXRvLAorICAg
ICAgICAvLyAgIGFuZCB3aGVyZSB0aGUgc291cmNlcyBvZiB0aG9zZSB0cmFuc2l0aW9ucyBhcmUg
bGl2ZS4KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2hvdWxkRm9yY2VTdHJ1Y3R1cmVMaXZlbmVz
cyA9IGppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQ7CisgICAgICAgIAorICAgICAgICBpZiAo
c2hvdWxkRm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICAgICAgZm9yY2VTdHJ1Y3R1cmVMaXZlbmVzcyh2aXNpdG9yLCBkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGUgdHJhbnNpdGlv
biBmaXhwb2ludCBwYXJ0IG9mIHRoaXMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDc4CisgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmICgoIWRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCiAgICAgICAgICAg
ICAgICAgIHx8IEhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2Rl
T3JpZ2luLmdldCgpKSkKICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChkZmdDb21t
b24tPnRyYW5zaXRpb25zW2ldLm1fZnJvbS5nZXQoKSkpIHsKQEAgLTIxMzAsNyArMjE4NCwxNCBA
QCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvCiAgICAgICAgICAgICAg
ICAgLy8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3RvcmVz
IHRoZSB0YXJnZXQuCiAgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291cmNlIG11c3Qg
YmUgbGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKLSAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2hvdWxkRm9yY2VT
dHJ1Y3R1cmVMaXZlbmVzcykgeworICAgICAgICAgICAgICAgIGZvcmNlU3RydWN0dXJlTGl2ZW5l
c3ModmlzaXRvciwgZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20pOworICAgICAgICAg
ICAgICAgIGZvcmNlU3RydWN0dXJlTGl2ZW5lc3ModmlzaXRvciwgZGZnQ29tbW9uLT50cmFuc2l0
aW9uc1tpXS5tX3RvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fdG8uZ2V0KCkp
KQogICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMTg0LDYgKzIyNDUsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhTbG90CiAKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
CiB7CisgICAgYm9vbCB2ZXJib3NlID0gT3B0aW9uczo6dmVyYm9zZVN0cnVjdHVyZUNsZWFyaW5n
SW5HQygpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKTsKKyAgICAKICAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGppdFR5cGUoKSkpIHsKICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMoKTsKQEAgLTIxOTYsNyArMjI1OSw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X291dF9vZl9saW5lOgogICAgICAgICAgICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bNF0udS5z
dHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUu
Z2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNz
IHdpdGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKQEAg
LTIyMDksNyArMjI3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICAgICAgICAgICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25b
Nl0udS5zdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFy
a2VkKGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uIHdpdGggc3RydWN0dXJl
cyAlcCAtPiAlcCwgY2hhaW4gJXAuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpLApAQCAtMjIyNSwxNCAr
MjI4OCwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVj
dGlvblsyXS51LnN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVjdGlvblsyXS51
LnN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190
aGlzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUu
Z2V0KCkpOwogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmNs
ZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9j
YWxsZWU6CiAgICAgICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbCB8
fCBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5nZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBnZXQgY2FsbGVlIHdpdGggZnVuY3Rpb24gJXAu
XG4iLCBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
Y3VySW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTIyNDAsNyArMjMwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQWN0aXZhdGlvbj4m
IGFjdGl2YXRpb24gPSBjdXJJbnN0cnVjdGlvbls1XS51LmFjdGl2YXRpb247CiAgICAgICAgICAg
ICAgICAgaWYgKCFhY3RpdmF0aW9uIHx8IEhlYXA6OmlzTWFya2VkKGFjdGl2YXRpb24uZ2V0KCkp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBhY3RpdmF0aW9uICVwLlxuIiwgYWN0
aXZhdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbi5jbGVhcigpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI1NCw3ICsyMzE3LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiYgc3RydWN0dXJlID0gY3VySW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmU7
CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoc3RydWN0
dXJlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIHNjb3BlIGFjY2VzcyB3aXRo
IHN0cnVjdHVyZSAlcC5cbiIsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjY3LDcgKzIzMzAs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjaWYgRU5BQkxF
KExMSU5UKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sbGludENhbGxMaW5r
SW5mb3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2xsaW50Q2FsbExpbmtJbmZv
c1tpXS5pc0xpbmtlZCgpICYmICFIZWFwOjppc01hcmtlZChtX2xsaW50Q2FsbExpbmtJbmZvc1tp
XS5jYWxsZWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICAgICAgICAg
IH0KQEAgLTIyODAsMTAgKzIzNDMsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5v
dCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCiAgICAgaWYgKCEoc2hvdWxkSW1tZWRp
YXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
LT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygqdGhpcywg
IiBoYXMgZGVhZCB3ZWFrIHJlZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmluZyBHQy5cbiIpOwog
Ci0gICAgICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGlm
ICh2ZXJib3NlIHx8IERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgICAg
IGRhdGFMb2coKnRoaXMsICIgd2lsbCBiZSBqZXR0aXNvbmVkIGJlY2F1c2Ugb2YgdGhlIGZvbGxv
d2luZyBkZWFkIHJlZmVyZW5jZXM6XG4iKTsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSog
ZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CkBA
IC0yMzE3LDcgKzIzODAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAgICAgICAgICAgICAgICAgaWYgKENsb3N1cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBj
YWxsTGlua0luZm8oaSkuc3R1Yi5nZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHN0dWItPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
fHwgIUhlYXA6OmlzTWFya2VkKHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2Fs
bCBmcm9tICIsICp0aGlzLCAiIHRvICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRp
b25LaW5kKCkpLApAQCAtMjMyNiw3ICsyMzg5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkp
LnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSku
Y2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVh
cmluZyBjYWxsIGZyb20gIiwgKnRoaXMsICIgdG8gIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpLCAiICgiLApAQCAt
MjMzOCw4ICsyNDAxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoISFj
YWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUKLSAgICAgICAgICAgICAgICAmJiAhSGVhcDo6
aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKKyAgICAgICAg
ICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVl
LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJDbGVhcmluZyBsYXN0U2VlbkNhbGxlZSBmcm9tICIsICp0aGlzLCAiIHRv
ICIsIFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmNsZWFy
KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJl
U3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRl
cjsKQEAgLTIzNDcsNiArMjQxMywxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcygp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0dWJJbmZv
IGZyb20gIiwgKnRoaXMsICIgYXQgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHN0YXRl
OiAiKTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlU3R1YkluZm8oV1RGOjpkYXRhRmls
ZSgpLCAqdm0oKSwgc3R1YkluZm8sIDApOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc2V0U3R1YkR1cmlu
Z0dDSW50ZXJuYWwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjQxMyw2ICsyNDg1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJl
cGF0Ywogdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAg
IHJlc2V0U3R1YkludGVybmFsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICAKKyAgICAv
LyBGSVhNRTogQ29uc2lkZXIgZ2V0dGluZyByaWQgb2YgdGhpcyBmbGFnOyBpdCBtaWdodCBub3Qg
YmUgbmVlZGVkIGFueW1vcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyODA3OQogICAgIHN0dWJJbmZvLnJlc2V0QnlHQyA9IHRydWU7CiB9CiAjZW5k
aWYKQEAgLTI3ODcsNyArMjg2Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGkKICAgICBSRUxFQVNFX0FTU0VSVChyZWFzb24gIT0gUHJvZmlsZXI6Ok5vdEpldHRp
c29uZWQpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChERkc6OnNob3VsZFNo
b3dEaXNhc3NlbWJseSgpKSB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBERkc6
OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgIGRhdGFMb2coIkpldHRpc29uaW5n
ICIsICp0aGlzKTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikKICAg
ICAgICAgICAgIGRhdGFMb2coIiBhbmQgY291bnRpbmcgcmVvcHRpbWl6YXRpb24iKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE2MzI2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMyLDYgKzEzMiw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAg
ICAgdihib29sLCBhbHdheXNDb21wdXRlSGFzaCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHRlc3RU
aGVGVEwsIGZhbHNlKSBcCiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2Up
IFwKKyAgICB2KGJvb2wsIHZlcmJvc2VTdHJ1Y3R1cmVDbGVhcmluZ0luR0MsIGZhbHNlKSBcCiAg
ICAgXAogICAgIHYoYm9vbCwgZW5hYmxlT1NSRW50cnlUb0RGRywgdHJ1ZSkgXAogICAgIHYoYm9v
bCwgZW5hYmxlT1NSRW50cnlUb0ZUTCwgdHJ1ZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233923</attachid>
            <date>2014-06-26 12:20:21 -0700</date>
            <delta_ts>2014-06-26 18:04:37 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20609</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDE0LTA2LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGtlZXAgc3RydWN0dXJlcyBhbGl2ZSBpZiB0aGV5IGFyZSBpbmxpbmVkIGludG8g
b3B0aW1pemVkIGNvZGUgKERGRyBvciBGVEwpIGFuZCB0aGVpciBnbG9iYWxPYmplY3QgaXMgYWxp
dmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBzdGlsbCBpbmN1cnMgc29tZSBnb29meSBzbG93LWRvd25zLCBidXQgaXQncyBhbG1v
c3QgZG9uZSBvdGhlciB0aGFuIHRoYXQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUpOgorICAg
ICAgICAoSlNDOjpzaG91bGRNYXJrU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFy
a1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAg
ICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aXNTdXBw
b3J0ZWRGb3JJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlv
bkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDbG9z
dXJlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdCk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAqIGRmZy9E
RkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0
YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpzZXREaWRUcnlUb0VudGVy
SW5Mb29wKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6ZGlkVHJ5VG9FbnRlcklu
TG9vcCk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmFkZHJlc3NPZkRpZFRyeVRv
RW50ZXJJbkxvb3ApOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvdHlwZU9iamVjdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKToKKwogMjAxNC0wNi0yNSAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cnVj
dHVyZSBiaXQgZmllbGRzIHNob3VsZCBoYXZlIGEgY29uc2lzdGVudCBmb3JtYXQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAx
NzA0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ4LDkgKzE0OCwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEFz
c3VtaW5nSklUVHlwZShQcmluCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQo
KSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7CiAgICAgaWYgKHRo
aXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCkKLSAgICAgICAgb3V0LnByaW50KCIgKFNBQkkpIik7CisgICAgICAgIG91dC5wcmlu
dCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgp
LT5uZXZlcklubGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7Cisg
ICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCisgICAgICAg
IG91dC5wcmludCgiIChEaWRUcnlUb0VudGVySW5Mb29wKSIpOwogICAgIGlmIChvd25lckV4ZWN1
dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2Rl
KSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYg
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCkBAIC0yMTMxLDYgKzIxMzMsMzggQEAgYm9vbCBDb2Rl
QmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKAogI2VuZGlmCiB9CiAKK3N0YXRpYyBib29s
IHNob3VsZE1hcmtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7
CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGVP
YmplY3QgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSB7CisgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgYm90aCB0aGUgZ2xvYmFsIG9iamVjdCBhbmQg
dGhlIHByb3RvdHlwZSBhcmUgYWxyZWFkeSBsaXZlIGFueXdheSwgdGhlbiB0aGlzIHN0cnVjdHVy
ZQorICAgIC8vIGlzIGhhcm1sZXNzIHRvIG1hcmsuCisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRy
YW5zaXRpb24mIHRyYW5zaXRpb24pCit7CisgICAgaWYgKHNob3VsZE1hcmtTdHJ1Y3R1cmUoanND
YXN0PFN0cnVjdHVyZSo+KHRyYW5zaXRpb24ubV90by5nZXQoKSkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6Omlz
TWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkBAIC0yMjA5LDIxICsyMjQzLDM1IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAg
ICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrU3RydWN0dXJlKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0u
Z2V0KCkpKQorICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPndlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCghZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2Nv
ZGVPcmlnaW4KLSAgICAgICAgICAgICAgICAgfHwgSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9uLT50
cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4uZ2V0KCkpKQotICAgICAgICAgICAgICAgICYmIEhl
YXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9mcm9tLmdldCgpKSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKGRmZ0NvbW1vbi0+dHJhbnNpdGlv
bnNbaV0pKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGlu
Z3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKICAgICAgICAgICAgICAgICAvLyB0
cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKKyAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1
c2Ugb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2Fubmlu
ZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyAtIFRo
ZSBjb2RlIG9yaWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZy
b20KICAgICAgICAgICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUg
bm90IHJlbGV2YW50IGlmIHRoZSB1c2VyJ3MKICAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0
aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCiAgICAg
ICAgICAgICAgICAgLy8gICBsaXZlLgorICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAg
ICAgLy8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVj
a3MgaWYgc29tZQogICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUg
c291cmNlLCBhbmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgogICAgICAgICAgICAgICAgIC8v
ICAgSGVuY2UgdGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJl
IGxpdmUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNo
b3J0LWNpcmN1aXQgdGhlIGxpdmVuZXNzIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaGFybWxlc3MKKyAg
ICAgICAgICAgICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2JqZWN0IGFuZCBwcm90
b3R5cGUgYXJlIGJvdGggYWxyZWFkeQorICAgICAgICAgICAgICAgIC8vIGxpdmUpLgorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRy
YW5zaXRpb25zW2ldLm1fdG8pOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
YWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAgLTIyNTgsNiArMjMwNiwxNCBAQCB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KKyAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgYWxs
QXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgLy8gSWYgc29tZSB3ZWFrIHJlZmVyZW5j
ZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24gd2FzCiAgICAgLy8gdW5z
dWNjZXNzZnVsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTcwNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMiBAQCBi
b29sIGlzU3VwcG9ydGVkKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICAmJiBGdW5jdGlv
bldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkuY29udGFpbnMoY29kZUJsb2NrKTsK
IH0KIAorYm9vbCBpc1N1cHBvcnRlZEZvcklubGluaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0
aW9uKCkKKyAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNJbmxpbmlu
Z0NhbmRpZGF0ZSgpOworfQorCiBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgcmV0dXJuIGlzU3VwcG9ydGVkKGNvZGVCbG9jaykKQEAgLTY5LDIwICs3
NSwxNyBAQCBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvCiBib29sIG1p
Z2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVu
Y3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCi0gICAgICAgICYm
ICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKQotICAgICAg
ICAmJiBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCk7
CisgICAgICAgICYmIGlzU3VwcG9ydGVkRm9ySW5saW5pbmcoY29kZUJsb2NrKTsKIH0KIGJvb2wg
bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNsb3N1cmVDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjpt
YXhpbXVtRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3Rp
dmF0aW9uKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNJbmxp
bmluZ0NhbmRpZGF0ZSgpOworICAgICAgICAmJiBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVC
bG9jayk7CiB9CiBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgp
IDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+bmVlZHNBY3RpdmF0aW9uKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOworICAgICAgICAmJiBpc1N1cHBvcnRlZEZvcklu
bGluaW5nKGNvZGVCbG9jayk7CiB9CiAKIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIENhcGFiaWxpdHlMZXZlbCByZXN1bHQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlz
aW9uIDE3MDQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogLy8gRmFzdCBjaGVjayBmdW5jdGlvbnM7IGlmIHRoZXkgcmV0dXJuIHRydWUg
aXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvCiAvLyBjaGVjayBvcGNvZGVzLgogYm9vbCBpc1N1cHBv
cnRlZChDb2RlQmxvY2sqKTsKK2Jvb2wgaXNTdXBwb3J0ZWRGb3JJbmxpbmluZyhDb2RlQmxvY2sq
KTsKIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqKTsKIGJvb2wgbWlnaHRDb21waWxl
UHJvZ3JhbShDb2RlQmxvY2sqKTsKIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENv
ZGVCbG9jayopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgJKHJldmlzaW9uIDE3MDQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPFdlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4+IHdlYWtSZWZlcmVuY2VzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPj4g
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgU2VnbWVudGVkVmVjdG9yPENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hwb2ludHM7CiAgICAgU2VnbWVudGVkVmVj
dG9yPFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LCAxLCAwPiBwcm9maWxl
ZFdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1bXBSZXBsYWNlbWVu
dHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxNzA0MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDEzIEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQo
Vk0KIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZWZlcmVuY2VzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIEpTQ2VsbCogdGFyZ2V0ID0gbV9yZWZlcmVuY2VzW2ldOwotICAgICAg
ICBjb21tb24tPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKKyAgICAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih0YXJnZXQpKSB7
CisgICAgICAgICAgICBjb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPih2bSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGNvbW1vbi0+d2Vha1JlZmVyZW5jZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+KHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRhcmdl
dCkpOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTcwNDMyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDkg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogCiAgICAgc2FuaXRp
emVTdGFja0ZvclZNKHZtKTsKICAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9FbnRlckluTG9vcCh0cnVl
KTsKKyAgICAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklU
KSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkZUTEpJVCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTcwNDMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMCArNTQsNTcgQEAgdm9pZCBoYW5kbGVFeGl0Q291
bnRzKENDYWxsSGVscGVycyYgaml0LAogICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJU
aGFuT3JFcXVhbCwKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCiAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRv
IGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHBvc3NpYmlsaXR5IHRoYXQgd2UncmUgaW4gYSBsb29w
LiBGb3IgdGhlIG91dGVybW9zdAorICAgIC8vIGNvZGUgYmxvY2sgaW4gdGhlIGlubGluZSBzdGFj
aywgd2UgaGFuZGxlIHRoaXMgYXBwcm9wcmlhdGVseSBieSBoYXZpbmcgdGhlIGxvb3AgT1NSIHRy
aWdnZXIKKyAgICAvLyBjaGVjayB0aGUgZXhpdCBjb3VudCBvZiB0aGUgcmVwbGFjZW1lbnQgb2Yg
dGhlIENvZGVCbG9jayBmcm9tIHdoaWNoIHdlIGFyZSBPU1JpbmcuIFRoZQorICAgIC8vIHByb2Js
ZW0gaXMgdGhlIGlubGluZWQgZnVuY3Rpb25zLCB3aGljaCBtaWdodCBhbHNvIGhhdmUgbG9vcHMs
IGJ1dCB3aG9zZSBiYXNlbGluZSB2ZXJzaW9ucworICAgIC8vIGRvbid0IGtub3cgd2hlcmUgdG8g
bG9vayBmb3IgdGhlIGV4aXQgY291bnQuIEZpZ3VyZSBvdXQgaWYgdGhvc2UgbG9vcHMgYXJlIHNl
dmVyZSBlbm91Z2gKKyAgICAvLyB0aGF0IHdlIGhhZCB0cmllZCB0byBPU1IgZW50ZXIuIElmIHNv
LCB0aGVuIHdlIHNob3VsZCB1c2UgdGhlIGxvb3AgcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KKyAg
ICAvLyBPdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIG5vcm1hbCByZW9wdGltaXphdGlvbiB0
cmlnZ2VyLgorICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgbG9vcFRocmVzaG9s
ZDsKKyAgICAKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNh
bGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAg
ICAgICBsb29wVGhyZXNob2xkLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgK
KyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9v
cCgpKSkpOworICAgIH0KKyAgICAKKyAgICBqaXQubW92ZSgKKyAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaml0LmNvZGVCbG9jaygpLT5leGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAgIGlm
ICghbG9vcFRocmVzaG9sZC5lbXB0eSgpKSB7CisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKKworICAgICAgICBsb29wVGhyZXNob2xkLmxpbmsoJmppdCk7
CisgICAgICAgIGlmIChmYWxzZSAmJiBqaXQuY29kZUJsb2NrKCktPmluc3RydWN0aW9uQ291bnQo
KSA9PSA2ODEpCisgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBqaXQubW92
ZSgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKS0+ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRp
b25Gcm9tTG9vcCgpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgCi0g
ICAgdG9vRmV3RmFpbHMgPSBqaXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1
YWwsIEdQUkluZm86OnJlZ1QyLCBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihqaXQuY29k
ZUJsb2NrKCktPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOworICAgIH0KKyAgICAKKyAgICB0b29GZXdGYWlscyA9IGppdC5i
cmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQ
UkluZm86OnJlZ1QxKTsKICAgICAKICAgICByZW9wdGltaXplTm93LmxpbmsoJmppdCk7CiAgICAg
CiAgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogI2lmICFOVU1CRVJfT0Zf
QVJHVU1FTlRfUkVHSVNURVJTCiAgICAgaml0LnBva2UoR1BSSW5mbzo6cmVnVDApOworICAgIGpp
dC5wb2tlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cigmZXhpdCksIDEpOwogI2Vsc2UK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAg
ICBBU1NFUlQoR1BSSW5mbzo6YXJndW1lbnRHUFIwICE9IEdQUkluZm86OnJlZ1QxKTsKKyAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KSks
IEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
dHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBk
b25lQWRqdXN0aW5nID0gaml0Lmp1bXAoKTsKICAgICAKICAgICB0b29GZXdGYWlscy5saW5rKCZq
aXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNzA0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcgKzEwODYsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygiXG4iKTsKIH0KIAot
ZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENv
ZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dl
clJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhp
dCkKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdo
aWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJl
IHByb2ZpdGFibGUuCkBAIC0xMTEwLDEzICsxMTEwLDIxIEBAIGV4dGVybiAiQyIgdm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICBBU1NFUlQoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgCisgICAgYm9vbCBkaWRUcnlU
b0VudGVySW50b0lubGluZWRMb29wcyA9IGZhbHNlOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0LT5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBp
bmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKKyAgICAgICAgICAgIGRpZFRyeVRvRW50ZXJJ
bnRvSW5saW5lZExvb3BzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQogCiAgICAgLy8gSW4gb3JkZXIgdG8gdHJpZ2dlciByZW9wdGltaXphdGlvbiwgb25lIG9m
IHR3byB0aGluZ3MgbXVzdCBoYXZlIGhhcHBlbmVkOgogICAgIC8vIDEpIFdlIGV4aXRlZCBtb3Jl
IHRoYW4gc29tZSBudW1iZXIgb2YgdGltZXMuCiAgICAgLy8gMikgV2UgZXhpdGVkIGFuZCBnb3Qg
c3R1Y2sgaW4gYSBsb29wLCBhbmQgbm93IHdlJ3JlIGV4aXRpbmcgYWdhaW4uCiAgICAgYm9vbCBk
aWRFeGl0QUJ1bmNoID0gb3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCk7
CiAgICAgYm9vbCBkaWRHZXRTdHVja0luTG9vcCA9Ci0gICAgICAgIGNvZGVCbG9jay0+Y2hlY2tJ
Zk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQorICAgICAgICAoY29kZUJsb2NrLT5jaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpIHx8IGRpZFRyeVRvRW50ZXJJbnRvSW5s
aW5lZExvb3BzKQogICAgICAgICAmJiBvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1p
emVGcm9tTG9vcE5vdygpOwogICAgIAogICAgIGlmICghZGlkRXhpdEFCdW5jaCAmJiAhZGlkR2V0
U3R1Y2tJbkxvb3ApIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAxNzA0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKLW5hbWVzcGFjZSBKU0Mg
eworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1uYW1lc3BhY2UgREZHIHsKK3N0
cnVjdCBPU1JFeGl0QmFzZTsKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBz
aXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAKIHZvaWQgSklUX09QRVJB
VElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZv
aWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwogCi12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJl
b3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBX
VEZfSU5URVJOQUw7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIHZvaWQgSklUX09QRVJBVElPTiB0
cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNzA0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgICAgICBieXRl
Y29kZUluZGV4LCAiLlxuIik7CiAgICAgfQogICAgIAorICAgIGlmIChieXRlY29kZUluZGV4KQor
ICAgICAgICBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zZXREaWRUcnlU
b0VudGVySW5Mb29wKHRydWUpOworCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2Rl
LT5ieXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2
ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBi
YyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTcwNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw2ICsxMDgsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENv
ZGVCCiAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkgPT0gdGhpcyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNFeGVjdXRhYmxlU2Ny
aXB0KGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAorICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coIkluc3RhbGxpbmcgIiwgKmdlbmVyaWND
b2RlQmxvY2ssICJcbiIpOworICAgIAogICAgIFZNJiB2bSA9ICpnZW5lcmljQ29kZUJsb2NrLT52
bSgpOwogICAgIAogICAgIGlmICh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNzA0MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5Nyw4ICszOTcsMTIgQEAgcHVibGljOgog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2RlKCkgPyBT
dHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZTsgfQogICAgICAgICAKICAgICB2b2lkIHNldE5ldmVy
SW5saW5lKGJvb2wgdmFsdWUpIHsgbV9uZXZlcklubGluZSA9IHZhbHVlOyB9CisgICAgdm9pZCBz
ZXREaWRUcnlUb0VudGVySW5Mb29wKGJvb2wgdmFsdWUpIHsgbV9kaWRUcnlUb0VudGVySW5Mb29w
ID0gdmFsdWU7IH0KICAgICBib29sIG5ldmVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9uZXZl
cklubGluZTsgfQorICAgIGJvb2wgZGlkVHJ5VG9FbnRlckluTG9vcCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlkVHJ5VG9FbnRlckluTG9vcDsgfQogICAgIGJvb2wgaXNJbmxpbmluZ0NhbmRpZGF0ZSgp
IGNvbnN0IHsgcmV0dXJuICFuZXZlcklubGluZSgpOyB9CisgICAgCisgICAgYm9vbCogYWRkcmVz
c09mRGlkVHJ5VG9FbnRlckluTG9vcCgpIHsgcmV0dXJuICZtX2RpZFRyeVRvRW50ZXJJbkxvb3A7
IH0KIAogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCkBAIC00NTAsNiArNDU0LDcg
QEAgcHJvdGVjdGVkOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIGJvb2wgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlczsKICAgICBib29sIG1fbmV2ZXJJbmxpbmU7CisgICAgYm9vbCBt
X2RpZFRyeVRvRW50ZXJJbkxvb3A7CiAgICAgaW50IG1fZmlyc3RMaW5lOwogICAgIGludCBtX2xh
c3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNzA0
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBTdHJ1Y3R1
cmU6OnN0b3JlZFByb3RvdAogewogICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Byb3RvdHlwZS5nZXQo
KTsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOwogfQogCkBAIC02OSw3
ICs2OSw3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIHsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gc3RvcmVkUHJvdG90eXBlT2JqZWN0KCk7CiAgICAgaWYgKCFv
YmplY3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233951</attachid>
            <date>2014-06-26 18:04:37 -0700</date>
            <delta_ts>2014-07-16 02:43:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23405</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDE0LTA2LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gR0Mgc2hvdWxkIGtlZXAgc3RydWN0dXJlcyBhbGl2ZSBpZiB0aGV5IGFyZSBpbmxp
bmVkIGludG8gb3B0aW1pemVkIGNvZGUgKERGRyBvciBGVEwpIGFuZCB0aGVpciBnbG9iYWxPYmpl
Y3QgaXMgYWxpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyODA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBjaGFuZ2VzIGhvdyBTdHJ1Y3R1cmVzIHJlZmVyZW5jZWQgZnJvbSBv
cHRpbWl6ZWQgY29kZSBnZXQgbWFya2VkLiBQcmV2aW91c2x5LCB0aGV5CisgICAgICAgIHdlcmUg
d2Vha2x5IHJlZmVyZW5jZWQsIGV4Y2VwdCBmb3IgdHJhbnNpdGlvbnMuIE5vdywgZXZlbiBhIHdl
YWtseSByZWZlcmVuY2VkIFN0cnVjdHVyZQorICAgICAgICB3aWxsIGJlIG1hcmtlZCwgc28gbG9u
ZyBhcyBib3RoIGl0cyBnbG9iYWxPYmplY3QgYW5kIHN0b3JlZFByb3RvdHlwZSBhcmUgbGl2ZSAo
b3IgYWJzZW50KS4KKyAgICAgICAgVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHRyaXZpYWxseSB0cnVl
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdHJhdGVneSBzdHJpa2VzIHdoYXQgc2VlbXMgbGlr
ZSBhIG1vcmUgb3B0aW1hbCBiYWxhbmNlIGJldHdlZW4gY29uc2VydmluZyBtZW1vcnkgYW5kCisg
ICAgICAgIGNvbnNlcnZpbmcgcmVjb21waWxhdGlvbiB0aW1lLiBXZSBkb24ndCByZWZlcmVuY2Ug
dmVyeSBtYW55IFN0cnVjdHVyZXMgZnJvbSBvcHRpbWl6ZWQgY29kZSwKKyAgICAgICAgcmVsYXRp
dmUgdG8gdG90YWwgaGVhcCB1c2FnZSAtIHNvIGtlZXBpbmcganVzdCBhIFN0cnVjdHVyZSBhbGl2
ZSBiZWNhdXNlIGl0J3MgcmVmZXJlbmNlZAorICAgICAgICBmcm9tIG9wdGltaXplZCBjb2RlIGlz
IG5vdCBzbyBiYWQuIEJ1dCwgaWYga2VlcGluZyB0aGUgU3RydWN0dXJlIGFsaXZlIHdvdWxkIGNh
dXNlIGEKKyAgICAgICAgcHJvdG90eXBlIG9yIGdsb2JhbE9iamVjdCB0byBhbHNvIGJlIGtlcHQg
YWxpdmUsIHRoZW4gaXQncyBkZWZpbml0ZWx5IG5vdCB3b3J0aCBpdC4KKyAgICAgICAgCisgICAg
ICAgIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB0aGlzIGVmZmVjdGl2ZWx5IHJlbW92ZXMgb3VyIHBy
ZXZpb3VzIGFiaWxpdHkgdG8gYWNjZWxlcmF0ZQorICAgICAgICBjb252ZXJnZW5jZSBieSBoYXZp
bmcgdGhlIEdDIHRlbGwgdXMgdGhhdCBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZWQuIEl0J3Mgbm90
IGNsZWFyIHRoYXQKKyAgICAgICAgdGhpcyBpcyBhIGdvb2QgdGhpbmcuIEJ1dCBzbyBmYXIsIHdl
IGRpZG4ndCBoYXZlIGEga2lsbGVyIGJlbmNobWFyayBmb3IgdGhpcyBHQy1hY2NlbGVyYXRlZAor
ICAgICAgICBjb252ZXJnZW5jZS4gT24gdGhlIG90aGVyIGhhbmQsIHdoZW4gdGhpcyBzb21ldGlt
ZXMgZGlkIGtpY2sgaW4sIGl0IG1hZGUgcHJvZmlsaW5nIG11Y2gKKyAgICAgICAgbW9yZSBjb21w
bGljYXRlZCAtIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gdHJhY2sgZG93biB3aHkgdGhlIEdDIHRo
b3VnaHQgdGhhdCBhIHN0cnVjdHVyZQorICAgICAgICBoYWQgYmVjb21lIGludmFsaWQuIEFsc28s
IGl0J3MgY2xlYXIgdGhhdCBpZiBhIFN0cnVjdHVyZSBpcyBkZWFkIGJ1dCBpcyBwYXJ0IG9mIGEK
KyAgICAgICAgcG9seW1vcnBoaWMgQ2hlY2tTdHJ1Y3R1cmUgdGhhdCBhbHNvIGhhcyBvdGhlciBz
dHJ1Y3R1cmVzIHRoYXQgYXJlIGxpdmUsIHRoZW4ga2lsbGluZyB0aGUKKyAgICAgICAgY29kZSBp
cyBwcm9iYWJseSBhIGZhaWwgLSB0aGUgY29kZSB3b3VsZCBoYXZlIHJ1biBmaW5lIGFuZCByZWNv
bXBpbGluZyB0aGUgY29kZSBpcyBwcm9iYWJseQorICAgICAgICBub3Qgd29ydGggaXQuCisKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmR1bXBBc3N1bWluZ0pJVFR5cGUpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6aXNTdXBwb3J0ZWRGb3JJbmxpbmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0NhcGFi
aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJl
ZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVF
eGl0Q291bnRzKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5
SklUQ29kZSk6IFRoZXNlIHZhcmlhYmxlcyBiZWluZyB1bmluaXRpYWxpemVkIGlzIGJlbmlnbiBp
biB0ZXJtcyBvZiBjb3JyZWN0bmVzcyBidXQgY2FuIHNvbWV0aW1lcyBjYXVzZSByYWdlLXJlY29t
cGlsYXRpb25zLiBGb3Igc29tZSByZWFzb24gaXQgdG9vayB0aGlzIHBhdGNoIHRvIHJldmVhbCB0
aGlzLgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAg
ICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnNldERp
ZFRyeVRvRW50ZXJJbkxvb3ApOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpkaWRU
cnlUb0VudGVySW5Mb29wKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6YWRkcmVz
c09mRGlkVHJ5VG9FbnRlckluTG9vcCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOgorCiAy
MDE0LTA2LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGRlYnVnZ2VyIHNob3VsZCBiZSBhYmxlIHRvIHNob3cgdmFyaWFibGUgdHlw
ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxNzA0OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAgICAgICAgIG91dC5wcmludChzcGVjaWFs
aXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7
CiAgICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCkKLSAgICAgICAgb3V0LnByaW50KCIgKFNBQkkpIik7CisgICAg
ICAgIG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7CiAgICAgaWYgKG93bmVy
RXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJ
bmxpbmUpIik7CisgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29w
KCkpCisgICAgICAgIG91dC5wcmludCgiIChEaWRUcnlUb0VudGVySW5Mb29wKSIpOwogICAgIGlm
IChvd25lckV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5wcmludCgi
IChTdHJpY3RNb2RlKSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQgJiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCkBAIC0yMjA0LDYgKzIyMDYsMzgg
QEAgYm9vbCBDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKAogI2VuZGlmCiB9CiAK
K3N0YXRpYyBib29sIHNob3VsZE1hcmtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2Jh
bE9iamVjdCgpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoZ2xvYmFsT2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKEpTT2JqZWN0
KiBwcm90b3R5cGVPYmplY3QgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSB7
CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocHJvdG90eXBlT2JqZWN0KSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgYm90aCB0aGUgZ2xvYmFs
IG9iamVjdCBhbmQgdGhlIHByb3RvdHlwZSBhcmUgYWxyZWFkeSBsaXZlIGFueXdheSwgdGhlbiB0
aGlzIHN0cnVjdHVyZQorICAgIC8vIGlzIGhhcm1sZXNzIHRvIG1hcmsuCisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCit7CisgICAgaWYgKHNob3VsZE1hcmtT
dHJ1Y3R1cmUoanNDYXN0PFN0cnVjdHVyZSo+KHRyYW5zaXRpb24ubV90by5nZXQoKSkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlv
bi5tX2Zyb20uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CkBAIC0yMjgyLDIx
ICsyMzE2LDM1IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRNYXJrU3RydWN0dXJlKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKQorICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCghZGZnQ29tbW9uLT50cmFuc2l0
aW9uc1tpXS5tX2NvZGVPcmlnaW4KLSAgICAgICAgICAgICAgICAgfHwgSGVhcDo6aXNNYXJrZWQo
ZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4uZ2V0KCkpKQotICAgICAgICAg
ICAgICAgICYmIEhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9mcm9t
LmdldCgpKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKGRmZ0NvbW1v
bi0+dHJhbnNpdGlvbnNbaV0pKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2lu
ZyB0aHJlZSB0aGluZ3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKICAgICAgICAg
ICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKKyAgICAgICAgICAgICAgICAvLwog
ICAgICAgICAgICAgICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBh
bHJlYWR5IGJlY2F1c2Ugb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4n
dCBiZSBzY2FubmluZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAg
ICAgICAvLyAtIFRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMg
bWF5IGFyaXNlIGZyb20KICAgICAgICAgICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5l
ZC4gVGhleSBhcmUgbm90IHJlbGV2YW50IGlmIHRoZSB1c2VyJ3MKICAgICAgICAgICAgICAgICAv
LyAgIG9iamVjdCB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8g
bG9uZ2VyCiAgICAgICAgICAgICAgICAgLy8gICBsaXZlLgorICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgLy8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJh
bnNpdGlvbiBjaGVja3MgaWYgc29tZQogICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlv
biBob2xkcyB0aGUgc291cmNlLCBhbmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgogICAgICAg
ICAgICAgICAgIC8vICAgSGVuY2UgdGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFu
c2l0aW9uIHRvIGJlIGxpdmUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBXZSBhbHNvIHNob3J0LWNpcmN1aXQgdGhlIGxpdmVuZXNzIGlmIHRoZSBzdHJ1Y3R1cmUgaXMg
aGFybWxlc3MKKyAgICAgICAgICAgICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2Jq
ZWN0IGFuZCBwcm90b3R5cGUgYXJlIGJvdGggYWxyZWFkeQorICAgICAgICAgICAgICAgIC8vIGxp
dmUpLgorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZk
ZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fdG8pOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAgLTIzMzEsNiArMjM3OSwx
NCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KKyAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAg
ICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgLy8gSWYgc29tZSB3
ZWFrIHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24gd2Fz
CiAgICAgLy8gdW5zdWNjZXNzZnVsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTcwNDkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSwxMiBAQCBib29sIGlzU3VwcG9ydGVkKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAg
ICAmJiBGdW5jdGlvbldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkuY29udGFpbnMo
Y29kZUJsb2NrKTsKIH0KIAorYm9vbCBpc1N1cHBvcnRlZEZvcklubGluaW5nKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIHJldHVybiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmVlZHNBY3RpdmF0aW9uKCkKKyAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOworfQorCiBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIGlzU3VwcG9ydGVkKGNvZGVCbG9jaykK
QEAgLTY5LDIwICs3NSwxNyBAQCBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0
KENvCiBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25z
OjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgp
Ci0gICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRp
b24oKQotICAgICAgICAmJiBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lubGluaW5n
Q2FuZGlkYXRlKCk7CisgICAgICAgICYmIGlzU3VwcG9ydGVkRm9ySW5saW5pbmcoY29kZUJsb2Nr
KTsKIH0KIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNsb3N1cmVDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8
PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbElubGluZUNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+bmVlZHNBY3RpdmF0aW9uKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOworICAgICAgICAmJiBpc1N1cHBvcnRlZEZvcklu
bGluaW5nKGNvZGVCbG9jayk7CiB9CiBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOworICAgICAgICAmJiBpc1N1
cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayk7CiB9CiAKIGlubGluZSB2b2lkIGRlYnVnRmFp
bChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIENhcGFiaWxpdHlMZXZl
bCByZXN1bHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmgJKHJldmlzaW9uIDE3MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gRmFzdCBjaGVjayBmdW5jdGlvbnM7IGlmIHRoZXkg
cmV0dXJuIHRydWUgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvCiAvLyBjaGVjayBvcGNvZGVzLgog
Ym9vbCBpc1N1cHBvcnRlZChDb2RlQmxvY2sqKTsKK2Jvb2wgaXNTdXBwb3J0ZWRGb3JJbmxpbmlu
ZyhDb2RlQmxvY2sqKTsKIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqKTsKIGJvb2wg
bWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqKTsKIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDYWxsKENvZGVCbG9jayopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE3MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9y
PFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPj4gd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgU2VnbWVudGVkVmVjdG9y
PENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hwb2ludHM7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LCAx
LCAwPiBwcm9maWxlZFdhdGNocG9pbnRzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IGp1
bXBSZXBsYWNlbWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxNzA0OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDEzIEBAIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2Vz
OjpyZWFsbHlBZGQoVk0KIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZWZlcmVu
Y2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEpTQ2VsbCogdGFyZ2V0ID0gbV9yZWZlcmVuY2Vz
W2ldOwotICAgICAgICBjb21tb24tPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8
SlNDZWxsPih2bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKKyAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUq
Pih0YXJnZXQpKSB7CisgICAgICAgICAgICBjb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2Vz
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPih2bSwgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNvbW1vbi0+d2Vha1JlZmVyZW5jZXMuYXBwZW5kKAorICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHRhcmdldCkpOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTcwNDkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwog
CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9FbnRl
ckluTG9vcCh0cnVlKTsKKyAgICAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
Q29kZTo6REZHSklUKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2
aXNpb24gMTcwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMCArNTQsNTcgQEAgdm9pZCBo
YW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LAogICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSks
CiAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAKKyAgICAv
LyBXZSB3YW50IHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHBvc3NpYmlsaXR5IHRoYXQgd2Un
cmUgaW4gYSBsb29wLiBGb3IgdGhlIG91dGVybW9zdAorICAgIC8vIGNvZGUgYmxvY2sgaW4gdGhl
IGlubGluZSBzdGFjaywgd2UgaGFuZGxlIHRoaXMgYXBwcm9wcmlhdGVseSBieSBoYXZpbmcgdGhl
IGxvb3AgT1NSIHRyaWdnZXIKKyAgICAvLyBjaGVjayB0aGUgZXhpdCBjb3VudCBvZiB0aGUgcmVw
bGFjZW1lbnQgb2YgdGhlIENvZGVCbG9jayBmcm9tIHdoaWNoIHdlIGFyZSBPU1JpbmcuIFRoZQor
ICAgIC8vIHByb2JsZW0gaXMgdGhlIGlubGluZWQgZnVuY3Rpb25zLCB3aGljaCBtaWdodCBhbHNv
IGhhdmUgbG9vcHMsIGJ1dCB3aG9zZSBiYXNlbGluZSB2ZXJzaW9ucworICAgIC8vIGRvbid0IGtu
b3cgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGV4aXQgY291bnQuIEZpZ3VyZSBvdXQgaWYgdGhvc2Ug
bG9vcHMgYXJlIHNldmVyZSBlbm91Z2gKKyAgICAvLyB0aGF0IHdlIGhhZCB0cmllZCB0byBPU1Ig
ZW50ZXIuIElmIHNvLCB0aGVuIHdlIHNob3VsZCB1c2UgdGhlIGxvb3AgcmVvcHRpbWl6YXRpb24g
dHJpZ2dlci4KKyAgICAvLyBPdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIG5vcm1hbCByZW9w
dGltaXphdGlvbiB0cmlnZ2VyLgorICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3Qg
bG9vcFRocmVzaG9sZDsKKyAgICAKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJh
bWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICBsb29wVGhyZXNob2xkLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5i
cmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCisg
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+YWRkcmVzc09mRGlkVHJ5
VG9FbnRlckluTG9vcCgpKSkpOworICAgIH0KKyAgICAKKyAgICBqaXQubW92ZSgKKyAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaml0LmNvZGVCbG9jaygpLT5leGl0Q291bnRU
aHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwor
ICAgIAorICAgIGlmICghbG9vcFRocmVzaG9sZC5lbXB0eSgpKSB7CisgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKworICAgICAgICBsb29wVGhyZXNob2xk
LmxpbmsoJmppdCk7CisgICAgICAgIGlmIChmYWxzZSAmJiBqaXQuY29kZUJsb2NrKCktPmluc3Ry
dWN0aW9uQ291bnQoKSA9PSA2ODEpCisgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
ICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+ZXhpdENvdW50VGhyZXNob2xkRm9y
UmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsK
ICAgICAgICAgCi0gICAgdG9vRmV3RmFpbHMgPSBqaXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJz
OjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihqaXQuY29kZUJsb2NrKCktPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9u
KCkpKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIH0KKyAgICAKKyAgICB0b29GZXdG
YWlscyA9IGppdC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5m
bzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAKICAgICByZW9wdGltaXplTm93Lmxpbmso
JmppdCk7CiAgICAgCiAgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogI2lm
ICFOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTCiAgICAgaml0LnBva2UoR1BSSW5mbzo6cmVn
VDApOworICAgIGppdC5wb2tlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cigmZXhpdCks
IDEpOwogI2Vsc2UKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKLSAgICBBU1NFUlQoR1BSSW5mbzo6YXJndW1lbnRHUFIwICE9IEdQUkluZm86OnJl
Z1QxKTsKKyAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgaml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdU
MSk7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4odHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIEFzc2VtYmx5SGVs
cGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gaml0Lmp1bXAoKTsKICAgICAKICAgICB0b29GZXdG
YWlscy5saW5rKCZqaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzA0OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcgKzEwODYsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygi
XG4iKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVS
QVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBPU1JF
eGl0QmFzZSogZXhpdCkKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdl
IGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAg
Ly8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCkBAIC0xMTEwLDEzICsxMTEwLDIxIEBAIGV4dGVybiAi
QyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICBBU1NFUlQoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgCisgICAg
Ym9vbCBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcyA9IGZhbHNlOworICAgIGZvciAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0LT5tX2NvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5leGVjdXRhYmxlLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKKyAgICAgICAgICAgIGRp
ZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQogCiAgICAgLy8gSW4gb3JkZXIgdG8gdHJpZ2dlciByZW9wdGltaXph
dGlvbiwgb25lIG9mIHR3byB0aGluZ3MgbXVzdCBoYXZlIGhhcHBlbmVkOgogICAgIC8vIDEpIFdl
IGV4aXRlZCBtb3JlIHRoYW4gc29tZSBudW1iZXIgb2YgdGltZXMuCiAgICAgLy8gMikgV2UgZXhp
dGVkIGFuZCBnb3Qgc3R1Y2sgaW4gYSBsb29wLCBhbmQgbm93IHdlJ3JlIGV4aXRpbmcgYWdhaW4u
CiAgICAgYm9vbCBkaWRFeGl0QUJ1bmNoID0gb3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9w
dGltaXplTm93KCk7CiAgICAgYm9vbCBkaWRHZXRTdHVja0luTG9vcCA9Ci0gICAgICAgIGNvZGVC
bG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQorICAgICAgICAoY29k
ZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpIHx8IGRpZFRyeVRv
RW50ZXJJbnRvSW5saW5lZExvb3BzKQogICAgICAgICAmJiBvcHRpbWl6ZWRDb2RlQmxvY2stPnNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpOwogICAgIAogICAgIGlmICghZGlkRXhpdEFCdW5j
aCAmJiAhZGlkR2V0U3R1Y2tJbkxvb3ApIHsKQEAgLTEyMDksNyArMTIxNyw3IEBAIGNoYXIqIEpJ
VF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIAogICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICpjb2RlQmxvY2ss
ICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAg
ICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlck9TUkVudHJ5Tm93IHdpdGgg
ZXhlY3V0ZUNvdW50ZXIgPSAiLAogICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwg
IlxuIik7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw5IEBACiAjaW5j
bHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKIAotbmFtZXNwYWNl
IEpTQyB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLW5hbWVzcGFjZSBERkcg
eworc3RydWN0IE9TUkV4aXRCYXNlOwogCiBleHRlcm4gIkMiIHsKIApAQCAtMTMyLDcgKzEzMiw3
IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRl
Kiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqLCBPU1JFeGl0QmFz
ZSopIFdURl9JTlRFUk5BTDsKIAogI2lmIEVOQUJMRShGVExfSklUKQogdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cAkocmV2aXNpb24gMTcwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NS
RW50cnlKSVRDb2RlKCkKKyAgICA6IG1fYnl0ZWNvZGVJbmRleChVSU5UX01BWCkKKyAgICAsIG1f
ZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE3MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCwx
MiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgICAgICBieXRlY29kZUluZGV4LCAi
LlxuIik7CiAgICAgfQogICAgIAorICAgIGlmIChieXRlY29kZUluZGV4KQorICAgICAgICBqc0Nh
c3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zZXREaWRUcnlUb0VudGVySW5Mb29w
KHRydWUpOworCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2RlLT5ieXRlY29kZUlu
ZGV4KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBv
aW50IGZvciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBiYyMiLCBlbnRyeUNv
ZGUtPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxl
ZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW4gZW50cnlwb2ludCBmb3IgYmMjIiwgYnl0ZWNvZGVJ
bmRleCwgIjsgb3VycyBpcyBmb3IgYmMjIiwgZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCksICJc
biIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTcwNDkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw2ICsxMDgsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2Rl
KENvZGVCCiAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkgPT0gdGhpcyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNFeGVjdXRhYmxl
U2NyaXB0KGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAorICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coIkluc3RhbGxpbmcgIiwgKmdlbmVy
aWNDb2RlQmxvY2ssICJcbiIpOworICAgIAogICAgIFZNJiB2bSA9ICpnZW5lcmljQ29kZUJsb2Nr
LT52bSgpOwogICAgIAogICAgIGlmICh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNzA0
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5Nyw4ICszOTcsMTIgQEAgcHVibGlj
OgogICAgIEVDTUFNb2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2RlKCkg
PyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZTsgfQogICAgICAgICAKICAgICB2b2lkIHNldE5l
dmVySW5saW5lKGJvb2wgdmFsdWUpIHsgbV9uZXZlcklubGluZSA9IHZhbHVlOyB9CisgICAgdm9p
ZCBzZXREaWRUcnlUb0VudGVySW5Mb29wKGJvb2wgdmFsdWUpIHsgbV9kaWRUcnlUb0VudGVySW5M
b29wID0gdmFsdWU7IH0KICAgICBib29sIG5ldmVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXZlcklubGluZTsgfQorICAgIGJvb2wgZGlkVHJ5VG9FbnRlckluTG9vcCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlkVHJ5VG9FbnRlckluTG9vcDsgfQogICAgIGJvb2wgaXNJbmxpbmluZ0NhbmRpZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuICFuZXZlcklubGluZSgpOyB9CisgICAgCisgICAgYm9vbCogYWRk
cmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpIHsgcmV0dXJuICZtX2RpZFRyeVRvRW50ZXJJbkxv
b3A7IH0KIAogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCkBAIC00NTAsNiArNDU0
LDcgQEAgcHJvdGVjdGVkOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIGJvb2wg
bV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKICAgICBib29sIG1fbmV2ZXJJbmxpbmU7CisgICAgYm9v
bCBtX2RpZFRyeVRvRW50ZXJJbkxvb3A7CiAgICAgaW50IG1fZmlyc3RMaW5lOwogICAgIGludCBt
X2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAx
NzA0OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBTdHJ1
Y3R1cmU6OnN0b3JlZFByb3RvdAogewogICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Byb3RvdHlwZS5n
ZXQoKTsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOwogfQogCkBAIC02
OSw3ICs2OSw3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIHsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gc3RvcmVkUHJvdG90eXBlT2JqZWN0KCk7CiAgICAgaWYg
KCFvYmplY3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>