<?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>130295</bug_id>
          
          <creation_ts>2014-03-15 11:30:06 -0700</creation_ts>
          <short_desc>Crash beneath operationTearOffActivation running this JS compression demo</short_desc>
          <delta_ts>2014-03-20 13:54:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://nerget.com/compression/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>130440</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>juergen</cc>
    
    <cc>mario</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>990879</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-03-15 11:30:06 -0700</bug_when>
    <thetext>* STEPS TO REPRODUCE
Steps to reproduce:
1. Go to http://nerget.com/compression/
2. Select Order 2 (precise)
3. Hit compress

&lt;rdar://problem/16332337&gt; Crash beneath operationTearOffActivation running this JS compression demo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991327</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-17 11:50:05 -0700</bug_when>
    <thetext>The issue is above the LLINT and baselineJIT.  If I disable the DFG, the issue does not manifest.

Adding some printfs to the slow paths for creating and tearing off the activation, I see that on the DFG run, the activation is created by the LLINT, but at tear off time, it is seeing a bad activation pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991331</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-17 11:59:18 -0700</bug_when>
    <thetext>The added printfs say that the tear off (and manifestation of the issue) is being done in the baseline JIT.  There was an OSR entry to DFG code, but it encountered a speculation check failure and OSR exited back to the baseline JIT where this issue manifested:

Optimized decompress#EDGKb2:[0x7ff00ea3c6e0-&gt;0x7ff00ea30920-&gt;0x11605a970, NoneFunctionCall, 324] using DFGMode with DFG into 1706 bytes in 17.730957 ms.

Speculation failure in decompress#EDGKb2:[0x7ff00ea3c6e0-&gt;0x7ff00ea30920-&gt;0x11605a970, DFGFunctionCall, 324] with executeCounter = 0.000000/3869.000000, -1000, reoptimizationRetryCounter = 1, optimizationDelayCounter = 5, osrExitCounter = 0
    GPRs at time of exit: rax:0xffff0000fffffffe rdx:0xffff000000000002 rcx:0x36ba8c01ae9f rbx:0x7ff00bf00c18 rdi:0x1 rsi:0xe r8:0x7ff00bf00c18 r9:0x10b00db00 r10:0xeab3070d r12:0x7ff00eb01000 r13:0x5
    FPRs at time of exit: xmm0:3fd77d0d45000000:0.367008 xmm1:4000000000000000:2.000000 xmm2:4330000000000000:4503599627370496.000000 xmm3:3fb8f6859999999a:0.097512 xmm4:40310628cbd1244a:17.024060 xmm5:ffffffff:0.000000

    operationTearOffActivation @ exec 0x7fff5bc3a270 cb 0x7ff00ea30920 | 0xa | isOptimizing JIT NO</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991421</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-17 15:22:32 -0700</bug_when>
    <thetext>The offending code is in the OSR entry thunk.  Dissecting the thunk now ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992017</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-18 21:51:10 -0700</bug_when>
    <thetext>This bug is awesome!  The way we reason about flushing fails to cope with infinite loops - either ones that existed in the original code or ones that get created by way of CFG simplification.

The best solution is probably to get CPS rethreading to inject flushes.  This means that we handle flushes in the following way in the different forms:

LoadStore: the bytecode is the ground truth of what is flushed.  You can&apos;t trust Flushes.  But, you know that anything that was flushed will be live-at-head in all of the right places.

ThreadedCPS: Flushes are at any &quot;terminals&quot; blocks - that is, blocks that have no forward successors.

SSA: no more Flushes!  This is already in effect after https://bugs.webkit.org/show_bug.cgi?id=130440.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992368</commentid>
    <comment_count>5</comment_count>
      <attachid>227248</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-19 19:51:30 -0700</bug_when>
    <thetext>Created attachment 227248
bunch of test cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992384</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-19 21:51:13 -0700</bug_when>
    <thetext>It&apos;s interesting how challenging this is!  The whole point is that we&apos;re trying to insert Flush&apos;s at any point where execution could &quot;end&quot;, which basically needs to include the end of any basic block that has no forward successors.

But boy is that hard.

Once we&apos;re in DFG SSA, it&apos;s easy, because by then, we don&apos;t have Flush&apos;s.

But in CPS, it&apos;s kind of a poop show.

- I cannot insert flushes in all of the right places prior to optimization unless I was conservative and inserted them in a *lot* of places, since at that point I don&apos;t know who might end up without forward successors.  A looping branch might lose its forward successor due to an optimization, as the attached test cases illustrate.

- I cannot insert all of the flushes after parsing because then I don&apos;t know exactly where it&apos;s OK to insert them.  For example, we won&apos;t know when a SetLocal is an ImmediateSet and thus doesn&apos;t need a Flush.

I&apos;m starting to think that the bytecode parser ought to insert flushes &quot;as if&quot; we were returning at any backwards branch in addition to the places where it already does it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992386</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-19 21:54:09 -0700</bug_when>
    <thetext>Also found another bug, and I do intend to fix them as part of this patch, and hopefully have test cases too: InlineCallFrame::capturedVars is wrong for inlineDepth &gt;= 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992387</commentid>
    <comment_count>8</comment_count>
      <attachid>227254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-19 21:56:53 -0700</bug_when>
    <thetext>Created attachment 227254
the wrong approach

This tries to make it so that CPSRethreading blows away all Flush&apos;s and then inserts them by using bytecode as the ground truth.  But I don&apos;t believe this will work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992595</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-20 11:10:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Also found another bug, and I do intend to fix them as part of this patch, and hopefully have test cases too: InlineCallFrame::capturedVars is wrong for inlineDepth &gt;= 2.

Nope, that wasn&apos;t a bug.  That was just me misreading code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992597</commentid>
    <comment_count>10</comment_count>
      <attachid>227305</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-20 11:14:56 -0700</bug_when>
    <thetext>Created attachment 227305
hopefully the right approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992599</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 11:16:46 -0700</bug_when>
    <thetext>Attachment 227305 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:783:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 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>992635</commentid>
    <comment_count>12</comment_count>
      <attachid>227313</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-20 12:02:17 -0700</bug_when>
    <thetext>Created attachment 227313
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992637</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 12:03:48 -0700</bug_when>
    <thetext>Attachment 227313 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:783:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 20 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>992651</commentid>
    <comment_count>14</comment_count>
    <who name="Babak Shafiei">bshafiei</who>
    <bug_when>2014-03-20 12:26:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/16332337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992706</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-20 13:54:24 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/165995</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227248</attachid>
            <date>2014-03-19 19:51:30 -0700</date>
            <delta_ts>2014-03-19 21:56:53 -0700</delta_ts>
            <desc>bunch of test cases</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7372</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTY1OTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGVudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEJl
Zm9yZUYKIC8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3UgY2FuIGV4cGVjdCB0aGUgZW50aXJlIGdy
YXBoIHRvIGJlIGluLgogZW51bSBHcmFwaEZvcm0gewogICAgIC8vIExvYWRTdG9yZSBmb3JtIG1l
YW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBmcmVlbHkgdXNlIEdldExvY2FsLCBTZXRMb2NhbCwK
LSAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBhbmQgRmx1c2ggZm9yIGFjY2Vzc2luZyBsb2NhbCB2
YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAgICAvLyBhbmQgR2V0TG9jYWxVbmxpbmtlZCBmb3Ig
YWNjZXNzaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGluZwogICAgIC8vIHdoZXJlIHRo
ZWlyIGxpdmUgcmFuZ2VzIG91Z2h0IHRvIGJlLiBEYXRhIGZsb3cgYmV0d2VlbiBsb2NhbCBhY2Nl
c3NlcyBpcwogICAgIC8vIGltcGxpY2l0LiBMaXZlbmVzcyBpcyBvbmx5IGV4cGxpY2l0IGF0IGJs
b2NrIGhlYWRzICh2YXJpYWJsZXNBdEhlYWQpLgogICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5
IHRoZSBERkcgc2ltcGxpZmllciBhbmQgaXMgb25seSBwcmVzZXJ2ZWQgYnkgc2FtZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXJyZWQtaW5maW5pdGUtbG9v
cC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVz
ZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0
dXJlZC12YXJpYWJsZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rp
b24gYmFyKGYpIHsKKyAgICB0aHJvdyBmOworfQorCitub0lubGluZShiYXIpOworCit2YXIgc2hv
dWxkQ29udGludWUgPSB0cnVlOworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSAr
IDE7CisgICAgd2hpbGUgKHNob3VsZENvbnRpbnVlKSB7CisgICAgICAgIGJhcihmdW5jdGlvbigp
IHsgcmV0dXJuIHg7IH0pOworICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkpOworICAg
IH0gY2F0Y2ggKGYpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBpICsgMSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Ig
aSA9ICIgKyBpICsgIjogIiArIHJlc3VsdDsKKyAgICB9Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQt
dmFyaWFibGVzLXdpdGgtb3NyLWVudHJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFy
aWFibGVzLXdpdGgtb3NyLWVudHJ5LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJp
YWJsZXMtd2l0aC1vc3ItZW50cnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAor
dmFyIGNvdW50ID0gMDsKKworZnVuY3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3VudCA+PSAx
MDAwMCkKKyAgICAgICAgdGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24g
Zm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYmFy
KGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgfQorfQorCitub0lubGluZShmb28pOwor
Cit0cnkgeworICAgIGZvbyg0Mik7Cit9IGNhdGNoIChmKSB7CisgICAgdmFyIHJlc3VsdCA9IGYo
KTsKKyAgICBpZiAocmVzdWx0ICE9IDQzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9v
cC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0
dXJlZC12YXJpYWJsZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rp
b24gYmFyKGYpIHsKKyAgICB0aHJvdyBmOworfQorCitub0lubGluZShiYXIpOworCitmdW5jdGlv
biBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgZm9yICg7OykgeworICAgICAgICBi
YXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAg
IGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmRpcmVjdGx5LWlu
ZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3Jl
YXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWluZGlyZWN0bHktaW5mZXJy
ZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVz
LXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmRpcmVjdGx5LWluZmVycmVk
LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10
aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsr
Y291bnQgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBjb3VudCA9IDA7CisgICAgdGhyb3cg
ZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZnV6eihhKSB7CisgICAgcmV0dXJu
IGEgIT0gdHJ1ZTsKK30KKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOwor
ICAgIHZhciB5ID0gYSArIDI7CisgICAgdmFyIGYgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9
KTsKKyAgICB3aGlsZSAoZnV6eih5KSkgeworICAgICAgICBiYXIoZik7CisgICAgfQorfQorCitu
b0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0
cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRjaCAoZikgeworICAgICAgICB2YXIgcmVz
dWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworICAg
IH0KK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3kt
aW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1j
cmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5mZXJyZWQtaW5maW5p
dGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3Rp
dmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQt
dXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lk
ZS10aGUtbG9vcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACit2YXIgY291bnQg
PSAwOworCitmdW5jdGlvbiBiYXIoZikgeworICAgIGlmICgrK2NvdW50IDwgMTAwKQorICAgICAg
ICByZXR1cm47CisgICAgY291bnQgPSAwOworICAgIHRocm93IGY7Cit9CisKK25vSW5saW5lKGJh
cik7CisKK3ZhciBzaG91bGRDb250aW51ZSA9IHRydWU7CisKK2Z1bmN0aW9uIGZvbyhhKSB7Cisg
ICAgdmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IChmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0p
OworICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgeworICAgICAgICBiYXIoZik7CisgICAgfQor
fQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB0cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRjaCAoZikgeworICAgICAgICB2
YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0
OworICAgIH0KK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90
cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVh
dGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0
LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNp
ZGUtdGhlLWxvb3AuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJs
ZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBiYXIo
ZikgeworICAgIGlmICgrK2NvdW50IDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgY291bnQg
PSAwOworICAgIHRocm93IGY7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhh
KSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IChmdW5jdGlvbigpIHsgcmV0dXJu
IHg7IH0pOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYmFyKGYpOworICAgIH0KK30KKworbm9J
bmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdHJ5
IHsKKyAgICAgICAgZm9vKGkpOworICAgIH0gY2F0Y2ggKGYpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBpICsgMSkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiArIHJlc3VsdDsKKyAgICB9
Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWlu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29w
LXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNl
cy1jYXB0dXJlZC12YXJpYWJsZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAor
dmFyIGNvdW50ID0gMDsKKworZnVuY3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3VudCA8IDEw
MCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOworfQorCitu
b0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7Cisg
ICAgZm9yICg7OykgeworICAgICAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAg
ICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgIHRyeSB7CisgICAgICAgIGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyBy
ZXN1bHQ7CisgICAgfQorfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227254</attachid>
            <date>2014-03-19 21:56:53 -0700</date>
            <delta_ts>2014-03-20 11:14:56 -0700</delta_ts>
            <desc>the wrong approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18383</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjU5NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzOSw4ICsyNDM5LDYgQEAgYm9vbCBDb2RlQmxv
Y2s6OmlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdAogICAgIC8vIERpdHRvIGZvciB0aGUgYXJndW1l
bnRzIG9iamVjdC4KICAgICBpZiAodXNlc0FyZ3VtZW50cygpICYmIG9wZXJhbmQgPT0gYXJndW1l
bnRzUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBEaXR0byBmb3Ig
dGhlIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgaWYgKHVzZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5k
ID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcigpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTUg
QEAgYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9kZSogbXlOb2RlKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorYm9vbCBCYXNpY0Jsb2NrOjpoYXNGb3J3YXJkU3VjY2Vzc29yKCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KHN1Y2Nlc3NvcihpKS0+aW5kZXggPiBpbmRleCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5
NSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
cmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQog
ICAgIAorICAgIGJvb2wgaGFzRm9yd2FyZFN1Y2Nlc3NvcigpOworICAgIAogICAgIHZvaWQgcmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZvaWQgcmVwbGFjZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUyLDYgKzMwNTIsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcmV0OgogICAgICAgICAg
ICAgZmx1c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOwogICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChJbmxpbmVF
bmQpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZh
bHVlLmlzVmFsaWQoKSk7CiAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXQpOwogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKQEAgLTM1OTYsOCArMzU5NywxMiBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTsp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0Nh
cHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoaSk7CisgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOworICAgICAg
ICAgICAgICAgIGlmIChieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQocmVn
KSkgeworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBwZWQgPSBWaXJ0
dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICByZWcub2Zmc2V0KCkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLnNldChyZW1hcHBlZC50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIApAQCAtMzksNiArNDAsNyBAQCBjbGFzcyBDUFNSZXRocmVhZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlCiBwdWJsaWM6CiAgICAgQ1BTUmV0aHJlYWRpbmdQaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJDUFMgcmV0aHJlYWRpbmciKQorICAg
ICAgICAsIG1fb3BlcmFuZHMoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQpOwogICAgIHsKICAgICB9CiAgICAgCkBAIC01MSw2ICs1Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIGNsZWFySXNMb2FkZWRGcm9tKCk7CiAgICAgICAgIGZyZWVVbm5l
Y2Vzc2FyeU5vZGVzKCk7CisgICAgICAgIGluc2VydEZsdXNoZXMoKTsKICAgICAgICAgbV9ncmFw
aC5jbGVhclJlcGxhY2VtZW50cygpOwogICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKQEAgLTg0LDcgKzg3
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGZy
b21JbmRleCsrKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTEwMiw2ICsxMDQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE2LDYgKzEyMCwxMDkgQEAgcHJpdmF0ZToKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBp
bml0aWFsaXplT3BlcmFuZHMoKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fb3Bl
cmFuZHMuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaSk7Cisg
ICAgICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRzLmF0Rm9yPG9w
ZXJhbmRGb3I+KGkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9vcGVyYW5kcy5hdEZvcjxvcGVyYW5kRm9yPihpKSA9IG51
bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRGbHVzaCh1bnNp
Z25lZCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBkYXRhID0gbV9vcGVyYW5kcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBpZiAo
IWRhdGEpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICAK
KyAgICB2b2lkIGluc2VydEZsdXNoZXNGb3JJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlu
dCBudW1Bcmd1bWVudHM7CisgICAgICAgIGludCBzdGFja09mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIHN0YWNrT2Zmc2V0
ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAgICAgICAg
IGluc2VydEZsdXNoKG5vZGVJbmRleCwgc3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpOwor
ICAgICAgICAgICAgICAgIGluc2VydEZsdXNoKG5vZGVJbmRleCwgc3RhY2tPZmZzZXQgKyBKU1N0
YWNrOjpTY29wZUNoYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIChpbnQgbG9jYWwgPSBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zaXplKCk7
IGxvY2FsLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FwdHVy
ZWRWYXJzLnF1aWNrR2V0KGkpKQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRGbHVzaChub2Rl
SW5kZXgsIHN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG51bUFy
Z3VtZW50cyA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBzdGFj
a09mZnNldCA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGxvY2FsID0g
Y29kZUJsb2NrKCktPm1fbnVtVmFyczsgKytsb2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+aXNDYXB0dXJlZChsb2NhbCkpCisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dEZsdXNoKG5vZGVJbmRleCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpLm9mZnNldCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQg
YXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKKyAgICAgICAgICAgIGlu
c2VydEZsdXNoKG5vZGVJbmRleCwgc3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEZs
dXNoZXMoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc29sZSByZXBvc2l0b3J5IG9m
IGtub3dsZWRnZSBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIGZsdXNoZWQuCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaW5pdGlhbGl6ZU9wZXJhbmRzPEFyZ3VtZW50T3BlcmFuZD4oKTsK
KyAgICAgICAgICAgIGluaXRpYWxpemVPcGVyYW5kczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgbV9ibG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFBST0JMRU06IE5lZWQgdG8gZmx1c2ggaWYgaXQncyBhICJub3JtYWwgc2V0IiBidXQg
ZG9uJ3QgZmx1c2gKKyAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLgorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3Bl
cmFuZHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICBj
YXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBtX29wZXJhbmRzLm9wZXJhbmQo
ZGF0YS0+bG9jYWwoKSkgPSBkYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIElubGluZUVuZDogeworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBjbGVh
clZhcmlhYmxlc0F0SGVhZEFuZFRhaWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKApAQCAtNDgz
LDggKzU5MCwxMCBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IG1fb3BlcmFuZHM7CiAgICAg
VmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3Rv
cjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKKyAgICBJbnNlcnRpb25TZXQg
bV9pbnNlcnRpb25TZXQ7CiB9OwogCiBib29sIHBlcmZvcm1DUFNSZXRocmVhZGluZyhHcmFwaCYg
Z3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICBj
YXNlIElubGluZUVuZDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2
aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGVudW0gT3B0aW1pemF0aW9uRml4cG9p
bnRTdGF0ZSB7IEJlZm9yZUYKIC8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3UgY2FuIGV4cGVjdCB0
aGUgZW50aXJlIGdyYXBoIHRvIGJlIGluLgogZW51bSBHcmFwaEZvcm0gewogICAgIC8vIExvYWRT
dG9yZSBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBmcmVlbHkgdXNlIEdldExvY2Fs
LCBTZXRMb2NhbCwKLSAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBhbmQgRmx1c2ggZm9yIGFjY2Vz
c2luZyBsb2NhbCB2YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAgICAvLyBhbmQgR2V0TG9jYWxV
bmxpbmtlZCBmb3IgYWNjZXNzaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGluZwogICAg
IC8vIHdoZXJlIHRoZWlyIGxpdmUgcmFuZ2VzIG91Z2h0IHRvIGJlLiBEYXRhIGZsb3cgYmV0d2Vl
biBsb2NhbCBhY2Nlc3NlcyBpcwogICAgIC8vIGltcGxpY2l0LiBMaXZlbmVzcyBpcyBvbmx5IGV4
cGxpY2l0IGF0IGJsb2NrIGhlYWRzICh2YXJpYWJsZXNBdEhlYWQpLgogICAgIC8vIFRoaXMgaXMg
b25seSB1c2VkIGJ5IHRoZSBERkcgc2ltcGxpZmllciBhbmQgaXMgb25seSBwcmVzZXJ2ZWQgYnkg
c2FtZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgLyogd2FudCBhbGwgc3RhdGUuICovXAogICAgIG1hY3JvKExvb3BIaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAorICAgIC8qIEhpbnQgdGhhdCB3ZSBhcmUgYXQgYW4g
aW5saW5lZCByZXR1cm4gc2l0ZS4gKi9cCisgICAgbWFjcm8oSW5saW5lRW5kLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgXAogICAgIC8qIFNwZWNpYWwgbm9kZSBmb3IgT1NSIGVudHJ5IGludG8g
dGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGluZyBhIGxvY2FsICovXAogICAgIC8q
IHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1wKICAgICBtYWNybyhFeHRyYWN0
T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw2ICsxNTEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9k
ZSogCiAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAg
ICBjYXNlIEluc3RhbmNlT2Y6CisgICAgY2FzZSBJbmxpbmVFbmQ6CiAgICAgICAgIC8vIFRoZXNl
IGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsNiArNjE1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFR5cGVk
QXJyYXlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2lu
dDoKKyAgICAgICAgY2FzZSBJbmxpbmVFbmQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVycmVkLWlu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVycmVkLWluZmluaXRlLWxv
b3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0
LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcg
QEAKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgdGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsK
KwordmFyIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2
YXIgeCA9IGEgKyAxOworICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgeworICAgICAgICBiYXIo
ZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAgIGZv
byhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2Vz
LWNhcHR1cmVkLXZhcmlhYmxlcy13aXRoLW9zci1lbnRyeS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNh
cHR1cmVkLXZhcmlhYmxlcy13aXRoLW9zci1lbnRyeS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2Fw
dHVyZWQtdmFyaWFibGVzLXdpdGgtb3NyLWVudHJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjYgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsr
Y291bnQgPj0gMTAwMDApCisgICAgICAgIHRocm93IGY7Cit9CisKK25vSW5saW5lKGJhcik7CisK
K2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0pOworICAgIH0KK30KKworbm9Jbmxp
bmUoZm9vKTsKKwordHJ5IHsKKyAgICBmb28oNDIpOworfSBjYXRjaCAoZikgeworICAgIHZhciBy
ZXN1bHQgPSBmKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MykKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxl
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2lu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0
LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUg
QEAKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgdGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsK
KworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIGZvciAoOzspIHsK
KyAgICAgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgfQorfQorCitub0lu
bGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0cnkg
eworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRjaCAoZikgeworICAgICAgICB2YXIgcmVzdWx0
ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworICAgIH0K
K30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5k
aXJlY3RseS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJs
ZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmRpcmVj
dGx5LWluZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1h
bmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5kaXJlY3Rs
eS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5k
LWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM2IEBACit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBiYXIoZikgewor
ICAgIGlmICgrK2NvdW50IDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgY291bnQgPSAwOwor
ICAgIHRocm93IGY7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZ1enooYSkgewor
ICAgIHJldHVybiBhICE9IHRydWU7Cit9CisKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHgg
PSBhICsgMTsKKyAgICB2YXIgeSA9IGEgKyAyOworICAgIHZhciBmID0gKGZ1bmN0aW9uKCkgeyBy
ZXR1cm4geDsgfSk7CisgICAgd2hpbGUgKGZ1enooeSkpIHsKKyAgICAgICAgYmFyKGYpOworICAg
IH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkpOworICAgIH0gY2F0Y2ggKGYpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBpICsgMSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiArIHJl
c3VsdDsKKyAgICB9Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvdHJpY2t5LWluZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlh
Ymxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWluZmVy
cmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRl
cy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5mZXJyZWQtaW5maW5pdGUt
bG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0
aW9uLW91dHNpZGUtdGhlLWxvb3AuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAor
dmFyIGNvdW50ID0gMDsKKworZnVuY3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3VudCA8IDEw
MCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOworfQorCitu
b0lubGluZShiYXIpOworCit2YXIgc2hvdWxkQ29udGludWUgPSB0cnVlOworCitmdW5jdGlvbiBm
b28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgdmFyIGYgPSAoZnVuY3Rpb24oKSB7IHJl
dHVybiB4OyB9KTsKKyAgICB3aGlsZSAoc2hvdWxkQ29udGludWUpIHsKKyAgICAgICAgYmFyKGYp
OworICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkpOworICAgIH0gY2F0Y2ggKGYpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBpICsgMSkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjog
IiArIHJlc3VsdDsKKyAgICB9Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvdHJpY2t5LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxl
cy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWluZmluaXRl
LWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZh
dGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVy
ZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3Au
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAordmFyIGNvdW50ID0gMDsKKworZnVu
Y3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3VudCA8IDEwMCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgdmFyIGYgPSAoZnVuY3Rpb24o
KSB7IHJldHVybiB4OyB9KTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJhcihmKTsKKyAgICB9
Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIHRyeSB7CisgICAgICAgIGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1
bHQ7CisgICAgfQorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5m
aW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9v
cC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzAgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsr
Y291bnQgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBjb3VudCA9IDA7CisgICAgdGhyb3cg
ZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9
IGEgKyAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4g
eDsgfSk7CisgICAgfQorfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRjaCAo
ZikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IGkg
KyAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkg
KyAiOiAiICsgcmVzdWx0OworICAgIH0KK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227305</attachid>
            <date>2014-03-20 11:14:56 -0700</date>
            <delta_ts>2014-03-20 12:02:17 -0700</delta_ts>
            <desc>hopefully the right approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25980</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1OTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE0LTAzLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiBydW5uaW5nIHRoaXMgSlMg
Y29tcHJlc3Npb24gZGVtbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBNYWtlIHN1cmUgdGhhdCB3ZSBmbHVzaCB0aGluZ3MgYXMgaWYgd2Ug
d2VyZSBhdCBhIHRlcm1pbmFsLCBpZiB3ZSBhcmUgYXQgYSBibG9jayB3aXRoCisgICAgICAgIG5v
IGZvcndhcmQgZWRnZXMuIFRoaXMgZml4ZXMgaW5maW5pdGVseSBsb29weSBjb2RlIHdpdGggY2Fw
dHVyZWQgdmFyaWFibGVzLgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0IHRoZSBDRkcgc2ltcGxp
ZmllciBhZGRzIGV4cGxpY2l0IGZsdXNoZXMgd2hlbmV2ZXIgaXQgamV0dGlzb25zIGEgYmxvY2su
CisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHNvIHRoYXQgTm9kZUlzRmx1c2hlZCBpcyBhIHRo
aW5nLiBQcmV2aW91c2x5IG9ubHkgU1NBIHVzZWQgaXQgYW5kIGl0IGNvbXB1dGVkCisgICAgICAg
IGl0IGJ5IGl0c2VsZi4gTm93IGl0J3MganVzdCB0aGVyZS4KKyAgICAgICAgCisgICAgICAgIEFk
ZCBhIGJ1bmNoIG9mIHRlc3RzLiBBbGwgb2YgdGhlbSBwcmV2aW91c2x5IGVpdGhlciBjcmFzaGVk
IG9yIHJldHVybmQgYmFkIG91dHB1dCBkdWUKKyAgICAgICAgdG8gbWVtb3J5IGNvcnJ1cHRpb24u
CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzQ2FwdHVyZWQpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yUmV0dXJuKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Zmx1c2hJZlRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6YnJhbmNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjprZWVwT3BlcmFuZEFsaXZl
KToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQ1NF
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Y2xlYXJGbGFnc09uQWxsTm9kZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb21wdXRl
SXNGbHVzaGVkKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmR1bXBOb2RlRmxhZ3MpOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAg
ICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
U0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2luZmVycmVk
LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qczogQWRkZWQuCisg
ICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKG5vSW5saW5lKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFi
bGVzLXdpdGgtb3NyLWVudHJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChm
b28pOgorICAgICAgICAobm9JbmxpbmUpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9pbmZpbml0
ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMuanM6IEFkZGVkLgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChub0lubGluZSk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL3RyaWNreS1pbmRpcmVjdGx5LWluZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11
c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRl
LXRoZS1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmdXp6KToKKyAg
ICAgICAgKGZvby5mKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Ry
aWNreS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMt
YW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qczogQWRkZWQuCisg
ICAgICAgIChiYXIpOgorICAgICAgICAoZm9vLmYpOgorICAgICAgICAoZm9vKToKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvdHJpY2t5LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZh
cmlhYmxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28uZik6CisgICAgICAgIChmb28pOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2Fw
dHVyZWQtdmFyaWFibGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28p
OgorICAgICAgICAobm9JbmxpbmUpOgorCiAyMDE0LTAzLTIwICBHYWJvciBSYXBjc2FueWkgIDxy
Z2Fib3JAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQVJNNjRdIEZpeCBhc3NlbWJsZXIgYnVpbGQg
aXNzdWVzIGFuZCBhZGQgY2FjaGVGbHVzaCBzdXBwb3J0IGZvciBMaW51eApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2NTk0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDM5LDggKzI0MzksNiBAQCBib29sIENvZGVCbG9jazo6aXNDYXB0dXJl
ZChWaXJ0dWFsUmVnaXN0CiAgICAgLy8gRGl0dG8gZm9yIHRoZSBhcmd1bWVudHMgb2JqZWN0Lgog
ICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSBhcmd1bWVudHNSZWdpc3Rlcigp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERpdHRvIGZvciB0aGUgYXJndW1lbnRz
IG9iamVjdC4KICAgICBpZiAodXNlc0FyZ3VtZW50cygpICYmIG9wZXJhbmQgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1
Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQg
cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZvaWQgcmVwbGFjZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDE2NTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5h
ZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBmbHVzaChJbmxp
bmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKICAgICAgICAgaW50IG51bUFy
Z3VtZW50czsKQEAgLTUwMiwxNiArNTAyLDI5IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICB2b2lkIGZsdXNoQWxsQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXNJbklubGlu
ZVN0YWNrKCkKKyAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKICAgICAgICAgZm9y
IChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5ID0gbV9pbmxpbmVTdGFja1RvcDsg
aW5saW5lU3RhY2tFbnRyeTsgaW5saW5lU3RhY2tFbnRyeSA9IGlubGluZVN0YWNrRW50cnktPm1f
Y2FsbGVyKQogICAgICAgICAgICAgZmx1c2goaW5saW5lU3RhY2tFbnRyeSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCkKKyAgICB2b2lkIGZs
dXNoRm9yUmV0dXJuKCkKICAgICB7CiAgICAgICAgIGZsdXNoKG1faW5saW5lU3RhY2tUb3ApOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIGZsdXNoSWZUZXJtaW5hbChTd2l0Y2hEYXRhJiBkYXRhKQor
ICAgIHsKKyAgICAgICAgaWYgKGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpID4gbV9j
dXJyZW50SW5kZXgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYg
KGRhdGEuY2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmx1
c2hGb3JUZXJtaW5hbCgpOworICAgIH0KIAogICAgIC8vIE5PVEU6IE9ubHkgdXNlIHRoaXMgdG8g
Y29uc3RydWN0IGNvbnN0YW50cyB0aGF0IGFyaXNlIGZyb20gbm9uLXNwZWN1bGF0aXZlCiAgICAg
Ly8gY29uc3RhbnQgZm9sZGluZy4gSS5lLiBjcmVhdGluZyBjb25zdGFudHMgdXNpbmcgdGhpcyBp
ZiB3ZSBoYWQgY29uc3RhbnQKQEAgLTcyMCw2ICs3MzMsOSBAQCBwcml2YXRlOgogCiAgICAgQnJh
bmNoRGF0YSogYnJhbmNoRGF0YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCiAg
ICAgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBicmFuY2hlcyBvcmlnaW5hdGluZyBmcm9t
IGJ5dGVjb2RlIGFsd2F5cyBoYXZlIGEgZmFsbC10aHJvdWdoLiBXZQorICAgICAgICAvLyB1c2Ug
dGhpcyBhc3N1bXB0aW9uIHRvIGF2b2lkIGNoZWNraW5nIGZvciB0aGUgY3JlYXRpb24gb2YgdGVy
bWluYWwgYmxvY2tzLgorICAgICAgICBBU1NFUlQoKHRha2VuID4gbV9jdXJyZW50SW5kZXgpIHx8
IChub3RUYWtlbiA+IG1fY3VycmVudEluZGV4KSk7CiAgICAgICAgIEJyYW5jaERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKICAgICAgICAgKmRhdGEgPSBCcmFuY2hEYXRh
Ojp3aXRoQnl0ZWNvZGVJbmRpY2VzKHRha2VuLCBub3RUYWtlbik7CiAgICAgICAgIHJldHVybiBk
YXRhOwpAQCAtMjcyNyw2ICsyNzQzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfam1wOiB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKKyAgICAgICAgICAgICAgICBmbHVzaEZv
clRlcm1pbmFsKCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
bXApOwogICAgICAgICB9CkBAIC0zMDA3LDYgKzMwMjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUlu
ZGV4KGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0
KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAg
TEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KQEAgLTMwMjYsNiArMzA0NSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6
d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJs
ZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmbHVzaElm
VGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZk
YXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAgICB9
CkBAIC0zMDQ1LDEyICszMDY1LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtub3du
U3RyaW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgo
U3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hf
c3RyaW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgotICAgICAgICAgICAg
Zmx1c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOworICAgICAgICAgICAgZmx1c2hG
b3JSZXR1cm4oKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQo
KSk7CiAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJu
VmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpLCBJbW1lZGlhdGVTZXQpOwpAQCAtMzA3OCwyMCArMzA5OSwyMCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9y
ZXQpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZW5kOgotICAgICAgICAgICAgZmx1
c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOworICAgICAgICAgICAgZmx1c2hGb3JS
ZXR1cm4oKTsKICAgICAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAg
ICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7
CiAKICAgICAgICAgY2FzZSBvcF90aHJvdzoKICAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3cs
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsK
LSAgICAgICAgICAgIGZsdXNoQWxsQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXNJbklubGlu
ZVN0YWNrKCk7CisgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFVucmVhY2hhYmxlKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93
KTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3dSZWZlcmVuY2VFcnJvcik7Ci0gICAgICAgICAgICBm
bHVzaEFsbEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzSW5JbmxpbmVTdGFjaygpOworICAg
ICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChVbnJl
YWNoYWJsZSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJyb3Ip
OwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2NTk0MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2MywxNiArMjYzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJyYW5jaC0+b3JpZ2luLCBPcEluZm8odGFy
Z2V0QmxvY2spKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHZvaWQga2VlcE9wZXJh
bmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBO
b2RlT3JpZ2luIG5vZGVPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgTm9kZSogbGl2ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVUeXBl
IG5vZGVUeXBlOworICAgICAgICBpZiAobGl2ZW5lc3NOb2RlLT5mbGFncygpICYgTm9kZUlzRmx1
c2hlZCkKKyAgICAgICAgICAgIG5vZGVUeXBlID0gRmx1c2g7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5vZGVUeXBlID0gUGhhbnRvbUxvY2FsOwogICAgICAgICBibG9jay0+YXBwZW5kTm9k
ZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIG5vZGVPcmln
aW4sIAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIG5vZGVUeXBlLCBub2RlT3JpZ2lu
LCAKICAgICAgICAgICAgIE9wSW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
KSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fub25pY2FsaXplTG9j
YWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAg
ICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBtX2dyYXBo
LmNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0g
VGhyZWFkZWRDUFM7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjI1
LDEzICsxMjI1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBGbHVzaCBzdG9yZSBlbGltaW5hdGlv
biBpbiBTU0EgZm9ybS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NDI5Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgc2lsbHkgdGhhdCB3ZSBwdW50
IG9uIGZsdXNoLWVsaW1pbmF0aW5nIGhlcmUuIFdlIGRvbid0IHJlYWxseQorICAgICAgICAgICAg
ICAgIC8vIG5lZWQgY2hpbGQxIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA1
MjEKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5v
ZGUqIHJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYg
KHJlcGxhY2VtZW50LT5vcCgpICE9IFNldExvY2FsKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2NTk0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzMsNiArNjczLDc3IEBAIHZvaWQgR3JhcGg6OmluaXRpYWxpemVOb2RlT3duZXJz
KCkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGFn
cyBmbGFncykKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUo
KTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPmNsZWFy
RmxhZ3MoZmxhZ3MpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgpLT5j
bGVhckZsYWdzKGZsYWdzKTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZsdXNo
ZWRMb2NhbE9wc0FuYWx5emVyIHsKK3B1YmxpYzoKKyAgICBGbHVzaGVkTG9jYWxPcHNBbmFseXpl
cihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYW5hbHl6ZSgpCisgICAgeworICAgICAgICBtX2dyYXBoLmNsZWFyRmxh
Z3NPbkFsbE5vZGVzKE5vZGVJc0ZsdXNoZWQpOworICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNo
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVz
aGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5m
bGFncygpICYgTm9kZUlzRmx1c2hlZCk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElM
RFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPm1lcmdlRmxhZ3MoTm9kZUlzRmx1c2hlZCkpCisg
ICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBh
ZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBt
X2dyYXBoOworICAgIFZlY3RvcjxOb2RlKiwgMTAwPiBtX3dvcmtsaXN0OworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgR3JhcGg6OmNvbXB1dGVJc0ZsdXNoZWQoKQorewor
ICAgIEFTU0VSVChtX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgIEZsdXNoZWRMb2NhbE9wc0Fu
YWx5emVyIGFuYWx5emVyKCp0aGlzKTsKKyAgICBhbmFseXplci5hbmFseXplKCk7Cit9CisKIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNv
ZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNjU5NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc4MCw4ICs3ODAsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52
YWxpZGF0ZUNGRygpOwogICAgIAorICAgIHZvaWQgY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZUZs
YWdzIGZsYWdzKTsKKyAgICAKICAgICB2b2lkIGNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgdm9p
ZCBpbml0aWFsaXplTm9kZU93bmVycygpOworICAgIHZvaWQgY29tcHV0ZUlzRmx1c2hlZCgpOwog
ICAgIAogICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY1Nyw3ICsxNjU3LDYgQEAgcHVibGljOgogICAgIHVuaW9u
IHsKICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQ7CiAgICAgICAgIEJhc2ljQmxvY2sqIG93bmVy
OwotICAgICAgICBib29sIG5lZWRzQmFycmllcjsKICAgICB9IG1pc2M7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNjU5
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBAQCB2b2lkIGR1bXBOb2RlRmxhZ3MoUHJpbnRTdHJl
YW0mIGFjdHVhbE91CiAgICAgaWYgKCEoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJDYW5FeGl0Iik7CiAgICAgCisgICAgaWYgKGZsYWdzICYgTm9k
ZUlzRmx1c2hlZCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiSXNGbHVzaGVkIik7CisgICAg
CiAgICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAgICAgaWYgKCFzdHJpbmcu
bGVuZ3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5PiIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNjU5NDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw2ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICNkZWZp
bmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgICAgICAgICAgMHg0MDAwCiAKICNkZWZpbmUgTm9k
ZUlzU3RhdGljQ29uc3RhbnQgICAgICAgICAgICAgMHg4MDAwIC8vIFVzZWQgb25seSBieSB0aGUg
cGFyc2VyLCB0byBkZXRlcm1pbmUgaWYgYSBjb25zdGFudCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBo
ZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQgcGFyc2UtdGltZS4KKyNkZWZpbmUgTm9kZUlzRmx1c2hl
ZCAgICAgICAgICAgICAgICAgICAweDEwMDAwIC8vIFVzZWQgYnkgR3JhcGg6OmNvbXB1dGVJc0Zs
dXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUgYmFja3dhcmRzLXJl
YWNoYWJsZSBmcm9tIGEgRmx1c2guCiAKIHR5cGVkZWYgdWludDMyX3QgTm9kZUZsYWdzOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDI0ICs1Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGlu
Zy4gTmVlZCB0byBkbyB0aGlzIHdoaWxlIHRoZQotICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3Rp
bGwgaW50YWN0LgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBGbHVzaCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRh
a2VMYXN0KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMo
bm9kZSkpOwotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9k
ZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5jb21w
dXRlSXNGbHVzaGVkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1cGxp
Y2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAg
IC8vIHdlIHRyYW5zZm9ybToKQEAgLTE1OCw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhp
IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGJvb2wgaXNGbHVzaGVkID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9k
ZSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAhIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9uVHJpdmlhbFBo
aXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewpAQCAtMzM0LDcgKzMxNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgp
IHx8ICEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKENoZWNrKTsKQEAgLTQ3NiwyMiArNDU5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKLSAgICAg
ICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAg
IGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgSW5zZXJ0
aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2Fs
T3BzOwotICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogICAgIGJv
b2wgbV9jaGFuZ2VkOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZl
cnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMuanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVycmVkLWlu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBiYXIoZikgeworICAgIHRocm93IGY7Cit9CisK
K25vSW5saW5lKGJhcik7CisKK3ZhciBzaG91bGRDb250aW51ZSA9IHRydWU7CisKK2Z1bmN0aW9u
IGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICB3aGlsZSAoc2hvdWxkQ29udGludWUp
IHsKKyAgICAgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgfQorfQorCitu
b0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0
cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRjaCAoZikgeworICAgICAgICB2YXIgcmVz
dWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworICAg
IH0KK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0
ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtd2l0aC1vc3ItZW50cnkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1s
b29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtd2l0aC1vc3ItZW50cnkuanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxv
b3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy13aXRoLW9zci1lbnRyeS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBiYXIo
ZikgeworICAgIGlmICgrK2NvdW50ID49IDEwMDAwKQorICAgICAgICB0aHJvdyBmOworfQorCitu
b0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7Cisg
ICAgZm9yICg7OykgeworICAgICAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAg
ICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3RyeSB7CisgICAgZm9vKDQyKTsKK30gY2F0Y2gg
KGYpIHsKKyAgICB2YXIgcmVzdWx0ID0gZigpOworICAgIGlmIChyZXN1bHQgIT0gNDMpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1j
YXB0dXJlZC12YXJpYWJsZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2lu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBiYXIoZikgeworICAgIHRocm93IGY7Cit9CisK
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0pOwor
ICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkpOworICAgIH0gY2F0Y2ggKGYpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBpICsgMSkKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiAr
IHJlc3VsdDsKKyAgICB9Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdHJpY2t5LWluZGlyZWN0bHktaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMt
Y2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhl
LWxvb3AuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy90cmlja3ktaW5kaXJlY3RseS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0
dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9v
cC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
dHJpY2t5LWluZGlyZWN0bHktaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVy
ZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3Au
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAordmFyIGNvdW50ID0gMDsKKworZnVu
Y3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3VudCA8IDEwMCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBmdXp6KGEpIHsKKyAgICByZXR1cm4gYSAhPSB0cnVlOworfQorCitmdW5jdGlvbiBmb28o
YSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgdmFyIHkgPSBhICsgMjsKKyAgICB2YXIgZiA9
IChmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0pOworICAgIHdoaWxlIChmdXp6KHkpKSB7CisgICAg
ICAgIGJhcihmKTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAgIGZvbyhpKTsKKyAgICB9IGNh
dGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAi
ICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNl
cy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10
aGUtbG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3RyaWNreS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJp
YWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWlu
ZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3Jl
YXRlcy10aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzMgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAg
aWYgKCsrY291bnQgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBjb3VudCA9IDA7CisgICAg
dGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIHNob3VsZENvbnRpbnVlID0gdHJ1
ZTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHZhciBmID0g
KGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgd2hpbGUgKHNob3VsZENvbnRpbnVlKSB7
CisgICAgICAgIGJhcihmKTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAgIGZvbyhpKTsKKyAg
ICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9y
IGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1j
YXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUt
bG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNy
ZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWluZmluaXRlLWxvb3At
dGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1v
dXRzaWRlLXRoZS1sb29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKK3ZhciBj
b3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsrY291bnQgPCAxMDApCisg
ICAgICAgIHJldHVybjsKKyAgICBjb3VudCA9IDA7CisgICAgdGhyb3cgZjsKK30KKworbm9Jbmxp
bmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHZh
ciBmID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgZm9yICg7OykgeworICAgICAg
ICBiYXIoZik7CisgICAgfQorfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBjYXRj
aCAoZikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9
IGkgKyAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiAr
IGkgKyAiOiAiICsgcmVzdWx0OworICAgIH0KK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQt
dmFyaWFibGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdHJpY2t5LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJp
Y2t5LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBiYXIo
ZikgeworICAgIGlmICgrK2NvdW50IDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgY291bnQg
PSAwOworICAgIHRocm93IGY7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhh
KSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJhcihmdW5j
dGlvbigpIHsgcmV0dXJuIHg7IH0pOworICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkp
OworICAgIH0gY2F0Y2ggKGYpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSBpICsgMSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBmb3IgaSA9ICIgKyBpICsgIjogIiArIHJlc3VsdDsKKyAgICB9Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227313</attachid>
            <date>2014-03-20 12:02:17 -0700</date>
            <delta_ts>2014-03-20 12:50:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28726</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1OTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBA
CisyMDE0LTAzLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiBydW5uaW5nIHRoaXMgSlMg
Y29tcHJlc3Npb24gZGVtbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBNYWtlIHN1cmUgdGhhdCB3ZSBmbHVzaCB0aGluZ3MgYXMgaWYgd2Ug
d2VyZSBhdCBhIHRlcm1pbmFsLCBpZiB3ZSBhcmUgYXQgYSBibG9jayB3aXRoCisgICAgICAgIG5v
IGZvcndhcmQgZWRnZXMuIFRoaXMgZml4ZXMgaW5maW5pdGVseSBsb29weSBjb2RlIHdpdGggY2Fw
dHVyZWQgdmFyaWFibGVzLgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0IHRoZSBDRkcgc2ltcGxp
ZmllciBhZGRzIGV4cGxpY2l0IGZsdXNoZXMgd2hlbmV2ZXIgaXQgamV0dGlzb25zIGEgYmxvY2su
CisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHNvIHRoYXQgTm9kZUlzRmx1c2hlZCBpcyBhIHRo
aW5nLiBQcmV2aW91c2x5IG9ubHkgU1NBIHVzZWQgaXQgYW5kIGl0IGNvbXB1dGVkCisgICAgICAg
IGl0IGJ5IGl0c2VsZi4gTm93IGl0J3MganVzdCB0aGVyZS4KKyAgICAgICAgCisgICAgICAgIEFk
ZCBhIGJ1bmNoIG9mIHRlc3RzLiBBbGwgb2YgdGhlbSBwcmV2aW91c2x5IGVpdGhlciBjcmFzaGVk
IG9yIHJldHVybmQgYmFkIG91dHB1dCBkdWUKKyAgICAgICAgdG8gbWVtb3J5IGNvcnJ1cHRpb24u
CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzQ2FwdHVyZWQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclJldHVybik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoSWZUZXJtaW5hbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmJyYW5jaERhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRp
b25QaGFzZTo6a2VlcE9wZXJhbmRBbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFk
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y29tcHV0ZUlzRmx1
c2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6YWRkRmx1c2hl
ZExvY2FsT3ApOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmFkZEZs
dXNoZWRMb2NhbEVkZ2UpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckZsYWdzT25BbGxOb2Rl
cyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZUZsYWdzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkdW1w
Tm9kZUZsYWdzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUZsYWdzLmg6CisgICAgICAgICogZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVy
c2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXRlc3Qt
bG9vcC5qczogQWRkZWQuCisgICAgICAgIChJbm5lci50aGlzLmRvU3R1ZmYpOgorICAgICAgICAo
SW5uZXIpOgorICAgICAgICAoZm9vLmlubmVyLmlzRG9uZSk6CisgICAgICAgIChmb28pOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0
dXJlZC12YXJpYWJsZXMuanM6IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6
CisgICAgICAgIChub0lubGluZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2luZmluaXRlLWxv
b3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1iZWZvcmUtdGhyb3dpbmcuanM6IEFkZGVk
LgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChub0lubGluZSk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZh
cmlhYmxlcy1idXQtdGhleS1kby1ub3QtZXNjYXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6
CisgICAgICAgIChmb28pOgorICAgICAgICAobm9JbmxpbmUpOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtd2l0aC1vc3It
ZW50cnkuanM6IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAg
IChub0lubGluZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11
c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKG5vSW5saW5lKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdHJp
Y2t5LWluZGlyZWN0bHktaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQt
dmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanM6
IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZ1enopOgorICAgICAgICAoZm9vLmYp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdHJpY2t5LWluZmVycmVk
LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10
aGUtYWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6
CisgICAgICAgIChmb28uZik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1j
cmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhlLWxvb3AuanM6IEFkZGVkLgorICAgICAg
ICAoYmFyKToKKyAgICAgICAgKGZvby5mKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJs
ZXMuanM6IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChu
b0lubGluZSk6CisKIDIwMTQtMDMtMjAgIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtBUk02NF0gRml4IGFzc2VtYmxlciBidWlsZCBpc3N1ZXMgYW5kIGFk
ZCBjYWNoZUZsdXNoIHN1cHBvcnQgZm9yIExpbnV4CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTY1OTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0MzksOCArMjQzOSw2IEBAIGJvb2wgQ29kZUJsb2NrOjppc0NhcHR1cmVkKFZpcnR1YWxSZWdp
c3QKICAgICAvLyBEaXR0byBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgaWYgKHVzZXNB
cmd1bWVudHMoKSAmJiBvcGVyYW5kID09IGFyZ3VtZW50c1JlZ2lzdGVyKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gRGl0dG8gZm9yIHRoZSBhcmd1bWVudHMgb2JqZWN0LgogICAg
IGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw3ICs0ODEsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRp
b24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIGZsdXNo
KElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkpCiAgICAgewogICAgICAgICBpbnQg
bnVtQXJndW1lbnRzOwpAQCAtNTAyLDE2ICs1MDIsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHZvaWQgZmx1c2hBbGxBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlc0lu
SW5saW5lU3RhY2soKQorICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewogICAgICAg
ICBmb3IgKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkgPSBtX2lubGluZVN0YWNr
VG9wOyBpbmxpbmVTdGFja0VudHJ5OyBpbmxpbmVTdGFja0VudHJ5ID0gaW5saW5lU3RhY2tFbnRy
eS0+bV9jYWxsZXIpCiAgICAgICAgICAgICBmbHVzaChpbmxpbmVTdGFja0VudHJ5KTsKICAgICB9
CiAKLSAgICB2b2lkIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKQorICAgIHZv
aWQgZmx1c2hGb3JSZXR1cm4oKQogICAgIHsKICAgICAgICAgZmx1c2gobV9pbmxpbmVTdGFja1Rv
cCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hJZlRlcm1pbmFsKFN3aXRjaERhdGEmIGRh
dGEpCisgICAgeworICAgICAgICBpZiAoZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkg
PiBtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBpZiAoZGF0YS5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5k
ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsKCk7CisgICAgfQogCiAgICAgLy8gTk9URTogT25seSB1c2UgdGhp
cyB0byBjb25zdHJ1Y3QgY29uc3RhbnRzIHRoYXQgYXJpc2UgZnJvbSBub24tc3BlY3VsYXRpdmUK
ICAgICAvLyBjb25zdGFudCBmb2xkaW5nLiBJLmUuIGNyZWF0aW5nIGNvbnN0YW50cyB1c2luZyB0
aGlzIGlmIHdlIGhhZCBjb25zdGFudApAQCAtNzIwLDYgKzczMyw5IEBAIHByaXZhdGU6CiAKICAg
ICBCcmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRha2VuLCB1bnNpZ25lZCBub3RUYWtl
bikKICAgICB7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJyYW5jaGVzIG9yaWdpbmF0aW5n
IGZyb20gYnl0ZWNvZGUgYWx3YXlzIGhhdmUgYSBmYWxsLXRocm91Z2guIFdlCisgICAgICAgIC8v
IHVzZSB0aGlzIGFzc3VtcHRpb24gdG8gYXZvaWQgY2hlY2tpbmcgZm9yIHRoZSBjcmVhdGlvbiBv
ZiB0ZXJtaW5hbCBibG9ja3MuCisgICAgICAgIEFTU0VSVCgodGFrZW4gPiBtX2N1cnJlbnRJbmRl
eCkgfHwgKG5vdFRha2VuID4gbV9jdXJyZW50SW5kZXgpKTsKICAgICAgICAgQnJhbmNoRGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9icmFuY2hEYXRhLmFkZCgpOwogICAgICAgICAqZGF0YSA9IEJyYW5j
aERhdGE6OndpdGhCeXRlY29kZUluZGljZXModGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAgcmV0
dXJuIGRhdGE7CkBAIC0yNzI2LDcgKzI3NDIsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIC8vID09PSBCbG9jayB0ZXJtaW5hdG9ycy4gPT09CiAK
ICAgICAgICAgY2FzZSBvcF9qbXA6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zm
c2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKKyAgICAgICAgICAgICAgICBmbHVzaEZvclRl
cm1pbmFsKCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbXAp
OwogICAgICAgICB9CkBAIC0zMDA3LDYgKzMwMjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4
KGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KQEAgLTMwMjYsNiArMzA0NSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0
aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5t
aW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmbHVzaElmVGVy
bWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRh
KSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkp
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAgICB9CkBA
IC0zMDQ1LDEyICszMDY1LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAg
ICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtub3duU3Ry
aW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dp
dGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfc3Ry
aW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgotICAgICAgICAgICAgZmx1
c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOworICAgICAgICAgICAgZmx1c2hGb3JS
ZXR1cm4oKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSk7
CiAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFs
dWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
LCBJbW1lZGlhdGVTZXQpOwpAQCAtMzA3OCwyMCArMzA5OSwyMCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQp
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZW5kOgotICAgICAgICAgICAgZmx1c2hB
cmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOworICAgICAgICAgICAgZmx1c2hGb3JSZXR1
cm4oKTsKICAgICAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAK
ICAgICAgICAgY2FzZSBvcF90aHJvdzoKICAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKLSAg
ICAgICAgICAgIGZsdXNoQWxsQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXNJbklubGluZVN0
YWNrKCk7CisgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFVucmVhY2hhYmxlKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93KTsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoVGhyb3dSZWZlcmVuY2VFcnJvcik7Ci0gICAgICAgICAgICBmbHVz
aEFsbEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzSW5JbmxpbmVTdGFjaygpOworICAgICAg
ICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChVbnJlYWNo
YWJsZSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwog
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2NTk0MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MywxNiArMjYzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJyYW5jaC0+b3JpZ2luLCBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRB
bGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBOb2Rl
T3JpZ2luIG5vZGVPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgTm9kZSogbGl2ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVUeXBlIG5v
ZGVUeXBlOworICAgICAgICBpZiAobGl2ZW5lc3NOb2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hl
ZCkKKyAgICAgICAgICAgIG5vZGVUeXBlID0gRmx1c2g7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG5vZGVUeXBlID0gUGhhbnRvbUxvY2FsOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgK
LSAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIG5vZGVPcmlnaW4s
IAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIG5vZGVUeXBlLCBub2RlT3JpZ2luLCAK
ICAgICAgICAgICAgIE9wSW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxz
SW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAg
ICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBjb21wdXRlSXNG
bHVzaGVkKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BT
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4Miw5ICs0ODMsNDMgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21w
dXRlSXNGbHVzaGVkKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY2xlYXJGbGFnc09uQWxsTm9k
ZXMoTm9kZUlzRmx1c2hlZCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9w
V29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVk
TG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVJc0ZsdXNoZWQpOworICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERS
RU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUtPm1lcmdlRmxhZ3MoTm9kZUlzRmx1c2hlZCkpCisgICAgICAgICAgICBt
X2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKworICAgIHZvaWQg
YWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgYWRk
Rmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0KKwogICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNr
OwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKKyAgICBW
ZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIAogYm9vbCBw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2NTk0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjI1
LDEzICsxMjI1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBGbHVzaCBzdG9yZSBlbGltaW5hdGlv
biBpbiBTU0EgZm9ybS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NDI5Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgc2lsbHkgdGhhdCB3ZSBwdW50
IG9uIGZsdXNoLWVsaW1pbmF0aW5nIGhlcmUuIFdlIGRvbid0IHJlYWxseQorICAgICAgICAgICAg
ICAgIC8vIG5lZWQgY2hpbGQxIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA1
MjEKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5v
ZGUqIHJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYg
KHJlcGxhY2VtZW50LT5vcCgpICE9IFNldExvY2FsKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2NTk0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzMsNiArNjczLDE5IEBAIHZvaWQgR3JhcGg6OmluaXRpYWxpemVOb2RlT3duZXJz
KCkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVGbGFn
cyBmbGFncykKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUo
KTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPmNsZWFy
RmxhZ3MoZmxhZ3MpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgpLT5j
bGVhckZsYWdzKGZsYWdzKTsKKyAgICB9Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFw
aDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3Ig
aXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjU5NDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MCw2ICs3ODAs
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlQ0ZHKCk7CiAgICAgCisgICAg
dm9pZCBjbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlRmxhZ3MgZmxhZ3MpOworICAgIAogICAgIHZv
aWQgY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY1
OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NTcsNyArMTY1Nyw2IEBAIHB1YmxpYzoKICAgICB1bmlvbiB7CiAgICAgICAgIE5v
ZGUqIHJlcGxhY2VtZW50OwogICAgICAgICBCYXNpY0Jsb2NrKiBvd25lcjsKLSAgICAgICAgYm9v
bCBuZWVkc0JhcnJpZXI7CiAgICAgfSBtaXNjOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTY1OTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDAsNiArMTAwLDkgQEAgdm9pZCBkdW1wTm9kZUZsYWdzKFByaW50U3RyZWFtJiBhY3R1YWxPdQog
ICAgIGlmICghKGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiQ2FuRXhpdCIpOwogICAgIAorICAgIGlmIChmbGFncyAmIE5vZGVJc0ZsdXNoZWQpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgIklzRmx1c2hlZCIpOworICAgIAogICAgIENTdHJpbmcg
c3RyaW5nID0gb3V0LnRvQ1N0cmluZygpOwogICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQogICAg
ICAgICBhY3R1YWxPdXQucHJpbnQoIjxlbXB0eT4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjZGVmaW5lIE5vZGVSZWxldmFu
dFRvT1NSICAgICAgICAgICAgICAgIDB4NDAwMAogCiAjZGVmaW5lIE5vZGVJc1N0YXRpY0NvbnN0
YW50ICAgICAgICAgICAgIDB4ODAwMCAvLyBVc2VkIG9ubHkgYnkgdGhlIHBhcnNlciwgdG8gZGV0
ZXJtaW5lIGlmIGEgY29uc3RhbnQgYXJvc2Ugc3RhdGljYWxseSBhbmQgaGVuY2UgY291bGQgYmUg
Zm9sZGVkIGF0IHBhcnNlLXRpbWUuCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQgICAgICAgICAgICAg
ICAgICAgMHgxMDAwMCAvLyBVc2VkIGJ5IEdyYXBoOjpjb21wdXRlSXNGbHVzaGVkKCksIHdpbGwg
dGVsbCB5b3Ugd2hpY2ggbG9jYWwgbm9kZXMgYXJlIGJhY2t3YXJkcy1yZWFjaGFibGUgZnJvbSBh
IEZsdXNoLgogCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2
aXNpb24gMTY1OTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNSArNTcsNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8g
dGhpcyB3aGlsZSB0aGUKLSAgICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
Rmx1c2gpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGFk
ZEZsdXNoZWRMb2NhbE9wKG5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC50YWtlTGFzdCgpOwotICAg
ICAgICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAg
ICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRM
b2NhbEVkZ2UpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAvLyBFbGltaW5hdGUgYWxs
IGR1cGxpY2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CiAg
ICAgICAgIC8vIHdlIHRyYW5zZm9ybToKICAgICAgICAgLy8KQEAgLTE1OCw3ICsxMzksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgaXNGbHVzaGVkID0gbV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAh
IShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghbm9uVHJpdmlhbFBoaXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewpAQCAtMzM0LDcg
KzMxNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENoZWNrKTsKQEAgLTQ3NiwyMiArNDU3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9w
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3Bz
LmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2Rl
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKLSAgICB9
Ci0gICAgCiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwotICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1fZmx1c2hlZExvY2FsT3BzOwotICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0OwogICAgIGJvb2wgbV9jaGFuZ2VkOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXRlc3QtbG9vcC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FjdGl2YXRpb24tdGVzdC1s
b29wLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9hY3RpdmF0aW9uLXRlc3QtbG9vcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBA
CitmdW5jdGlvbiBJbm5lcigpIHsKKyAgICB0aGlzLmkgPSAwOworICAgIHRoaXMuZG9TdHVmZiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmkrKzsKKyAgICAgICAgaWYgKHRoaXMuaSA+IDEw
MDAwKQorICAgICAgICAgICAgdGhpcy5pc0RvbmUoKTsKKyAgICB9Cit9CisKK3ZhciBmb28gPSBm
dW5jdGlvbigpIHsKKyAgICB2YXIgaW5uZXIgPSBuZXcgSW5uZXIoKTsKKyAgICB2YXIgZG9uZSA9
IGZhbHNlOworICAgIGlubmVyLmlzRG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkb25lID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB2YXIgdmFsID0gaW5u
ZXIuZG9TdHVmZigpOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworZm9vKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2luZmVycmVkLWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVycmVk
LWluZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXJyZWQtaW5maW5p
dGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgdGhyb3cgZjsKK30KKworbm9J
bmxpbmUoYmFyKTsKKwordmFyIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKworZnVuY3Rpb24gZm9v
KGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgewor
ICAgICAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB9Cit9CisKK25vSW5s
aW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7
CisgICAgICAgIGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBmKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxv
b3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1iZWZvcmUtdGhyb3dpbmcuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29w
LXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYmVmb3JlLXRocm93aW5nLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZpbml0ZS1sb29w
LXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYmVmb3JlLXRocm93aW5nLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihm
KSB7CisgICAgaWYgKCsrY291bnQgPCAxMCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gZigpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0IGluc2llIGNsb3N1cmUgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY291bnQgPSAwOworICAgIHRocm93IGY7Cit9CisK
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0pOwor
ICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKGkpOworICAgIH0gY2F0Y2ggKGYpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBpICsgMSkKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiAr
IHJlc3VsdDsKKyAgICB9Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWJ1dC10aGV5
LWRvLW5vdC1lc2NhcGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYnV0
LXRoZXktZG8tbm90LWVzY2FwZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFi
bGVzLWJ1dC10aGV5LWRvLW5vdC1lc2NhcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MyBAQAordmFyIGNvdW50ID0gMDsKKworZnVuY3Rpb24gYmFyKGYpIHsKKyAgICBpZiAoKytjb3Vu
dCA8IDEwKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW5zaWUgY2xv
c3VyZSBmb3IgaSA9ICIgKyBpICsgIjogIiArIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjb3VudCA9IDA7CisgICAgdGhyb3cgImRvbmUiOworfQorCitub0lubGluZShiYXIp
OworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgZm9yICg7Oykg
eworICAgICAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB9Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRy
eSB7CisgICAgICAgIGZvbyhpKTsKKyAgICB9IGNhdGNoIChkb25lKSB7CisgICAgICAgIGlmIChk
b25lICE9ICJkb25lIikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGV4Y2VwdGlvbjog
IiArIGRvbmU7CisgICAgfQorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy13aXRoLW9z
ci1lbnRyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy13aXRoLW9zci1l
bnRyeS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLXdpdGgtb3NyLWVu
dHJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK3ZhciBjb3VudCA9IDA7CisK
K2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsrY291bnQgPj0gMTAwMDApCisgICAgICAgIHRo
cm93IGY7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFy
IHggPSBhICsgMTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJhcihmdW5jdGlvbigpIHsgcmV0
dXJuIHg7IH0pOworICAgIH0KK30KKworbm9JbmxpbmUoZm9vKTsKKwordHJ5IHsKKyAgICBmb28o
NDIpOworfSBjYXRjaCAoZikgeworICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgaWYgKHJlc3Vs
dCAhPSA0MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxv
b3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1
cmVkLXZhcmlhYmxlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAg
dGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2
YXIgeCA9IGEgKyAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYmFyKGZ1bmN0aW9uKCkgeyBy
ZXR1cm4geDsgfSk7CisgICAgfQorfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgICBmb28oaSk7CisgICAgfSBj
YXRjaCAoZikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0
ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0g
IiArIGkgKyAiOiAiICsgcmVzdWx0OworICAgIH0KK30KKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5kaXJlY3RseS1pbmZlcnJlZC1pbmZpbml0ZS1s
b29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRp
b24tb3V0c2lkZS10aGUtbG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmRpcmVjdGx5LWluZmVycmVkLWluZmluaXRlLWxvb3At
dGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10aGUtYWN0aXZhdGlvbi1v
dXRzaWRlLXRoZS1sb29wLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy90cmlja3ktaW5kaXJlY3RseS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRo
YXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0
c2lkZS10aGUtbG9vcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACit2YXIgY291
bnQgPSAwOworCitmdW5jdGlvbiBiYXIoZikgeworICAgIGlmICgrK2NvdW50IDwgMTApCisgICAg
ICAgIHJldHVybjsKKyAgICBjb3VudCA9IDA7CisgICAgdGhyb3cgZjsKK30KKworbm9JbmxpbmUo
YmFyKTsKKworZnVuY3Rpb24gZnV6eihhKSB7CisgICAgcmV0dXJuIGEgIT0gdHJ1ZTsKK30KKwor
ZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHZhciB5ID0gYSArIDI7
CisgICAgdmFyIGYgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB3aGlsZSAoZnV6
eih5KSkgeworICAgICAgICBiYXIoZik7CisgICAgfQorfQorCitub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgICBmb28o
aSk7CisgICAgfSBjYXRjaCAoZikgeworICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAg
ICBpZiAocmVzdWx0ICE9IGkgKyAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworICAgIH0KK30KKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5mZXJyZWQtaW5maW5pdGUt
bG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0
aW9uLW91dHNpZGUtdGhlLWxvb3AuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5mZXJyZWQtaW5maW5pdGUtbG9vcC10aGF0LXVzZXMt
Y2FwdHVyZWQtdmFyaWFibGVzLWFuZC1jcmVhdGVzLXRoZS1hY3RpdmF0aW9uLW91dHNpZGUtdGhl
LWxvb3AuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3RyaWNreS1pbmZlcnJlZC1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJp
YWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBi
YXIoZikgeworICAgIGlmICgrK2NvdW50IDwgMTApCisgICAgICAgIHJldHVybjsKKyAgICBjb3Vu
dCA9IDA7CisgICAgdGhyb3cgZjsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIHNob3VsZENv
bnRpbnVlID0gdHJ1ZTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOwor
ICAgIHZhciBmID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfSk7CisgICAgd2hpbGUgKHNob3Vs
ZENvbnRpbnVlKSB7CisgICAgICAgIGJhcihmKTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAg
IGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29w
LXRoYXQtdXNlcy1jYXB0dXJlZC12YXJpYWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24t
b3V0c2lkZS10aGUtbG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNlcy1jYXB0dXJlZC12YXJp
YWJsZXMtYW5kLWNyZWF0ZXMtdGhlLWFjdGl2YXRpb24tb3V0c2lkZS10aGUtbG9vcC5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWlu
ZmluaXRlLWxvb3AtdGhhdC11c2VzLWNhcHR1cmVkLXZhcmlhYmxlcy1hbmQtY3JlYXRlcy10aGUt
YWN0aXZhdGlvbi1vdXRzaWRlLXRoZS1sb29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzEgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsrY291
bnQgPCAxMCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOwor
fQorCitub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSAr
IDE7CisgICAgdmFyIGYgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGJhcihmKTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAgICAgIGZvbyhpKTsK
KyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgIGlm
IChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
Zm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1pbmZpbml0ZS1sb29wLXRoYXQtdXNl
cy1jYXB0dXJlZC12YXJpYWJsZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQt
dmFyaWFibGVzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy90cmlja3ktaW5maW5pdGUtbG9vcC10aGF0LXVzZXMtY2FwdHVyZWQtdmFyaWFibGVz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK3ZhciBjb3VudCA9IDA7CisKK2Z1
bmN0aW9uIGJhcihmKSB7CisgICAgaWYgKCsrY291bnQgPCAxMCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNvdW50ID0gMDsKKyAgICB0aHJvdyBmOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgZm9yICg7OykgeworICAgICAg
ICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGZv
byk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHRyeSB7CisgICAg
ICAgIGZvbyhpKTsKKyAgICB9IGNhdGNoIChmKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gaSArIDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7CisgICAgfQorfQorCg==
</data>
<flag name="review"
          id="251561"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>