<?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>139439</bug_id>
          
          <creation_ts>2014-12-09 03:12:09 -0800</creation_ts>
          <short_desc>[MSE] Implement Append Error algorithm.</short_desc>
          <delta_ts>2015-02-06 14:14:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141320</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bartlomiej Gajda">b.gajda</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>b.gajda</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ltilve</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1053728</commentid>
    <comment_count>0</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-09 03:12:09 -0800</bug_when>
    <thetext>There is no place currently which executes &quot;3.5.1 Segment Parser Loop&quot; 
paragraph : 
&quot;6.1 If the first initialization segment flag is false, then run the end of stream algorithm with the error parameter set to &quot;decode&quot; and abort this algorithm.&quot;

Which means, no &apos;error&apos; event will be scheduled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053730</commentid>
    <comment_count>1</comment_count>
      <attachid>242905</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-09 03:15:52 -0800</bug_when>
    <thetext>Created attachment 242905
call endofstream on receive sample without first init flag v1

This is the initial patch of this. I&apos;m not sure what should be proper way to fail here as sometimes &apos;updateend&apos; came before &apos;error&apos; (from unknown reason) so I rejected that option. I&apos;m open to suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053811</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-12-09 09:09:33 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 242905 [details]
&gt; call endofstream on receive sample without first init flag v1

Doesn&apos;t this look like a spec bug, that MediaSource.endOfStream() is supposed to call the Append Error Algorithm (on SourceBuffer) without stating explicitly /which/ SourceBuffer is supposed to run the algorithm?  It&apos;s a little weird to pass in a SourceBuffer to MediaSource.streamEndedWithError().  After all, what if someone calls &quot;endOfStream(&apos;decode&apos;)&quot;?

Wouldn&apos;t it make more sense for the 3.5.1 - 6.1 step to call the Append Error Algorithm, which in turn calls the Stream Ended Algorithm (rather than vice versa)?

I filed &lt;https://www.w3.org/Bugs/Public/show_bug.cgi?id=27548&gt;. Lets see what they say.

&gt; This is the initial patch of this. I&apos;m not sure what should be proper way to
&gt; fail here as sometimes &apos;updateend&apos; came before &apos;error&apos; (from unknown reason)
&gt; so I rejected that option. I&apos;m open to suggestions.

There was a bug &lt;https://bugs.webkit.org/show_bug.cgi?id=138394&gt; about events from different GenericEventQueues being fired out of order. Is that change in your tree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054011</commentid>
    <comment_count>3</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-09 18:11:50 -0800</bug_when>
    <thetext>&gt; Doesn&apos;t this look like a spec bug, that MediaSource.endOfStream() is
&gt; supposed to call the Append Error Algorithm (on SourceBuffer) without
&gt; stating explicitly /which/ SourceBuffer is supposed to run the algorithm? 

&gt; After all, what if someone calls &quot;endOfStream(&apos;decode&apos;)&quot;?

While it&apos;s certainly not as clear as possible, I think this particular scenario - with calling endOfStream(&apos;decode&apos;) is well guarded by :

&quot;2.2 Methods / endOfStream
If the updating attribute equals true on any SourceBuffer in sourceBuffers, then throw an INVALID_STATE_ERR exception and abort these steps.&quot;

So in such case, we won&apos;t go into Append Error Algorithm, as we return early. 
And when SourceBuffer is not updating, then we won&apos;t go there as well, due to: 

&quot;2.4.7 If error is set to &quot;decode&quot;
   If updating equals true, then run the append error algorithm.&quot;

So it seems the only way to actually call it, is by manually calling end of stream algorithm(streamEndedWithError (not the best name anymore)) - which happens only if SourceBuffer calls it - hence this change.
 
I do agree however that this is a litle confusing. 

&gt; It&apos;s a little weird to pass in a SourceBuffer to MediaSource.streamEndedWithError().  

For now I could change it to, SourceBuffer calling :

(new) MediaSource::sourceBufferEndOfStreamDecodeError(SB* sb) {
 if (sb-&gt;updating()) // or ASSERT actually as it would be weird if called in different context
  sb-&gt;appendError()
 streamEndedWithError(&quot;decode&quot;);
}

So we would discard the default parameter. 
I think we could go with this hardcoded &quot;decode&quot; error design, as there is no &quot;network&quot; eos() inside SB.

This would work for now, as order of event would be the same from outside I guess, since &quot;decode&quot; endOfStream() path start with this &quot;append error&quot; check anyway.
Would that look better to You?

Also other places in SB which do streamEndedWithError(decode) shall use this new approach but in this patch I had not yet figured layout tests for each of those, so I thought I&apos;ll add them later.

&gt; Wouldn&apos;t it make more sense for the 3.5.1 - 6.1 step to call the Append
&gt; Error Algorithm, which in turn calls the Stream Ended Algorithm (rather than
&gt; vice versa)?

The easiest way would be if 3.5.1 6.1 would call both directly, as in 3.5.6 for example even though there is AppendError there is no `end of stream: decode`.

&gt; There was a bug &lt;https://bugs.webkit.org/show_bug.cgi?id=138394&gt; about
&gt; events from different GenericEventQueues being fired out of order. Is that
&gt; change in your tree?

It should be, but I&apos;ll check it out later. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054018</commentid>
    <comment_count>4</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-09 18:45:30 -0800</bug_when>
    <thetext>&gt; This would work for now, as order of event would be the same from outside I
&gt; guess, since &quot;decode&quot; endOfStream() path start with this &quot;append error&quot;
&gt; check anyway.

Scratch that idea - it would revers order of 
sourceended, error, updateend
to
error, updateend, sourceended,

and that would not be as in spec for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054746</commentid>
    <comment_count>5</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-11 20:40:06 -0800</bug_when>
    <thetext>Since bug in MSE spec. was resolved I thought of adding new patch, but I have problem what to do with streamEndedWithError in 

1. sourceBufferPrivateDidReceiveSample():
 around :
&quot;// 1.5.3 If the presentation timestamp or decode timestamp is less than the presentation start&quot;

since this was removed in editor&apos;s draft, as per bug: https://www.w3.org/Bugs/Public/show_bug.cgi?id=27487

2. sourceBufferPrivateDidReceiveRenderingError()
I&apos;m not sure do I understand how this is used.

3. sourceBufferPrivateDidEndStream()
Nobody uses it?

Aside from the places mentioned in change of spec, should I convert 2) &amp; 3) to appendError(true) ? Or leave it as they are?

As for 1) - I could drop it, but there is a bit of other wording issues there (in 3.5.8) which should be resolved, and that should be done probably after Jer Noble&apos;s patch : https://bugs.webkit.org/show_bug.cgi?id=139265
so I&apos;ll probably leave it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055598</commentid>
    <comment_count>6</comment_count>
      <attachid>243288</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-15 04:42:56 -0800</bug_when>
    <thetext>Created attachment 243288
appendError algorithm implemented

Since I&apos;ve changed it in other places as well I renamed this to &apos;Implement AppendError&apos;, as I think it&apos;s more fitting.

On it&apos;s own this patch is ok, but as I said, I did not change all of platform specific &quot;streamEndedWithError(decode...&quot; places, as I don&apos;t know in whichs cenario they are used. (and should it be with or without eos)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067175</commentid>
    <comment_count>7</comment_count>
      <attachid>243288</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-02-05 12:52:23 -0800</bug_when>
    <thetext>Comment on attachment 243288
appendError algorithm implemented

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

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1145
&gt; -    // 3.1. Verify the following properties. If any of the checks fail then run the end of stream
&gt; -    // algorithm with the error parameter set to &quot;decode&quot; and abort these steps.
&gt; +    // 3.1. Verify the following properties. If any of the checks fail then run the append error algorithm
&gt; +    // with the decode error parameter set to true and abort these steps.

The documentation changed, but I don&apos;t see a call to &quot;appendError(true)&quot; in this patch.  Is this an oversight?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067181</commentid>
    <comment_count>8</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-02-05 13:00:53 -0800</bug_when>
    <thetext>&gt; &gt; +    // 3.1. Verify the following properties. If any of the checks fail then run the append error algorithm
&gt; &gt; +    // with the decode error parameter set to true and abort these steps.
&gt; 
&gt; The documentation changed, but I don&apos;t see a call to &quot;appendError(true)&quot; in
&gt; this patch.  Is this an oversight?

It is called by SourceBuffer.cpp:941 in this patch:

if (!validateInitializationSegment(segment)) {
 941 appendError(true);

Checks in validation were not changed, only result of fail, which is checked in sourceBufferPrivateDidReceiveInitializationSegment, so I changed previous streamEndedWithError call.

I can add comment pointing to that line if You wish?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067186</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-02-05 13:06:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; +    // 3.1. Verify the following properties. If any of the checks fail then run the append error algorithm
&gt; &gt; &gt; +    // with the decode error parameter set to true and abort these steps.
&gt; &gt; 
&gt; &gt; The documentation changed, but I don&apos;t see a call to &quot;appendError(true)&quot; in
&gt; &gt; this patch.  Is this an oversight?
&gt; 
&gt; It is called by SourceBuffer.cpp:941 in this patch:
&gt; 
&gt; if (!validateInitializationSegment(segment)) {
&gt;  941 appendError(true);
&gt; 
&gt; Checks in validation were not changed, only result of fail, which is checked
&gt; in sourceBufferPrivateDidReceiveInitializationSegment, so I changed previous
&gt; streamEndedWithError call.
&gt; 
&gt; I can add comment pointing to that line if You wish?

Ah, I see now. It might be worthwhile pulling the comment starting with &apos;3.1. Verify...&apos; up before line 941, so it&apos;s clear what&apos;s going on. (And marking the comment inside validateInitializationSegment as &apos;(ctd)&apos;.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067213</commentid>
    <comment_count>10</comment_count>
      <attachid>246129</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-02-05 14:25:54 -0800</bug_when>
    <thetext>Created attachment 246129
appendError algorithm v2

- reordered comments
- added/changed few missing comments
- checked &apos;Append Error Algorithm&apos;, and &apos;Initialization Segment Received&apos; versus 09 January 2015 Editor Draft version. Added few FIXME&apos;s for missing (in that particular version) parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067255</commentid>
    <comment_count>11</comment_count>
      <attachid>246129</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 16:57:48 -0800</bug_when>
    <thetext>Comment on attachment 246129
appendError algorithm v2

Clearing flags on attachment: 246129

Committed r179725: &lt;http://trac.webkit.org/changeset/179725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067256</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 16:57:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067286</commentid>
    <comment_count>13</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-02-05 19:45:32 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; All reviewed patches have been landed.  Closing bug.
This broke 2 tests.
https://build.webkit.org/results/Apple%20Yosemite%20Release%20WK2%20(Tests)/r179736%20(2610)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067290</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 19:49:36 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 141320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067343</commentid>
    <comment_count>15</comment_count>
      <attachid>246160</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-02-06 05:35:16 -0800</bug_when>
    <thetext>Created attachment 246160
appendError algorithm v2 + updated layouttests

I &apos;ve updated those two tests to correctly expect both &apos;error&apos; and &apos;updateend&apos; before &apos;sourceended&apos; as per spec. (previously there was no &apos;updateend&apos; before &apos;sourceended&apos;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067423</commentid>
    <comment_count>16</comment_count>
      <attachid>246160</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 14:14:28 -0800</bug_when>
    <thetext>Comment on attachment 246160
appendError algorithm v2 + updated layouttests

Clearing flags on attachment: 246160

Committed r179762: &lt;http://trac.webkit.org/changeset/179762&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067424</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 14:14:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242905</attachid>
            <date>2014-12-09 03:15:52 -0800</date>
            <delta_ts>2014-12-15 04:42:56 -0800</delta_ts>
            <desc>call endofstream on receive sample without first init flag v1</desc>
            <filename>patch_media_segment_when_no_init.txt</filename>
            <type>text/plain</type>
            <size>9022</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxM2ZlYTUzLi5kNzY0OTIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMTIt
MDkgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIFNlbmRpbmcgbWVkaWEgc2VnbWVudCB3aXRob3V0IGFueSBpbml0IHNlZ21lbnQgc2hvdWxk
IGNhbGwgZW5kT2ZTdHJlYW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzk0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJZiBTb3VyY2UgQnVmZmVyIGhhcyBub3QgcmVjZWl2ZWQgZmlyc3QgaW5pdCBz
ZWdtZW50LCB0aGVuIGl0IHNoYWxsIGNhbGwgZW5kT2ZTdHJlYW0gYWZ0ZXIgcmVjZWl2aW5nCisg
ICAgICAgIE1lZGlhIFNlZ21lbnQsIGFzIHBlciBNZWRpYSBTb3VyY2Ugc3BlYy4gKGZyb20gMTcg
SnVseSAyMDE0KSBpbiBwYXJhZ3JhcGggMy41LjEgcG9pbnQgNi4xLgorICAgICAgICBBZGRlZCB0
ZXN0IHdoaWNoIGFmdGVyIGNyZWF0aW5nIFNvdXJjZUJ1ZmZlciBzZW5kcyBtZWRpYSBzYW1wbGUs
IHdpdGhvdXQgYW55IGluaXQgc2VnbWVudHMuCisKKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5pdC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
YXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWw6IEFkZGVkLgorCiAyMDE0LTEy
LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAg
ICAgW1NvdXBdW0N1cmxdIEhUVFAgaGVhZGVyIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBs
YXRpbjEsIG5vdCBVVEYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBl
bmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50
LXdpdGhvdXQtaW5pdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACisKK1JVTih2aWRlby5z
cmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVO
KHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVj
cz1tb2NrIikpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5U
KGVycm9yKQorRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQu
aHRtbCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5k
LW1lZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjcxNmU5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1p
bml0Lmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorICAgIDx0aXRsZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9
Im1vY2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlk
ZW8tdGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAg
IHZhciBzb3VyY2VCdWZmZXI7CisgICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciB3YXNFcnJv
ciA9IGZhbHNlOworCisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFs
cy5pbml0aWFsaXplTW9ja01lZGlhU291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1l
ZGlhU291cmNlKCk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9wZW4n
LCBzb3VyY2VPcGVuLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJM
LmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc291cmNl
T3BlbigpIHsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVm
ZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpJyk7CisKKyAgICAgICAgLy8gTm90ZTogSW4g
bm9ybWFsIHVzYWdlIHdlIHNob3VsZCBzZW5kIHRoaXMgbGluZSwgYnV0IHRoaXMgdGVzdHMgd2hh
dCBoYXBwZW5zIHdpdGhvdXQuCisgICAgICAgIC8vIGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDAs
IFttYWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURFTyldKTsKKworICAgICAgICBz
YW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAs
IDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwg
MSwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgIF0pOworCisgICAgICAgIC8vIE5v
dGU6IGlmIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgc2FtcGxlIHdpdGhvdXQgaW5pdCwgaXQgd2ls
bCBnbyB0aHJvdWdoIFNlZ21lbnQgUGFyc2VyIExvb3AKKyAgICAgICAgLy8gaWYgbm90LCB3ZSB3
aWxsIHJlY2VpdmUgdXBkYXRlIGV2ZW50IGFzIHBhcnQgb2YgQ29kZWQgRnJhbWUgUHJvY2Vzc2lu
ZworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICdlcnJvcicsIG51bGwsIHRy
dWUsIHRydWUpOworICAgICAgICBmYWlsVGVzdEluKDIwMDApOworCisgICAgICAgIHJ1bignc291
cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx2aWRlbz48L3ZpZGVv
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY4NDI3ODQuLjYzMzhiZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxNC0xMi0wOSAgQmFydGxvbWllaiBHYWpkYSAgPGIu
Z2FqZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW01TRV0gU2VuZGluZyBtZWRpYSBzZWdtZW50
IHdpdGhvdXQgYW55IGluaXQgc2VnbWVudCBzaG91bGQgY2FsbCBlbmRPZlN0cmVhbS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQzOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIFNvdXJjZSBCdWZm
ZXIgaGFzIG5vdCByZWNlaXZlZCBmaXJzdCBpbml0IHNlZ21lbnQsIHRoZW4gaXQgc2hhbGwgY2Fs
bCBlbmRPZlN0cmVhbSBhZnRlciByZWNlaXZpbmcKKyAgICAgICAgTWVkaWEgU2VnbWVudCwgYXMg
cGVyIE1lZGlhIFNvdXJjZSBzcGVjLiBpbiBwYXJhZ3JhcGggMy41LjEgcG9pbnQgNi4xLgorCisg
ICAgICAgIFRlc3Q6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlh
LXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3Vy
Y2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OnN0cmVh
bUVuZGVkV2l0aEVycm9yKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjphcHBlbmRFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxl
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oOgorCiAyMDE0
LTEyLTA3ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtU
ZXh0dXJlTWFwcGVyXSBOb3JtYWxpemUgcGF0dGVybiB0cmFuc2Zvcm0gZm9yIHBhdHRlcm4gY29t
cG9zaXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKaW5kZXggZjE2ZWIzZi4uOWMxZjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTQzMCw3ICs0MzAs
NyBAQCB2b2lkIE1lZGlhU291cmNlOjplbmRPZlN0cmVhbShjb25zdCBBdG9taWNTdHJpbmcmIGVy
cm9yLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBzdHJlYW1FbmRlZFdpdGhFcnJvcihlcnJvciwg
ZWMpOwogfQogCi12b2lkIE1lZGlhU291cmNlOjpzdHJlYW1FbmRlZFdpdGhFcnJvcihjb25zdCBB
dG9taWNTdHJpbmcmIGVycm9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTWVkaWFTb3VyY2U6
OnN0cmVhbUVuZGVkV2l0aEVycm9yKGNvbnN0IEF0b21pY1N0cmluZyYgZXJyb3IsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBTb3VyY2VCdWZmZXIqIHNvdXJjZUJ1ZmZlcikKIHsKICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBuZXR3b3JrLCAoIm5ldHdv
cmsiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZGVjb2RlLCAoImRlY29k
ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKQEAgLTQ4MCw2ICs0ODAs
MTEgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
ZXJyb3IgPT0gZGVjb2RlKSB7CiAgICAgICAgIC8vIOKGsyBJZiBlcnJvciBpcyBzZXQgdG8gImRl
Y29kZSIKKyAgICAgICAgLy8gMS4gSWYgdXBkYXRpbmcgZXF1YWxzIHRydWUsIHRoZW4gcnVuIHRo
ZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtLgorICAgICAgICBpZiAoc291cmNlQnVmZmVyICYmIHNv
dXJjZUJ1ZmZlci0+dXBkYXRpbmcoKSkKKyAgICAgICAgICAgIHNvdXJjZUJ1ZmZlci0+YXBwZW5k
RXJyb3IoKTsKKworICAgICAgICAvLyAyLgogICAgICAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQp
OwogICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MTWVkaWFF
bGVtZW50OjpIQVZFX05PVEhJTkcpIHsKICAgICAgICAgICAgIC8vICDihrMgSWYgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgZXF1YWxzIEhBVkVfTk9USElORwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCmluZGV4
IGZhZDRkYzEuLjlkNDkyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNDbG9zZWQoKSBjb25zdDsKICAgICBib29sIGlzRW5kZWQoKSBjb25zdDsKICAgICB2b2lkIHNv
dXJjZUJ1ZmZlckRpZENoYW5nZUFjaXR2ZVN0YXRlKFNvdXJjZUJ1ZmZlciosIGJvb2wpOwotICAg
IHZvaWQgc3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYsIFNvdXJjZUJ1ZmZlciogPSAwKTsKIAogICAg
IC8vIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRl
QW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4
IGZjNjFjZDkuLmM4M2Q1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTExODksMTEgKzExODksMzggQEAgcHVibGlj
OgogICAgIH0KIH07CiAKK3ZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRFcnJvcigpCit7CisgICAg
QVNTRVJUKG1fdXBkYXRpbmcpOworICAgIC8vIDEuIFJ1biB0aGUgcmVzZXQgcGFyc2VyIHN0YXRl
IGFsZ29yaXRobS4KKyAgICByZXNldFBhcnNlclN0YXRlKCk7CisKKyAgICAvLyAyLiBTZXQgdGhl
IHVwZGF0aW5nIGF0dHJpYnV0ZSB0byBmYWxzZS4KKyAgICBtX3VwZGF0aW5nID0gZmFsc2U7CisK
KyAgICAvLyAzLiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBlcnJv
ciBhdCB0aGlzIFNvdXJjZUJ1ZmZlciBvYmplY3QuCisgICAgc2NoZWR1bGVFdmVudChldmVudE5h
bWVzKCkuZXJyb3JFdmVudCk7CisKKyAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCB1cGRhdGVlbmQgYXQgdGhpcyBTb3VyY2VCdWZmZXIgb2JqZWN0Lgor
ICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnVwZGF0ZWVuZEV2ZW50KTsKK30KKwogdm9p
ZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiBwcnBTYW1wbGUpCiB7CiAg
ICAgaWYgKGlzUmVtb3ZlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyAzLjUuMSBTZWdt
ZW50IFBhcnNlciBMb29wCisgICAgLy8gNi4xIElmIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBz
ZWdtZW50IGZsYWcgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSBlbmQgb2Ygc3RyZWFtIGFsZ29yaXRo
bQorICAgIC8vICAgICB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUiIGFu
ZCBhYm9ydCB0aGlzIGFsZ29yaXRobS4KKyAgICAvLyBOb3RlOiBjdXJyZW50IGRlc2lnbiBtYWtl
cyBTb3VyY2VCdWZmZXIgc29tZWhvdyBpZ25vcmFudCBvZiBhcHBlbmQgc3RhdGUgLSBpdCdzIG1v
cmUgYSB0aGluZworICAgIC8vICBvZiBTb3VyY2VCdWZmZXJQcml2YXRlLiBUaGF0J3Mgd2h5IHRo
aXMgY2hlY2sgY2FuJ3QgcmVhbGx5IGJlIGRvbmUgaW4gYXBwZW5kSW50ZXJuYWwuCisgICAgLy8g
IHVubGVzcyB3ZSBmb3JjZSBzb21lIGtpbmQgb2YgZGVzaWduIHdpdGggc3RhdGUgbWFjaGluZSBz
d2l0Y2hpbmcuCisgICAgaWYgKCFtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQp
IHsKKyAgICAgICAgbV9zb3VyY2UtPnN0cmVhbUVuZGVkV2l0aEVycm9yKGRlY29kZUVycm9yKCks
IElnbm9yYWJsZUV4Y2VwdGlvbkNvZGUoKSwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IHBycFNhbXBsZTsKIAogICAgIC8v
IDMuNS44IENvZGVkIEZyYW1lIFByb2Nlc3NpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCmluZGV4IDUxYTAyMGMuLjc5ZWY2NjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
aApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoZG91YmxlIHN0YXJ0
LCBkb3VibGUgZW5kLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgTWVk
aWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdm9pZCBh
cHBlbmRFcnJvcigpOwogICAgIHZvaWQgYWJvcnRJZlVwZGF0aW5nKCk7CiAgICAgdm9pZCByZW1v
dmVkRnJvbU1lZGlhU291cmNlKCk7CiAgICAgY29uc3QgTWVkaWFUaW1lJiBoaWdoZXN0UHJlc2Vu
dGF0aW9uRW5kVGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoZXN0UHJlc2VudGF0aW9u
RW5kVGltZXN0YW1wOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243288</attachid>
            <date>2014-12-15 04:42:56 -0800</date>
            <delta_ts>2015-02-05 14:25:54 -0800</delta_ts>
            <desc>appendError algorithm implemented</desc>
            <filename>patch_appendErrorAlg.txt</filename>
            <type>text/plain</type>
            <size>10168</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4YjlhNTA2Li45YzgxODhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMTIt
MTUgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIEltcGxlbWVudCBBcHBlbmQgRXJyb3IgYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDM5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgU291cmNlIEJ1ZmZlciBoYXMgbm90IHJl
Y2VpdmVkIGZpcnN0IGluaXQgc2VnbWVudCwgdGhlbiBpdCBzaGFsbCBjYWxsIGVuZE9mU3RyZWFt
IGFmdGVyIHJlY2VpdmluZworICAgICAgICBNZWRpYSBTZWdtZW50LCBhcyBwZXIgTWVkaWEgU291
cmNlIHNwZWMuIChmcm9tIDE3IEp1bHkgMjAxNCkgaW4gcGFyYWdyYXBoIDMuNS4xIHBvaW50IDYu
MS4KKyAgICAgICAgQWRkZWQgdGVzdCB3aGljaCBhZnRlciBjcmVhdGluZyBTb3VyY2VCdWZmZXIg
c2VuZHMgbWVkaWEgc2FtcGxlLCB3aXRob3V0IGFueSBpbml0IHNlZ21lbnRzLgorCisgICAgICAg
ICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13
aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5pdC5odG1s
OiBBZGRlZC4KKwogMjAxNC0xMi0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2ViR0xdIFRleHR1cmUgc2l6ZSB0ZXN0cyBmYWlsdXJlcwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQt
bWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0
LWluaXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBh
MTY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5pdC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw4IEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJM
KHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVOKHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5h
ZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIikpCitSVU4oc291cmNlQnVm
ZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKGVycm9yKQorRU5EIE9GIFRFU1QKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1h
cHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQuaHRtbCBiL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1p
bml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxNmU5MgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtYXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWwKQEAgLTAsMCArMSw0OCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5tb2NrLW1lZGlh
LXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3VyY2VCdWZmZXI7CisgICAg
dmFyIGluaXRTZWdtZW50OworICAgIHZhciB3YXNFcnJvciA9IGZhbHNlOworCisgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXplTW9ja01lZGlhU291
cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBmaW5kTWVkaWFFbGVt
ZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7CisgICAgICAgIHdh
aXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9wZW4nLCBzb3VyY2VPcGVuLCBmYWxzZSwgdHJ1
ZSk7CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2Up
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc291cmNlT3BlbigpIHsKKyAgICAgICAgcnVuKCdz
b3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9
bW9jayIpJyk7CisKKyAgICAgICAgLy8gTm90ZTogSW4gbm9ybWFsIHVzYWdlIHdlIHNob3VsZCBz
ZW5kIHRoaXMgbGluZSwgYnV0IHRoaXMgdGVzdHMgd2hhdCBoYXBwZW5zIHdpdGhvdXQuCisgICAg
ICAgIC8vIGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDAsIFttYWtlQVRyYWNrKDEsICdtb2NrJywg
VFJBQ0tfS0lORC5WSURFTyldKTsKKworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1w
bGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZ
TkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwgMSwgMSwgU0FNUExFX0ZMQUcuTk9O
RSksCisgICAgICAgIF0pOworCisgICAgICAgIC8vIE5vdGU6IGlmIGNvZGUgY29ycmVjdGx5IGhh
bmRsZXMgc2FtcGxlIHdpdGhvdXQgaW5pdCwgaXQgd2lsbCBnbyB0aHJvdWdoIFNlZ21lbnQgUGFy
c2VyIExvb3AKKyAgICAgICAgLy8gaWYgbm90LCB3ZSB3aWxsIHJlY2VpdmUgdXBkYXRlIGV2ZW50
IGFzIHBhcnQgb2YgQ29kZWQgRnJhbWUgUHJvY2Vzc2luZworICAgICAgICB3YWl0Rm9yRXZlbnRP
bihzb3VyY2VCdWZmZXIsICdlcnJvcicsIG51bGwsIHRydWUsIHRydWUpOworICAgICAgICBmYWls
VGVzdEluKDIwMDApOworCisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihz
YW1wbGVzKScpOworICAgIH0KKworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorICAgIDx2aWRlbz48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDEyZDkwNjUuLmZmNDRhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAor
MjAxNC0xMi0xNSAgQmFydGxvbWllaiBHYWpkYSAgPGIuZ2FqZGFAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW01TRV0gSW1wbGVtZW50IEFwcGVuZCBFcnJvciBhbGdvcml0aG0uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk0MzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiBTb3VyY2UgQnVmZmVyIGhh
cyBub3QgcmVjZWl2ZWQgZmlyc3QgaW5pdCBzZWdtZW50LCB0aGVuIGl0IHNoYWxsIGNhbGwgZW5k
T2ZTdHJlYW0gYWZ0ZXIgcmVjZWl2aW5nCisgICAgICAgIE1lZGlhIFNlZ21lbnQsIGFzIHBlciBN
ZWRpYSBTb3VyY2Ugc3BlYy4gKGZyb20gMTcgSnVseSAyMDE0KSBpbiBwYXJhZ3JhcGggMy41LjEg
cG9pbnQgNi4xLgorICAgICAgICBCYXNlZCB0aGlzIG9uIEVkaXRvcidzIERyYWZ0IDEyIERlY2Vt
YmVyIDIwMTQsIGFzIGl0IGNsYXJpZmllcyBvcmRlciBvZiBldmVudHMuCisKKyAgICAgICAgVGVz
dDogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13
aXRob3V0LWluaXQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRo
RXJyb3IpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlcjo6dmFsaWRhdGVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyOjphcHBlbmRFcnJvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXIuaDoKKwogMjAxNC0xMi0xMiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIFdvcmsgYXJvdW5kIGEgYnVnIGluIGRzeW11dGlsIG9uIG9s
ZGVyIE9TIHZlcnNpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggN2EzNzZjOC4uN2Y0Zjc5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAt
NTM2LDEwICs1MzYsMTAgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVB
cHBlbmRDb21wbGV0ZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgQXBwZW4KICAgICAvLyBodHRwczov
L2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLmh0bWwjc291cmNlYnVmZmVyLWJ1ZmZlci1hcHBlbmQKIAogICAgIC8vIDIu
IElmIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgYnl0ZXMgdGhhdCB2aW9sYXRlIHRoZSBTb3Vy
Y2VCdWZmZXIgYnl0ZSBzdHJlYW0gZm9ybWF0IHNwZWNpZmljYXRpb24sCi0gICAgLy8gdGhlbiBy
dW4gdGhlIGVuZCBvZiBzdHJlYW0gYWxnb3JpdGhtIHdpdGggdGhlIGVycm9yIHBhcmFtZXRlciBz
ZXQgdG8gImRlY29kZSIgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtLgorICAgIC8vIHRoZW4gcnVu
IHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtIHdpdGggdGhlIGRlY29kZSBlcnJvciBwYXJhbWV0
ZXIgc2V0IHRvIHRydWUgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtLgogICAgIGlmIChyZXN1bHQg
PT0gUGFyc2luZ0ZhaWxlZCkgewogICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZm
ZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZSglcCkgLSByZXN1bHQgPSBQYXJz
aW5nRmFpbGVkIiwgdGhpcyk7Ci0gICAgICAgIG1fc291cmNlLT5zdHJlYW1FbmRlZFdpdGhFcnJv
cihkZWNvZGVFcnJvcigpLCBJZ25vcmFibGVFeGNlcHRpb25Db2RlKCkpOworICAgICAgICBhcHBl
bmRFcnJvcih0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTI5LDE2ICs5Mjks
MTYgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5p
dGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgbV9zb3VyY2UtPnNldER1cmF0
aW9uSW50ZXJuYWwobmV3RHVyYXRpb24pOwogICAgIH0KIAotICAgIC8vIDIuIElmIHRoZSBpbml0
aWFsaXphdGlvbiBzZWdtZW50IGhhcyBubyBhdWRpbywgdmlkZW8sIG9yIHRleHQgdHJhY2tzLCB0
aGVuIHJ1biB0aGUgZW5kIG9mIHN0cmVhbQotICAgIC8vIGFsZ29yaXRobSB3aXRoIHRoZSBlcnJv
ciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUiIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAv
LyAyLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBoYXMgbm8gYXVkaW8sIHZpZGVvLCBv
ciB0ZXh0IHRyYWNrcywgdGhlbiBydW4gdGhlIGFwcGVuZCBlcnJvciBhbGdvcml0aG0KKyAgICAv
LyB3aXRoIHRoZSBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVlIGFuZCBhYm9ydCB0
aGVzZSBzdGVwcy4KICAgICBpZiAoIXNlZ21lbnQuYXVkaW9UcmFja3Muc2l6ZSgpICYmICFzZWdt
ZW50LnZpZGVvVHJhY2tzLnNpemUoKSAmJiAhc2VnbWVudC50ZXh0VHJhY2tzLnNpemUoKSkKLSAg
ICAgICAgbV9zb3VyY2UtPnN0cmVhbUVuZGVkV2l0aEVycm9yKGRlY29kZUVycm9yKCksIElnbm9y
YWJsZUV4Y2VwdGlvbkNvZGUoKSk7CisgICAgICAgIGFwcGVuZEVycm9yKHRydWUpOwogCiAKICAg
ICAvLyAzLiBJZiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBmbGFnIGlzIHRydWUs
IHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgaWYgKG1fcmVjZWl2ZWRGaXJzdElu
aXRpYWxpemF0aW9uU2VnbWVudCkgewogICAgICAgICBpZiAoIXZhbGlkYXRlSW5pdGlhbGl6YXRp
b25TZWdtZW50KHNlZ21lbnQpKSB7Ci0gICAgICAgICAgICBtX3NvdXJjZS0+c3RyZWFtRW5kZWRX
aXRoRXJyb3IoZGVjb2RlRXJyb3IoKSwgSWdub3JhYmxlRXhjZXB0aW9uQ29kZSgpKTsKKyAgICAg
ICAgICAgIGFwcGVuZEVycm9yKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIC8vIDMuMiBBZGQgdGhlIGFwcHJvcHJpYXRlIHRyYWNrIGRlc2NyaXB0aW9ucyBm
cm9tIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VnbWVudCB0byBlYWNoIG9mIHRoZSB0cmFjayBidWZm
ZXJzLgpAQCAtMTE0MSw4ICsxMTQxLDggQEAgYm9vbCBTb3VyY2VCdWZmZXI6OnZhbGlkYXRlSW5p
dGlhbGl6YXRpb25TZWdtZW50KGNvbnN0IEluaXRpYWxpemF0aW9uU2VnbWVudCYgc2UKICAgICAv
LyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdtZW50IFJlY2VpdmVkIChjdGQpCiAgICAgLy8gaHR0
cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1pbml0LXNlZ21lbnQtcmVjZWl2ZWQK
IAotICAgIC8vIDMuMS4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcy4gSWYgYW55IG9m
IHRoZSBjaGVja3MgZmFpbCB0aGVuIHJ1biB0aGUgZW5kIG9mIHN0cmVhbQotICAgIC8vIGFsZ29y
aXRobSB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUiIGFuZCBhYm9ydCB0
aGVzZSBzdGVwcy4KKyAgICAvLyAzLjEuIFZlcmlmeSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMu
IElmIGFueSBvZiB0aGUgY2hlY2tzIGZhaWwgdGhlbiBydW4gdGhlIGFwcGVuZCBlcnJvciBhbGdv
cml0aG0KKyAgICAvLyB3aXRoIHRoZSBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVl
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICAvLyAgICogVGhlIG51bWJlciBvZiBhdWRpbywg
dmlkZW8sIGFuZCB0ZXh0IHRyYWNrcyBtYXRjaCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgaW5pdGlh
bGl6YXRpb24gc2VnbWVudC4KICAgICBpZiAoc2VnbWVudC5hdWRpb1RyYWNrcy5zaXplKCkgIT0g
YXVkaW9UcmFja3MoKS0+bGVuZ3RoKCkKICAgICAgICAgfHwgc2VnbWVudC52aWRlb1RyYWNrcy5z
aXplKCkgIT0gdmlkZW9UcmFja3MoKS0+bGVuZ3RoKCkKQEAgLTEyMDksMTEgKzEyMDksNDMgQEAg
cHVibGljOgogICAgIH0KIH07CiAKK3ZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRFcnJvcihib29s
IGRlY29kZUVycm9yUGFyYW0pCit7CisgICAgLy8gMy41LjMgQXBwZW5kIEVycm9yIEFsZ29yaXRo
bQorICAgIEFTU0VSVChtX3VwZGF0aW5nKTsKKyAgICAvLyAxLiBSdW4gdGhlIHJlc2V0IHBhcnNl
ciBzdGF0ZSBhbGdvcml0aG0uCisgICAgcmVzZXRQYXJzZXJTdGF0ZSgpOworCisgICAgLy8gMi4g
U2V0IHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgdG8gZmFsc2UuCisgICAgbV91cGRhdGluZyA9IGZh
bHNlOworCisgICAgLy8gMy4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFt
ZWQgZXJyb3IgYXQgdGhpcyBTb3VyY2VCdWZmZXIgb2JqZWN0LgorICAgIHNjaGVkdWxlRXZlbnQo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOworCisgICAgLy8gNC4gUXVldWUgYSB0YXNrIHRvIGZp
cmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgdXBkYXRlZW5kIGF0IHRoaXMgU291cmNlQnVmZmVyIG9i
amVjdC4KKyAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS51cGRhdGVlbmRFdmVudCk7CisK
KyAgICAvLyA1LiBJZiBkZWNvZGUgZXJyb3IgaXMgdHJ1ZSwgdGhlbiBydW4gdGhlIGVuZCBvZiBz
dHJlYW0gYWxnb3JpdGhtIHdpdGggdGhlIGVycm9yIHBhcmFtZXRlciBzZXQgdG8gImRlY29kZSIu
CisgICAgaWYgKGRlY29kZUVycm9yUGFyYW0pCisgICAgICAgIG1fc291cmNlLT5zdHJlYW1FbmRl
ZFdpdGhFcnJvcihkZWNvZGVFcnJvcigpLCBJZ25vcmFibGVFeGNlcHRpb25Db2RlKCkpOworfQor
CiB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUo
U291cmNlQnVmZmVyUHJpdmF0ZSosIFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+IHBycFNhbXBsZSkK
IHsKICAgICBpZiAoaXNSZW1vdmVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIDMuNS4x
IFNlZ21lbnQgUGFyc2VyIExvb3AKKyAgICAvLyA2LjEgSWYgdGhlIGZpcnN0IGluaXRpYWxpemF0
aW9uIHNlZ21lbnQgcmVjZWl2ZWQgZmxhZyBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIGFwcGVuZCBl
cnJvciBhbGdvcml0aG0KKyAgICAvLyAgICAgd2l0aCB0aGUgZGVjb2RlIGVycm9yIHBhcmFtZXRl
ciBzZXQgdG8gdHJ1ZSBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG0uCisgICAgLy8gTm90ZTogY3Vy
cmVudCBkZXNpZ24gbWFrZXMgU291cmNlQnVmZmVyIHNvbWVob3cgaWdub3JhbnQgb2YgYXBwZW5k
IHN0YXRlIC0gaXQncyBtb3JlIGEgdGhpbmcKKyAgICAvLyAgb2YgU291cmNlQnVmZmVyUHJpdmF0
ZS4gVGhhdCdzIHdoeSB0aGlzIGNoZWNrIGNhbid0IHJlYWxseSBiZSBkb25lIGluIGFwcGVuZElu
dGVybmFsLgorICAgIC8vICB1bmxlc3Mgd2UgZm9yY2Ugc29tZSBraW5kIG9mIGRlc2lnbiB3aXRo
IHN0YXRlIG1hY2hpbmUgc3dpdGNoaW5nLgorICAgIGlmICghbV9yZWNlaXZlZEZpcnN0SW5pdGlh
bGl6YXRpb25TZWdtZW50KSB7CisgICAgICAgIGFwcGVuZEVycm9yKHRydWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUgPSBwcnBTYW1w
bGU7CiAKICAgICAvLyAzLjUuOCBDb2RlZCBGcmFtZSBQcm9jZXNzaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAppbmRleCAyZGU2MzJk
Li44ODllODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmgKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
KGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYsIEV4Y2VwdGlvbkNvZGUmKTsK
IAorICAgIHZvaWQgYXBwZW5kRXJyb3IoYm9vbCk7CiAgICAgdm9pZCBhYm9ydElmVXBkYXRpbmco
KTsKICAgICB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKICAgICB2b2lkIHNlZWtUb1Rp
bWUoY29uc3QgTWVkaWFUaW1lJik7Cg==
</data>
<flag name="review"
          id="268152"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246129</attachid>
            <date>2015-02-05 14:25:54 -0800</date>
            <delta_ts>2015-02-05 16:57:48 -0800</delta_ts>
            <desc>appendError algorithm v2</desc>
            <filename>patch_appendError_v2.txt</filename>
            <type>text/plain</type>
            <size>15000</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzNWRhNjUxLi5iZjk2MmVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDIt
MDUgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIEltcGxlbWVudCBBcHBlbmQgRXJyb3IgYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDM5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgU291cmNlIEJ1ZmZlciBoYXMgbm90IHJl
Y2VpdmVkIGZpcnN0IGluaXQgc2VnbWVudCwgdGhlbiBpdCBzaGFsbCBjYWxsIGVuZE9mU3RyZWFt
IGFmdGVyIHJlY2VpdmluZworICAgICAgICBNZWRpYSBTZWdtZW50LCBhcyBwZXIgTWVkaWEgU291
cmNlIHNwZWMuIChmcm9tIDE3IEp1bHkgMjAxNCkgaW4gcGFyYWdyYXBoIDMuNS4xIHBvaW50IDYu
MS4KKyAgICAgICAgQWRkZWQgdGVzdCB3aGljaCBhZnRlciBjcmVhdGluZyBTb3VyY2VCdWZmZXIg
c2VuZHMgbWVkaWEgc2FtcGxlLCB3aXRob3V0IGFueSBpbml0IHNlZ21lbnRzLgorCisgICAgICAg
ICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13
aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5pdC5odG1s
OiBBZGRlZC4KKwogMjAxNS0wMi0wNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2luXSBNYXJrIGFub3RoZXIgZ3JvdXAgb2YgYXNzZXJ0aW9uIGZhaWx1
cmVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2Vn
bWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBhMTY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5p
dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3Jl
YXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVOKHNvdXJjZUJ1ZmZl
ciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIikpCitS
VU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKGVycm9yKQorRU5E
IE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQuaHRtbCBiL0xheW91
dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlhLXNlZ21l
bnQtd2l0aG91dC1pbml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YjJkYzM5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWwKQEAg
LTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRs
ZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEt
c291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3VyY2VC
dWZmZXI7CisgICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciB3YXNFcnJvciA9IGZhbHNlOwor
CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXpl
TW9ja01lZGlhU291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBm
aW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7
CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9wZW4nLCBzb3VyY2VPcGVu
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChzb3VyY2UpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc291cmNlT3BlbigpIHsKKyAg
ICAgICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9t
b2NrOyBjb2RlY3M9bW9jayIpJyk7CisKKyAgICAgICAgLy8gTm90ZTogSW4gbm9ybWFsIHVzYWdl
IHdlIHNob3VsZCBzZW5kIHRoaXMgbGluZSwgYnV0IHRoaXMgY2hlY2tzIHdoYXQgaGFwcGVucyBp
ZiB3ZSBkb24ndC4KKyAgICAgICAgLy8gaW5pdFNlZ21lbnQgPSBtYWtlQUluaXQoMCwgW21ha2VB
VHJhY2soMSwgJ21vY2snLCBUUkFDS19LSU5ELlZJREVPKV0pOworCisgICAgICAgIHNhbXBsZXMg
PSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwg
MSwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAx
LCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgXSk7CisKKyAgICAgICAgLy8gTm90ZTogaWYg
Y29kZSBjb3JyZWN0bHkgaGFuZGxlcyBzYW1wbGUgd2l0aG91dCBpbml0LCBpdCB3aWxsIGdvIHRo
cm91Z2ggU2VnbWVudCBQYXJzZXIgTG9vcAorICAgICAgICAvLyBpZiBub3QsIHdlIHdpbGwgcmVj
ZWl2ZSB1cGRhdGUgZXZlbnQgYXMgcGFydCBvZiBDb2RlZCBGcmFtZSBQcm9jZXNzaW5nCisgICAg
ICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ2Vycm9yJywgbnVsbCwgdHJ1ZSwgdHJ1
ZSk7CisgICAgICAgIGZhaWxUZXN0SW4oMjAwMCk7CisKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHZpZGVvPjwvdmlkZW8+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNiODRjOC4uYjFhYzZlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI3IEBACisyMDE0LTAyLTU1ICBCYXJ0bG9taWVqIEdhamRhICA8Yi5nYWpkYUBz
YW1zdW5nLmNvbT4KKworICAgICAgICBbTVNFXSBJbXBsZW1lbnQgQXBwZW5kIEVycm9yIGFsZ29y
aXRobS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
OTQzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IFNvdXJjZSBCdWZmZXIgaGFzIG5vdCByZWNlaXZlZCBmaXJzdCBpbml0IHNlZ21lbnQsIHRoZW4g
aXQgc2hhbGwgY2FsbCBlbmRPZlN0cmVhbSBhZnRlciByZWNlaXZpbmcKKyAgICAgICAgTWVkaWEg
U2VnbWVudCwgYXMgcGVyIE1lZGlhIFNvdXJjZSBzcGVjLiAoZnJvbSAxNyBKdWx5IDIwMTQpIGlu
IHBhcmFncmFwaCAzLjUuMSBwb2ludCA2LjEuCisKKyAgICAgICAgQmFzZWQgdGhpcyBjaGFuZ2Ug
b24gRWRpdG9yJ3MgRHJhZnQgMTIgRGVjZW1iZXIgMjAxNCwgYXMgaXQgY2xhcmlmaWVzIG9yZGVy
IG9mIGV2ZW50cy4KKworICAgICAgICBUZXN0OiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdpdGhvdXQtaW5pdC5odG1sCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU291cmNlOjpzdHJlYW1FbmRlZFdpdGhFcnJvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVm
ZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
cjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjp2YWxpZGF0ZUluaXRpYWxpemF0aW9uU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmFwcGVuZEVycm9yKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oOgorCiAyMDE1LTAyLTA1
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEhMUyA8
dmlkZW8+IHdpbGwgbm90IGZpcmUgJ3Byb2dyZXNzJyBldmVudHMsIG9ubHkgJ3N0YWxsZWQnLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
Y3BwCmluZGV4IDY4ZTM5N2IuLjc3MjhhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTYxNiwxMCArNjE2LDEwIEBA
IHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291
cmNlQnVmZmVyUHJpdmF0ZSosIEFwcGVuCiAgICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9o
dG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1s
I3NvdXJjZWJ1ZmZlci1idWZmZXItYXBwZW5kCiAKICAgICAvLyAyLiBJZiB0aGUgaW5wdXQgYnVm
ZmVyIGNvbnRhaW5zIGJ5dGVzIHRoYXQgdmlvbGF0ZSB0aGUgU291cmNlQnVmZmVyIGJ5dGUgc3Ry
ZWFtIGZvcm1hdCBzcGVjaWZpY2F0aW9uLAotICAgIC8vIHRoZW4gcnVuIHRoZSBlbmQgb2Ygc3Ry
ZWFtIGFsZ29yaXRobSB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUiIGFu
ZCBhYm9ydCB0aGlzIGFsZ29yaXRobS4KKyAgICAvLyB0aGVuIHJ1biB0aGUgYXBwZW5kIGVycm9y
IGFsZ29yaXRobSB3aXRoIHRoZSBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVlIGFu
ZCBhYm9ydCB0aGlzIGFsZ29yaXRobS4KICAgICBpZiAocmVzdWx0ID09IFBhcnNpbmdGYWlsZWQp
IHsKICAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQ
cml2YXRlQXBwZW5kQ29tcGxldGUoJXApIC0gcmVzdWx0ID0gUGFyc2luZ0ZhaWxlZCIsIHRoaXMp
OwotICAgICAgICBtX3NvdXJjZS0+c3RyZWFtRW5kZWRXaXRoRXJyb3IoZGVjb2RlRXJyb3IoKSwg
SWdub3JhYmxlRXhjZXB0aW9uQ29kZSgpKTsKKyAgICAgICAgYXBwZW5kRXJyb3IodHJ1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5Nyw4ICs5OTcsOSBAQCB2b2lkIFNvdXJjZUJ1
ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQo
U291cmNlQnVmZgogCiAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCglcCkiLCB0aGlzKTsK
IAotICAgIC8vIDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKLSAgICAvLyBo
dHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLmh0bWwjc291cmNlYnVmZmVyLWluaXQtc2VnbWVudC1yZWNlaXZl
ZAorICAgIC8vIDMuNS44IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQgKGN0ZCkKKyAg
ICAvLyBodHRwczovL3Jhd2dpdC5jb20vdzNjL21lZGlhLXNvdXJjZS9jM2FkNTljN2EzNzBkMDQ0
MzA5NjliYTczZDE4ZGM5YmNkZTU3YTMzL2luZGV4Lmh0bWwjc291cmNlYnVmZmVyLWluaXQtc2Vn
bWVudC1yZWNlaXZlZCBbRWRpdG9yJ3MgRHJhZnQgMDkgSmFudWFyeSAyMDE1XQorCiAgICAgLy8g
MS4gVXBkYXRlIHRoZSBkdXJhdGlvbiBhdHRyaWJ1dGUgaWYgaXQgY3VycmVudGx5IGVxdWFscyBO
YU46CiAgICAgaWYgKG1fc291cmNlLT5kdXJhdGlvbigpLmlzSW52YWxpZCgpKSB7CiAgICAgICAg
IC8vIOKGsyBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyBhIGR1cmF0aW9u
OgpAQCAtMTAwOSwxNiArMTAxMCwxOCBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVy
UHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAg
ICBtX3NvdXJjZS0+c2V0RHVyYXRpb25JbnRlcm5hbChuZXdEdXJhdGlvbik7CiAgICAgfQogCi0g
ICAgLy8gMi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgaGFzIG5vIGF1ZGlvLCB2aWRl
bywgb3IgdGV4dCB0cmFja3MsIHRoZW4gcnVuIHRoZSBlbmQgb2Ygc3RyZWFtCi0gICAgLy8gYWxn
b3JpdGhtIHdpdGggdGhlIGVycm9yIHBhcmFtZXRlciBzZXQgdG8gImRlY29kZSIgYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgorICAgIC8vIDIuIElmIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IGhh
cyBubyBhdWRpbywgdmlkZW8sIG9yIHRleHQgdHJhY2tzLCB0aGVuIHJ1biB0aGUgYXBwZW5kIGVy
cm9yIGFsZ29yaXRobQorICAgIC8vIHdpdGggdGhlIGRlY29kZSBlcnJvciBwYXJhbWV0ZXIgc2V0
IHRvIHRydWUgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmICghc2VnbWVudC5hdWRpb1Ry
YWNrcy5zaXplKCkgJiYgIXNlZ21lbnQudmlkZW9UcmFja3Muc2l6ZSgpICYmICFzZWdtZW50LnRl
eHRUcmFja3Muc2l6ZSgpKQotICAgICAgICBtX3NvdXJjZS0+c3RyZWFtRW5kZWRXaXRoRXJyb3Io
ZGVjb2RlRXJyb3IoKSwgSWdub3JhYmxlRXhjZXB0aW9uQ29kZSgpKTsKLQorICAgICAgICBhcHBl
bmRFcnJvcih0cnVlKTsKIAogICAgIC8vIDMuIElmIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBz
ZWdtZW50IGZsYWcgaXMgdHJ1ZSwgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICBp
ZiAobV9yZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KSB7CisKKyAgICAgICAgLy8g
My4xLiBWZXJpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLiBJZiBhbnkgb2YgdGhlIGNoZWNr
cyBmYWlsIHRoZW4gcnVuIHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtCisgICAgICAgIC8vIHdp
dGggdGhlIGRlY29kZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIHRydWUgYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgogICAgICAgICBpZiAoIXZhbGlkYXRlSW5pdGlhbGl6YXRpb25TZWdtZW50KHNlZ21l
bnQpKSB7Ci0gICAgICAgICAgICBtX3NvdXJjZS0+c3RyZWFtRW5kZWRXaXRoRXJyb3IoZGVjb2Rl
RXJyb3IoKSwgSWdub3JhYmxlRXhjZXB0aW9uQ29kZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZEVy
cm9yKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIDMu
MiBBZGQgdGhlIGFwcHJvcHJpYXRlIHRyYWNrIGRlc2NyaXB0aW9ucyBmcm9tIHRoaXMgaW5pdGlh
bGl6YXRpb24gc2VnbWVudCB0byBlYWNoIG9mIHRoZSB0cmFjayBidWZmZXJzLgpAQCAtMTA1OCw2
ICsxMDYxLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNl
aXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgICAgIGRvd25jYXN0
PEluYmFuZFRleHRUcmFjaz4oKnRleHRUcmFjaykuc2V0UHJpdmF0ZSh0ZXh0VHJhY2tJbmZvLnRy
YWNrKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIDMuMyBTZXQgdGhlIG5lZWQgcmFuZG9tIGFj
Y2VzcyBwb2ludCBmbGFnIG9uIGFsbCB0cmFjayBidWZmZXJzIHRvIHRydWUuCiAgICAgICAgIGZv
ciAoYXV0byYgdHJhY2tCdWZmZXIgOiBtX3RyYWNrQnVmZmVyTWFwLnZhbHVlcygpKQogICAgICAg
ICAgICAgdHJhY2tCdWZmZXIubmVlZFJhbmRvbUFjY2Vzc0ZsYWcgPSB0cnVlOwogICAgIH0KQEAg
LTEwNjgsMTMgKzEwNzIsMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZh
dGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAvLyA1LiBJ
ZiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBmbGFnIGlzIGZhbHNlLCB0aGVuIHJ1
biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIGlmICghbV9yZWNlaXZlZEZpcnN0SW5pdGlhbGl6
YXRpb25TZWdtZW50KSB7CiAgICAgICAgIC8vIDUuMSBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2Vn
bWVudCBjb250YWlucyB0cmFja3Mgd2l0aCBjb2RlY3MgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qg
c3VwcG9ydCwKLSAgICAgICAgLy8gdGhlbiBydW4gdGhlIGVuZCBvZiBzdHJlYW0gYWxnb3JpdGht
IHdpdGggdGhlIGVycm9yIHBhcmFtZXRlciBzZXQgdG8gImRlY29kZSIgYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgorICAgICAgICAvLyB0aGVuIHJ1biB0aGUgYXBwZW5kIGVycm9yIGFsZ29yaXRobSB3
aXRoIHRoZSBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVlIGFuZCBhYm9ydCB0aGVz
ZSBzdGVwcy4KICAgICAgICAgLy8gTk9URTogVGhpcyBjaGVjayBpcyB0aGUgcmVzcG9uc2liaWxp
dHkgb2YgdGhlIFNvdXJjZUJ1ZmZlclByaXZhdGUuCiAKICAgICAgICAgLy8gNS4yIEZvciBlYWNo
IGF1ZGlvIHRyYWNrIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50LCBydW4gZm9sbG93aW5n
IHN0ZXBzOgogICAgICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2tJbmZvIDogc2VnbWVudC5hdWRp
b1RyYWNrcykgewogICAgICAgICAgICAgQXVkaW9UcmFja1ByaXZhdGUqIGF1ZGlvVHJhY2tQcml2
YXRlID0gYXVkaW9UcmFja0luZm8udHJhY2suZ2V0KCk7CiAKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgc3RlcHMgNS4yLjEtNS4yLjguMSBhcyBwZXIgRWRpdG9yJ3MgRHJhZnQgMDkg
SmFudWFyeSAyMDE1LCBhbmQgcmVvcmRlciB0aGlzCiAgICAgICAgICAgICAvLyA1LjIuMSBMZXQg
bmV3IGF1ZGlvIHRyYWNrIGJlIGEgbmV3IEF1ZGlvVHJhY2sgb2JqZWN0LgogICAgICAgICAgICAg
Ly8gNS4yLjIgR2VuZXJhdGUgYSB1bmlxdWUgSUQgYW5kIGFzc2lnbiBpdCB0byB0aGUgaWQgcHJv
cGVydHkgb24gbmV3IHZpZGVvIHRyYWNrLgogICAgICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2s+
IG5ld0F1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrOjpjcmVhdGUodGhpcywgYXVkaW9UcmFja1ByaXZh
dGUpOwpAQCAtMTExNSw2ICsxMTIwLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAg
ICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQudmlkZW9UcmFja3MpIHsKICAg
ICAgICAgICAgIFZpZGVvVHJhY2tQcml2YXRlKiB2aWRlb1RyYWNrUHJpdmF0ZSA9IHZpZGVvVHJh
Y2tJbmZvLnRyYWNrLmdldCgpOwogCisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0
ZXBzIDUuMy4xLTUuMy44LjEgYXMgcGVyIEVkaXRvcidzIERyYWZ0IDA5IEphbnVhcnkgMjAxNSwg
YW5kIHJlb3JkZXIgdGhpcwogICAgICAgICAgICAgLy8gNS4zLjEgTGV0IG5ldyB2aWRlbyB0cmFj
ayBiZSBhIG5ldyBWaWRlb1RyYWNrIG9iamVjdC4KICAgICAgICAgICAgIC8vIDUuMy4yIEdlbmVy
YXRlIGEgdW5pcXVlIElEIGFuZCBhc3NpZ24gaXQgdG8gdGhlIGlkIHByb3BlcnR5IG9uIG5ldyB2
aWRlbyB0cmFjay4KICAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrPiBuZXdWaWRlb1RyYWNr
ID0gVmlkZW9UcmFjazo6Y3JlYXRlKHRoaXMsIHZpZGVvVHJhY2tQcml2YXRlKTsKQEAgLTExNTUs
NiArMTE2MSw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAgICAgICAgIGZvciAoYXV0byYg
dGV4dFRyYWNrSW5mbyA6IHNlZ21lbnQudGV4dFRyYWNrcykgewogICAgICAgICAgICAgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZSogdGV4dFRyYWNrUHJpdmF0ZSA9IHRleHRUcmFja0luZm8udHJhY2su
Z2V0KCk7CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RlcHMgNS40LjEtNS40
LjguMSBhcyBwZXIgRWRpdG9yJ3MgRHJhZnQgMDkgSmFudWFyeSAyMDE1LCBhbmQgcmVvcmRlciB0
aGlzCiAgICAgICAgICAgICAvLyA1LjQuMSBMZXQgbmV3IHRleHQgdHJhY2sgYmUgYSBuZXcgVGV4
dFRyYWNrIG9iamVjdCB3aXRoIGl0cyBwcm9wZXJ0aWVzIHBvcHVsYXRlZCB3aXRoIHRoZQogICAg
ICAgICAgICAgLy8gYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbGl6YXRp
b24gc2VnbWVudC4KICAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2s+IG5ld1RleHRU
cmFjayA9IEluYmFuZFRleHRUcmFjazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
dGhpcywgdGV4dFRyYWNrUHJpdmF0ZSk7CkBAIC0xMTg5LDYgKzExOTYsNyBAQCB2b2lkIFNvdXJj
ZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21l
bnQoU291cmNlQnVmZgogICAgICAgICAvLyA1LjUgSWYgYWN0aXZlIHRyYWNrIGZsYWcgZXF1YWxz
IHRydWUsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgICAgIGlmIChhY3RpdmVU
cmFja0ZsYWcpIHsKICAgICAgICAgICAgIC8vIDUuNS4xIEFkZCB0aGlzIFNvdXJjZUJ1ZmZlciB0
byBhY3RpdmVTb3VyY2VCdWZmZXJzLgorICAgICAgICAgICAgLy8gNS41LjIgUXVldWUgYSB0YXNr
IHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgYWRkc291cmNlYnVmZmVyIGF0IGFjdGl2ZVNv
dXJjZUJ1ZmZlcnMKICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgfQogCkBA
IC0xMjE4LDExICsxMjI2LDExIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2
YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAKIGJvb2wgU291
cmNlQnVmZmVyOjp2YWxpZGF0ZUluaXRpYWxpemF0aW9uU2VnbWVudChjb25zdCBJbml0aWFsaXph
dGlvblNlZ21lbnQmIHNlZ21lbnQpCiB7Ci0gICAgLy8gMy41LjcgSW5pdGlhbGl6YXRpb24gU2Vn
bWVudCBSZWNlaXZlZCAoY3RkKQotICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1t
ZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNzb3Vy
Y2VidWZmZXItaW5pdC1zZWdtZW50LXJlY2VpdmVkCisgICAgLy8gRklYTUU6IG9yZGVyaW5nIG9m
IGFsbCAzLjUuWCAoWD49NykgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gcG9zdC1b
MjQgSnVseSAyMDE0IEVkaXRvcidzIERyYWZ0XSB2ZXJzaW9uCisgICAgLy8gMy41LjggSW5pdGlh
bGl6YXRpb24gU2VnbWVudCBSZWNlaXZlZCAoY3RkKQorICAgIC8vIGh0dHBzOi8vcmF3Z2l0LmNv
bS93M2MvbWVkaWEtc291cmNlL2MzYWQ1OWM3YTM3MGQwNDQzMDk2OWJhNzNkMThkYzliY2RlNTdh
MzMvaW5kZXguaHRtbCNzb3VyY2VidWZmZXItaW5pdC1zZWdtZW50LXJlY2VpdmVkIFtFZGl0b3In
cyBEcmFmdCAwOSBKYW51YXJ5IDIwMTVdCiAKLSAgICAvLyAzLjEuIFZlcmlmeSB0aGUgZm9sbG93
aW5nIHByb3BlcnRpZXMuIElmIGFueSBvZiB0aGUgY2hlY2tzIGZhaWwgdGhlbiBydW4gdGhlIGVu
ZCBvZiBzdHJlYW0KLSAgICAvLyBhbGdvcml0aG0gd2l0aCB0aGUgZXJyb3IgcGFyYW1ldGVyIHNl
dCB0byAiZGVjb2RlIiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gTm90ZTogdGhvc2Ug
YXJlIGNoZWNrcyBmcm9tIHN0ZXAgMy4xCiAgICAgLy8gICAqIFRoZSBudW1iZXIgb2YgYXVkaW8s
IHZpZGVvLCBhbmQgdGV4dCB0cmFja3MgbWF0Y2ggd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCiAgICAgaWYgKHNlZ21lbnQuYXVkaW9UcmFja3Muc2l6ZSgpICE9
IGF1ZGlvVHJhY2tzKCktPmxlbmd0aCgpCiAgICAgICAgIHx8IHNlZ21lbnQudmlkZW9UcmFja3Mu
c2l6ZSgpICE9IHZpZGVvVHJhY2tzKCktPmxlbmd0aCgpCkBAIC0xMjg5LDExICsxMjk3LDQ1IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCit2b2lkIFNvdXJjZUJ1ZmZlcjo6YXBwZW5kRXJyb3IoYm9v
bCBkZWNvZGVFcnJvclBhcmFtKQoreworICAgIC8vIDMuNS4zIEFwcGVuZCBFcnJvciBBbGdvcml0
aG0KKyAgICAvLyBodHRwczovL3Jhd2dpdC5jb20vdzNjL21lZGlhLXNvdXJjZS9jM2FkNTljN2Ez
NzBkMDQ0MzA5NjliYTczZDE4ZGM5YmNkZTU3YTMzL2luZGV4Lmh0bWwjc291cmNlYnVmZmVyLWFw
cGVuZC1lcnJvciBbRWRpdG9yJ3MgRHJhZnQgMDkgSmFudWFyeSAyMDE1XQorCisgICAgQVNTRVJU
KG1fdXBkYXRpbmcpOworICAgIC8vIDEuIFJ1biB0aGUgcmVzZXQgcGFyc2VyIHN0YXRlIGFsZ29y
aXRobS4KKyAgICByZXNldFBhcnNlclN0YXRlKCk7CisKKyAgICAvLyAyLiBTZXQgdGhlIHVwZGF0
aW5nIGF0dHJpYnV0ZSB0byBmYWxzZS4KKyAgICBtX3VwZGF0aW5nID0gZmFsc2U7CisKKyAgICAv
LyAzLiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBlcnJvciBhdCB0
aGlzIFNvdXJjZUJ1ZmZlciBvYmplY3QuCisgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
ZXJyb3JFdmVudCk7CisKKyAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBl
dmVudCBuYW1lZCB1cGRhdGVlbmQgYXQgdGhpcyBTb3VyY2VCdWZmZXIgb2JqZWN0LgorICAgIHNj
aGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnVwZGF0ZWVuZEV2ZW50KTsKKworICAgIC8vIDUuIElm
IGRlY29kZSBlcnJvciBpcyB0cnVlLCB0aGVuIHJ1biB0aGUgZW5kIG9mIHN0cmVhbSBhbGdvcml0
aG0gd2l0aCB0aGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byAiZGVjb2RlIi4KKyAgICBpZiAoZGVj
b2RlRXJyb3JQYXJhbSkKKyAgICAgICAgbV9zb3VyY2UtPnN0cmVhbUVuZGVkV2l0aEVycm9yKGRl
Y29kZUVycm9yKCksIElnbm9yYWJsZUV4Y2VwdGlvbkNvZGUoKSk7Cit9CisKIHZvaWQgU291cmNl
QnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQ
cml2YXRlKiwgUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gcHJwU2FtcGxlKQogewogICAgIGlmIChp
c1JlbW92ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gMy41LjEgU2VnbWVudCBQYXJz
ZXIgTG9vcAorICAgIC8vIDYuMSBJZiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBy
ZWNlaXZlZCBmbGFnIGlzIGZhbHNlLCB0aGVuIHJ1biB0aGUgYXBwZW5kIGVycm9yIGFsZ29yaXRo
bQorICAgIC8vICAgICB3aXRoIHRoZSBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVl
IGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobS4KKyAgICAvLyBOb3RlOiBjdXJyZW50IGRlc2lnbiBt
YWtlcyBTb3VyY2VCdWZmZXIgc29tZWhvdyBpZ25vcmFudCBvZiBhcHBlbmQgc3RhdGUgLSBpdCdz
IG1vcmUgYSB0aGluZworICAgIC8vICBvZiBTb3VyY2VCdWZmZXJQcml2YXRlLiBUaGF0J3Mgd2h5
IHRoaXMgY2hlY2sgY2FuJ3QgcmVhbGx5IGJlIGRvbmUgaW4gYXBwZW5kSW50ZXJuYWwuCisgICAg
Ly8gIHVubGVzcyB3ZSBmb3JjZSBzb21lIGtpbmQgb2YgZGVzaWduIHdpdGggc3RhdGUgbWFjaGlu
ZSBzd2l0Y2hpbmcuCisgICAgaWYgKCFtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21l
bnQpIHsKKyAgICAgICAgYXBwZW5kRXJyb3IodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IHBycFNhbXBsZTsKIAogICAgIC8v
IDMuNS44IENvZGVkIEZyYW1lIFByb2Nlc3NpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCmluZGV4IDViOWY3MDMuLjQ3MjY2YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
aApAQCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoZG91YmxlIHN0YXJ0
LCBkb3VibGUgZW5kLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgTWVk
aWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdm9pZCBh
cHBlbmRFcnJvcihib29sKTsKICAgICB2b2lkIGFib3J0SWZVcGRhdGluZygpOwogICAgIHZvaWQg
cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOwogICAgIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRp
YVRpbWUmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246160</attachid>
            <date>2015-02-06 05:35:16 -0800</date>
            <delta_ts>2015-02-06 14:14:28 -0800</delta_ts>
            <desc>appendError algorithm v2 + updated layouttests</desc>
            <filename>patch_appendError_V3.txt</filename>
            <type>text/plain</type>
            <size>18236</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWFkOGFmLi5iNGFjZmM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDIt
MDYgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIEltcGxlbWVudCBBcHBlbmQgRXJyb3IgYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDM5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgU291cmNlIEJ1ZmZlciBoYXMgbm90IHJl
Y2VpdmVkIGZpcnN0IGluaXQgc2VnbWVudCwgdGhlbiBpdCBzaGFsbCBjYWxsIGVuZE9mU3RyZWFt
IGFmdGVyIHJlY2VpdmluZworICAgICAgICBNZWRpYSBTZWdtZW50LCBhcyBwZXIgTWVkaWEgU291
cmNlIHNwZWMuIChmcm9tIDE3IEp1bHkgMjAxNCkgaW4gcGFyYWdyYXBoIDMuNS4xIHBvaW50IDYu
MS4KKyAgICAgICAgQWRkZWQgdGVzdCB3aGljaCBhZnRlciBjcmVhdGluZyBTb3VyY2VCdWZmZXIg
c2VuZHMgbWVkaWEgc2FtcGxlLCB3aXRob3V0IGFueSBpbml0IHNlZ21lbnRzLgorICAgICAgICBV
cGRhdGVkIGV4aXN0aW5nIHRlc3RzLCBzbyB0aGV5IGNvcnJlY3RseSBleHBlY3QgdXBkYXRlZW5k
IGFuZCBlcnJvciBhcyBwZXIgQXBwZW5kIEVycm9yIGFsZ29yaXRobS4KKworICAgICAgICAqIG1l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWZhaWxlZC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVk
Lmh0bWw6CisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQt
bWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdp
dGhvdXQtaW5pdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLW11bHRpcGxlLWluaXRpYWxpemF0aW9uLXNlZ21lbnRzLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLWluaXRp
YWxpemF0aW9uLXNlZ21lbnRzLmh0bWw6CisKIDIwMTUtMDItMDYgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC90
aW1lb3V0L3htbGh0dHByZXF1ZXN0LXRpbWVvdXQtYWJvcnRlZG9ubWFpbi5odG1sIGlzIGZsYWt5
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LWFwcGVuZC1mYWlsZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVkLWV4cGVjdGVkLnR4dAppbmRleCAxMzExNzEy
Li42MTgwOGNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLWFwcGVuZC1mYWlsZWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWZhaWxlZC1leHBlY3RlZC50eHQK
QEAgLTQsNiArNCw4IEBAIEVWRU5UKHNvdXJjZW9wZW4pCiBSVU4oc291cmNlQnVmZmVyID0gc291
cmNlLmFkZFNvdXJjZUJ1ZmZlcigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKSkKIFJVTihzb3Vy
Y2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXRTZWdtZW50KSkKIEVWRU5UKHVwZGF0ZXN0YXJ0KQor
RVZFTlQoZXJyb3IpCitFVkVOVCh1cGRhdGVlbmQpCiBFVkVOVChzb3VyY2VlbmRlZCkKIEVORCBP
RiBURVNUCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YS1zb3VyY2UtYXBwZW5kLWZhaWxlZC5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVkLmh0bWwKaW5kZXggNWVhMjM3NC4uZWFiZjRj
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS1hcHBlbmQtZmFpbGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVkLmh0bWwKQEAgLTI1LDYgKzI1LDcgQEAKIAogICAg
ICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVzdGFydCcpOwogICAgICAg
ICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGUnKTsKKyAgICAgICAgd2FpdEZv
ckV2ZW50T24oc291cmNlQnVmZmVyLCAnZXJyb3InKTsKICAgICAgICAgd2FpdEZvckV2ZW50T24o
c291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7CiAgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJj
ZSwgJ3NvdXJjZWVuZGVkJywgZW5kVGVzdCk7CiAgICAgICAgIGluaXRTZWdtZW50ID0gbWFrZUFu
SW52YWxpZEJveCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQt
bWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBhMTY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1tZWRpYS1zZWdtZW50LXdp
dGhvdXQtaW5pdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACisKK1JVTih2aWRlby5zcmMg
PSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVOKHNv
dXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1t
b2NrIikpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKGVy
cm9yKQorRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQuaHRt
bCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1l
ZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjJkYzM5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21l
ZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLW1lZGlhLXNlZ21lbnQtd2l0aG91dC1pbml0
Lmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDx0aXRsZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1v
Y2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8t
dGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZh
ciBzb3VyY2VCdWZmZXI7CisgICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciB3YXNFcnJvciA9
IGZhbHNlOworCisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5p
bml0aWFsaXplTW9ja01lZGlhU291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgewor
ICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlh
U291cmNlKCk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9wZW4nLCBz
b3VyY2VPcGVuLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJMLmNy
ZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc291cmNlT3Bl
bigpIHsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVy
KCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpJyk7CisKKyAgICAgICAgLy8gTm90ZTogSW4gbm9y
bWFsIHVzYWdlIHdlIHNob3VsZCBzZW5kIHRoaXMgbGluZSwgYnV0IHRoaXMgY2hlY2tzIHdoYXQg
aGFwcGVucyBpZiB3ZSBkb24ndC4KKyAgICAgICAgLy8gaW5pdFNlZ21lbnQgPSBtYWtlQUluaXQo
MCwgW21ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFDS19LSU5ELlZJREVPKV0pOworCisgICAgICAg
IHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUo
MCwgMCwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgx
LCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgXSk7CisKKyAgICAgICAgLy8g
Tm90ZTogaWYgY29kZSBjb3JyZWN0bHkgaGFuZGxlcyBzYW1wbGUgd2l0aG91dCBpbml0LCBpdCB3
aWxsIGdvIHRocm91Z2ggU2VnbWVudCBQYXJzZXIgTG9vcAorICAgICAgICAvLyBpZiBub3QsIHdl
IHdpbGwgcmVjZWl2ZSB1cGRhdGUgZXZlbnQgYXMgcGFydCBvZiBDb2RlZCBGcmFtZSBQcm9jZXNz
aW5nCisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ2Vycm9yJywgbnVsbCwg
dHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGZhaWxUZXN0SW4oMjAwMCk7CisKKyAgICAgICAgcnVuKCdz
b3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisgICAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHZpZGVvPjwvdmlk
ZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLWluaXRpYWxpemF0aW9uLXNlZ21lbnRzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
bXVsdGlwbGUtaW5pdGlhbGl6YXRpb24tc2VnbWVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDc5MmE3
ZTAuLjhkZmMzMzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UtbXVsdGlwbGUtaW5pdGlhbGl6YXRpb24tc2VnbWVudHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlw
bGUtaW5pdGlhbGl6YXRpb24tc2VnbWVudHMtZXhwZWN0ZWQudHh0CkBAIC05LDYgKzksOCBAQCBS
VU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkpCiBFVkVOVCh1cGRhdGVl
bmQpCiBUZXN0IHRoYXQgYSByZXBsYWNlbWVudCBpbml0aWFsaXphdGlvbiBzZWdtZW50IGNvbnRh
aW5pbmcgYSB0cmFjayB3aXRoIGEgZGlmZmVyZW50IGNvZGVjIGJ1dCB0aGUgc2FtZSB0cmFja0lE
IGZhaWxzLgogUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpKQorRVZF
TlQoZXJyb3IpCitFVkVOVCh1cGRhdGVlbmQpCiBFVkVOVChzb3VyY2VlbmRlZCkKIEVORCBPRiBU
RVNUCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2UtbXVsdGlwbGUtaW5pdGlhbGl6YXRpb24tc2VnbWVudHMuaHRtbCBiL0xheW91dFRlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtaW5pdGlhbGl6YXRpb24t
c2VnbWVudHMuaHRtbAppbmRleCAwYzhlMmQ4Li5jZTY3OTk5IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLWluaXRpYWxpemF0
aW9uLXNlZ21lbnRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1tdWx0aXBsZS1pbml0aWFsaXphdGlvbi1zZWdtZW50cy5odG1sCkBAIC00OCw3
ICs0OCw4IEBACiAKICAgICBmdW5jdGlvbiBzZWNvbmRVcGRhdGUoKSB7CiAgICAgICAgIGNvbnNv
bGVXcml0ZSgnVGVzdCB0aGF0IGEgcmVwbGFjZW1lbnQgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBj
b250YWluaW5nIGEgdHJhY2sgd2l0aCBhIGRpZmZlcmVudCBjb2RlYyBidXQgdGhlIHNhbWUgdHJh
Y2tJRCBmYWlscy4nKQotICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRh
dGVlbmQnLCBlbmRUZXN0LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNv
dXJjZUJ1ZmZlciwgJ2Vycm9yJyk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZl
ciwgJ3VwZGF0ZWVuZCcpOwogICAgICAgICBleHBlY3RlZCA9IHRydWU7CiAgICAgICAgIGluaXRT
ZWdtZW50ID0gbWFrZUFJbml0KDEwMCwgWwogICAgICAgICAgICAgbWFrZUFUcmFjaygyLCAnIW1v
YycsIFRSQUNLX0tJTkQuVklERU8pLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNhNzU2ZTAuLjNjMjQxMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNS0wMi0wNiAgQmFydGxvbWllaiBHYWpkYSAg
PGIuZ2FqZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW01TRV0gSW1wbGVtZW50IEFwcGVuZCBF
cnJvciBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJZiBTb3VyY2UgQnVmZmVyIGhhcyBub3QgcmVjZWl2ZWQgZmlyc3QgaW5pdCBzZWdt
ZW50LCB0aGVuIGl0IHNoYWxsIGNhbGwgZW5kT2ZTdHJlYW0gYWZ0ZXIgcmVjZWl2aW5nCisgICAg
ICAgIE1lZGlhIFNlZ21lbnQsIGFzIHBlciBNZWRpYSBTb3VyY2Ugc3BlYy4gKGZyb20gMTcgSnVs
eSAyMDE0KSBpbiBwYXJhZ3JhcGggMy41LjEgcG9pbnQgNi4xLgorCisgICAgICAgIEJhc2VkIHRo
aXMgY2hhbmdlIG9uIEVkaXRvcidzIERyYWZ0IDEyIERlY2VtYmVyIDIwMTQsIGFzIGl0IGNsYXJp
ZmllcyBvcmRlciBvZiBldmVudHMuCisKKyAgICAgICAgVGVzdDogbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1hcHBlbmQtbWVkaWEtc2VnbWVudC13aXRob3V0LWluaXQuaHRtbAorCisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6
OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6dmFsaWRhdGVJbml0aWFs
aXphdGlvblNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjphcHBlbmRF
cnJvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKwog
MjAxNS0wMi0wNSAgRGhpIEF1cnJhaG1hbiAgPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBkdXBsaWNhdGUgbG9vcCBhZnRlciByMTc5NTMyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggNjhl
Mzk3Yi4uNzcyOGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtNjE2LDEwICs2MTYsMTAgQEAgdm9pZCBTb3VyY2VC
dWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZShTb3VyY2VCdWZmZXJQcml2
YXRlKiwgQXBwZW4KICAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3
LWZpbGUvZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjc291cmNlYnVmZmVy
LWJ1ZmZlci1hcHBlbmQKIAogICAgIC8vIDIuIElmIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMg
Ynl0ZXMgdGhhdCB2aW9sYXRlIHRoZSBTb3VyY2VCdWZmZXIgYnl0ZSBzdHJlYW0gZm9ybWF0IHNw
ZWNpZmljYXRpb24sCi0gICAgLy8gdGhlbiBydW4gdGhlIGVuZCBvZiBzdHJlYW0gYWxnb3JpdGht
IHdpdGggdGhlIGVycm9yIHBhcmFtZXRlciBzZXQgdG8gImRlY29kZSIgYW5kIGFib3J0IHRoaXMg
YWxnb3JpdGhtLgorICAgIC8vIHRoZW4gcnVuIHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtIHdp
dGggdGhlIGRlY29kZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIHRydWUgYW5kIGFib3J0IHRoaXMg
YWxnb3JpdGhtLgogICAgIGlmIChyZXN1bHQgPT0gUGFyc2luZ0ZhaWxlZCkgewogICAgICAgICBM
T0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRD
b21wbGV0ZSglcCkgLSByZXN1bHQgPSBQYXJzaW5nRmFpbGVkIiwgdGhpcyk7Ci0gICAgICAgIG1f
c291cmNlLT5zdHJlYW1FbmRlZFdpdGhFcnJvcihkZWNvZGVFcnJvcigpLCBJZ25vcmFibGVFeGNl
cHRpb25Db2RlKCkpOworICAgICAgICBhcHBlbmRFcnJvcih0cnVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtOTk3LDggKzk5Nyw5IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAK
ICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCVwKSIsIHRoaXMpOwogCi0gICAgLy8gMy41
LjcgSW5pdGlhbGl6YXRpb24gU2VnbWVudCBSZWNlaXZlZAotICAgIC8vIGh0dHBzOi8vZHZjcy53
My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2UuaHRtbCNzb3VyY2VidWZmZXItaW5pdC1zZWdtZW50LXJlY2VpdmVkCisgICAgLy8gMy41
LjggSW5pdGlhbGl6YXRpb24gU2VnbWVudCBSZWNlaXZlZCAoY3RkKQorICAgIC8vIGh0dHBzOi8v
cmF3Z2l0LmNvbS93M2MvbWVkaWEtc291cmNlL2MzYWQ1OWM3YTM3MGQwNDQzMDk2OWJhNzNkMThk
YzliY2RlNTdhMzMvaW5kZXguaHRtbCNzb3VyY2VidWZmZXItaW5pdC1zZWdtZW50LXJlY2VpdmVk
IFtFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTVdCisKICAgICAvLyAxLiBVcGRhdGUgdGhl
IGR1cmF0aW9uIGF0dHJpYnV0ZSBpZiBpdCBjdXJyZW50bHkgZXF1YWxzIE5hTjoKICAgICBpZiAo
bV9zb3VyY2UtPmR1cmF0aW9uKCkuaXNJbnZhbGlkKCkpIHsKICAgICAgICAgLy8g4oazIElmIHRo
ZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IGNvbnRhaW5zIGEgZHVyYXRpb246CkBAIC0xMDA5LDE2
ICsxMDEwLDE4IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAgICAgICAgIG1fc291cmNlLT5z
ZXREdXJhdGlvbkludGVybmFsKG5ld0R1cmF0aW9uKTsKICAgICB9CiAKLSAgICAvLyAyLiBJZiB0
aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBoYXMgbm8gYXVkaW8sIHZpZGVvLCBvciB0ZXh0IHRy
YWNrcywgdGhlbiBydW4gdGhlIGVuZCBvZiBzdHJlYW0KLSAgICAvLyBhbGdvcml0aG0gd2l0aCB0
aGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byAiZGVjb2RlIiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CisgICAgLy8gMi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgaGFzIG5vIGF1ZGlvLCB2
aWRlbywgb3IgdGV4dCB0cmFja3MsIHRoZW4gcnVuIHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGht
CisgICAgLy8gd2l0aCB0aGUgZGVjb2RlIGVycm9yIHBhcmFtZXRlciBzZXQgdG8gdHJ1ZSBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgaWYgKCFzZWdtZW50LmF1ZGlvVHJhY2tzLnNpemUoKSAm
JiAhc2VnbWVudC52aWRlb1RyYWNrcy5zaXplKCkgJiYgIXNlZ21lbnQudGV4dFRyYWNrcy5zaXpl
KCkpCi0gICAgICAgIG1fc291cmNlLT5zdHJlYW1FbmRlZFdpdGhFcnJvcihkZWNvZGVFcnJvcigp
LCBJZ25vcmFibGVFeGNlcHRpb25Db2RlKCkpOwotCisgICAgICAgIGFwcGVuZEVycm9yKHRydWUp
OwogCiAgICAgLy8gMy4gSWYgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQgZmxhZyBp
cyB0cnVlLCB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIGlmIChtX3JlY2VpdmVk
Rmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsKKworICAgICAgICAvLyAzLjEuIFZlcmlmeSB0
aGUgZm9sbG93aW5nIHByb3BlcnRpZXMuIElmIGFueSBvZiB0aGUgY2hlY2tzIGZhaWwgdGhlbiBy
dW4gdGhlIGFwcGVuZCBlcnJvciBhbGdvcml0aG0KKyAgICAgICAgLy8gd2l0aCB0aGUgZGVjb2Rl
IGVycm9yIHBhcmFtZXRlciBzZXQgdG8gdHJ1ZSBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAg
ICAgIGlmICghdmFsaWRhdGVJbml0aWFsaXphdGlvblNlZ21lbnQoc2VnbWVudCkpIHsKLSAgICAg
ICAgICAgIG1fc291cmNlLT5zdHJlYW1FbmRlZFdpdGhFcnJvcihkZWNvZGVFcnJvcigpLCBJZ25v
cmFibGVFeGNlcHRpb25Db2RlKCkpOworICAgICAgICAgICAgYXBwZW5kRXJyb3IodHJ1ZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gMy4yIEFkZCB0aGUgYXBw
cm9wcmlhdGUgdHJhY2sgZGVzY3JpcHRpb25zIGZyb20gdGhpcyBpbml0aWFsaXphdGlvbiBzZWdt
ZW50IHRvIGVhY2ggb2YgdGhlIHRyYWNrIGJ1ZmZlcnMuCkBAIC0xMDU4LDYgKzEwNjEsNyBAQCB2
b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXph
dGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAgZG93bmNhc3Q8SW5iYW5kVGV4dFRy
YWNrPigqdGV4dFRyYWNrKS5zZXRQcml2YXRlKHRleHRUcmFja0luZm8udHJhY2spOwogICAgICAg
ICB9CiAKKyAgICAgICAgLy8gMy4zIFNldCB0aGUgbmVlZCByYW5kb20gYWNjZXNzIHBvaW50IGZs
YWcgb24gYWxsIHRyYWNrIGJ1ZmZlcnMgdG8gdHJ1ZS4KICAgICAgICAgZm9yIChhdXRvJiB0cmFj
a0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJNYXAudmFsdWVzKCkpCiAgICAgICAgICAgICB0cmFja0J1
ZmZlci5uZWVkUmFuZG9tQWNjZXNzRmxhZyA9IHRydWU7CiAgICAgfQpAQCAtMTA2OCwxMyArMTA3
MiwxNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJ
bml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgIC8vIDUuIElmIHRoZSBmaXJzdCBp
bml0aWFsaXphdGlvbiBzZWdtZW50IGZsYWcgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSBmb2xsb3dp
bmcgc3RlcHM6CiAgICAgaWYgKCFtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQp
IHsKICAgICAgICAgLy8gNS4xIElmIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IGNvbnRhaW5z
IHRyYWNrcyB3aXRoIGNvZGVjcyB0aGUgdXNlciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0LAotICAg
ICAgICAvLyB0aGVuIHJ1biB0aGUgZW5kIG9mIHN0cmVhbSBhbGdvcml0aG0gd2l0aCB0aGUgZXJy
b3IgcGFyYW1ldGVyIHNldCB0byAiZGVjb2RlIiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAg
ICAgIC8vIHRoZW4gcnVuIHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtIHdpdGggdGhlIGRlY29k
ZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIHRydWUgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAg
ICAgICAvLyBOT1RFOiBUaGlzIGNoZWNrIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgU291
cmNlQnVmZmVyUHJpdmF0ZS4KIAogICAgICAgICAvLyA1LjIgRm9yIGVhY2ggYXVkaW8gdHJhY2sg
aW4gdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIHJ1biBmb2xsb3dpbmcgc3RlcHM6CiAgICAg
ICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8gOiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7CiAg
ICAgICAgICAgICBBdWRpb1RyYWNrUHJpdmF0ZSogYXVkaW9UcmFja1ByaXZhdGUgPSBhdWRpb1Ry
YWNrSW5mby50cmFjay5nZXQoKTsKIAorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBz
dGVwcyA1LjIuMS01LjIuOC4xIGFzIHBlciBFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTUs
IGFuZCByZW9yZGVyIHRoaXMKICAgICAgICAgICAgIC8vIDUuMi4xIExldCBuZXcgYXVkaW8gdHJh
Y2sgYmUgYSBuZXcgQXVkaW9UcmFjayBvYmplY3QuCiAgICAgICAgICAgICAvLyA1LjIuMiBHZW5l
cmF0ZSBhIHVuaXF1ZSBJRCBhbmQgYXNzaWduIGl0IHRvIHRoZSBpZCBwcm9wZXJ0eSBvbiBuZXcg
dmlkZW8gdHJhY2suCiAgICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFjaz4gbmV3QXVkaW9UcmFj
ayA9IEF1ZGlvVHJhY2s6OmNyZWF0ZSh0aGlzLCBhdWRpb1RyYWNrUHJpdmF0ZSk7CkBAIC0xMTE1
LDYgKzExMjAsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJl
Y2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICBmb3IgKGF1dG8m
IHZpZGVvVHJhY2tJbmZvIDogc2VnbWVudC52aWRlb1RyYWNrcykgewogICAgICAgICAgICAgVmlk
ZW9UcmFja1ByaXZhdGUqIHZpZGVvVHJhY2tQcml2YXRlID0gdmlkZW9UcmFja0luZm8udHJhY2su
Z2V0KCk7CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RlcHMgNS4zLjEtNS4z
LjguMSBhcyBwZXIgRWRpdG9yJ3MgRHJhZnQgMDkgSmFudWFyeSAyMDE1LCBhbmQgcmVvcmRlciB0
aGlzCiAgICAgICAgICAgICAvLyA1LjMuMSBMZXQgbmV3IHZpZGVvIHRyYWNrIGJlIGEgbmV3IFZp
ZGVvVHJhY2sgb2JqZWN0LgogICAgICAgICAgICAgLy8gNS4zLjIgR2VuZXJhdGUgYSB1bmlxdWUg
SUQgYW5kIGFzc2lnbiBpdCB0byB0aGUgaWQgcHJvcGVydHkgb24gbmV3IHZpZGVvIHRyYWNrLgog
ICAgICAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2s+IG5ld1ZpZGVvVHJhY2sgPSBWaWRlb1RyYWNr
OjpjcmVhdGUodGhpcywgdmlkZW9UcmFja1ByaXZhdGUpOwpAQCAtMTE1NSw2ICsxMTYxLDcgQEAg
dm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6
YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZv
IDogc2VnbWVudC50ZXh0VHJhY2tzKSB7CiAgICAgICAgICAgICBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlKiB0ZXh0VHJhY2tQcml2YXRlID0gdGV4dFRyYWNrSW5mby50cmFjay5nZXQoKTsKIAorICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdGVwcyA1LjQuMS01LjQuOC4xIGFzIHBlciBF
ZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTUsIGFuZCByZW9yZGVyIHRoaXMKICAgICAgICAg
ICAgIC8vIDUuNC4xIExldCBuZXcgdGV4dCB0cmFjayBiZSBhIG5ldyBUZXh0VHJhY2sgb2JqZWN0
IHdpdGggaXRzIHByb3BlcnRpZXMgcG9wdWxhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICAvLyBh
cHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50Lgog
ICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFjaz4gbmV3VGV4dFRyYWNrID0gSW5iYW5k
VGV4dFRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCB0ZXh0VHJh
Y2tQcml2YXRlKTsKQEAgLTExODksNiArMTE5Niw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3Vy
Y2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZm
CiAgICAgICAgIC8vIDUuNSBJZiBhY3RpdmUgdHJhY2sgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiBy
dW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgaWYgKGFjdGl2ZVRyYWNrRmxhZykgewog
ICAgICAgICAgICAgLy8gNS41LjEgQWRkIHRoaXMgU291cmNlQnVmZmVyIHRvIGFjdGl2ZVNvdXJj
ZUJ1ZmZlcnMuCisgICAgICAgICAgICAvLyA1LjUuMiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBhZGRzb3VyY2VidWZmZXIgYXQgYWN0aXZlU291cmNlQnVmZmVycwog
ICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUpOwogICAgICAgICB9CiAKQEAgLTEyMTgsMTEgKzEy
MjYsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKIAogYm9vbCBTb3VyY2VCdWZmZXI6OnZh
bGlkYXRlSW5pdGlhbGl6YXRpb25TZWdtZW50KGNvbnN0IEluaXRpYWxpemF0aW9uU2VnbWVudCYg
c2VnbWVudCkKIHsKLSAgICAvLyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdtZW50IFJlY2VpdmVk
IChjdGQpCi0gICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxl
L2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1pbml0
LXNlZ21lbnQtcmVjZWl2ZWQKKyAgICAvLyBGSVhNRTogb3JkZXJpbmcgb2YgYWxsIDMuNS5YIChY
Pj03KSBmdW5jdGlvbnMgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBwb3N0LVsyNCBKdWx5IDIwMTQg
RWRpdG9yJ3MgRHJhZnRdIHZlcnNpb24KKyAgICAvLyAzLjUuOCBJbml0aWFsaXphdGlvbiBTZWdt
ZW50IFJlY2VpdmVkIChjdGQpCisgICAgLy8gaHR0cHM6Ly9yYXdnaXQuY29tL3czYy9tZWRpYS1z
b3VyY2UvYzNhZDU5YzdhMzcwZDA0NDMwOTY5YmE3M2QxOGRjOWJjZGU1N2EzMy9pbmRleC5odG1s
I3NvdXJjZWJ1ZmZlci1pbml0LXNlZ21lbnQtcmVjZWl2ZWQgW0VkaXRvcidzIERyYWZ0IDA5IEph
bnVhcnkgMjAxNV0KIAotICAgIC8vIDMuMS4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGll
cy4gSWYgYW55IG9mIHRoZSBjaGVja3MgZmFpbCB0aGVuIHJ1biB0aGUgZW5kIG9mIHN0cmVhbQot
ICAgIC8vIGFsZ29yaXRobSB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUi
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyBOb3RlOiB0aG9zZSBhcmUgY2hlY2tzIGZy
b20gc3RlcCAzLjEKICAgICAvLyAgICogVGhlIG51bWJlciBvZiBhdWRpbywgdmlkZW8sIGFuZCB0
ZXh0IHRyYWNrcyBtYXRjaCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc2Vn
bWVudC4KICAgICBpZiAoc2VnbWVudC5hdWRpb1RyYWNrcy5zaXplKCkgIT0gYXVkaW9UcmFja3Mo
KS0+bGVuZ3RoKCkKICAgICAgICAgfHwgc2VnbWVudC52aWRlb1RyYWNrcy5zaXplKCkgIT0gdmlk
ZW9UcmFja3MoKS0+bGVuZ3RoKCkKQEAgLTEyODksMTEgKzEyOTcsNDUgQEAgcHVibGljOgogICAg
IH0KIH07CiAKK3ZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRFcnJvcihib29sIGRlY29kZUVycm9y
UGFyYW0pCit7CisgICAgLy8gMy41LjMgQXBwZW5kIEVycm9yIEFsZ29yaXRobQorICAgIC8vIGh0
dHBzOi8vcmF3Z2l0LmNvbS93M2MvbWVkaWEtc291cmNlL2MzYWQ1OWM3YTM3MGQwNDQzMDk2OWJh
NzNkMThkYzliY2RlNTdhMzMvaW5kZXguaHRtbCNzb3VyY2VidWZmZXItYXBwZW5kLWVycm9yIFtF
ZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTVdCisKKyAgICBBU1NFUlQobV91cGRhdGluZyk7
CisgICAgLy8gMS4gUnVuIHRoZSByZXNldCBwYXJzZXIgc3RhdGUgYWxnb3JpdGhtLgorICAgIHJl
c2V0UGFyc2VyU3RhdGUoKTsKKworICAgIC8vIDIuIFNldCB0aGUgdXBkYXRpbmcgYXR0cmlidXRl
IHRvIGZhbHNlLgorICAgIG1fdXBkYXRpbmcgPSBmYWxzZTsKKworICAgIC8vIDMuIFF1ZXVlIGEg
dGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGVycm9yIGF0IHRoaXMgU291cmNlQnVm
ZmVyIG9iamVjdC4KKyAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsK
KworICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHVw
ZGF0ZWVuZCBhdCB0aGlzIFNvdXJjZUJ1ZmZlciBvYmplY3QuCisgICAgc2NoZWR1bGVFdmVudChl
dmVudE5hbWVzKCkudXBkYXRlZW5kRXZlbnQpOworCisgICAgLy8gNS4gSWYgZGVjb2RlIGVycm9y
IGlzIHRydWUsIHRoZW4gcnVuIHRoZSBlbmQgb2Ygc3RyZWFtIGFsZ29yaXRobSB3aXRoIHRoZSBl
cnJvciBwYXJhbWV0ZXIgc2V0IHRvICJkZWNvZGUiLgorICAgIGlmIChkZWNvZGVFcnJvclBhcmFt
KQorICAgICAgICBtX3NvdXJjZS0+c3RyZWFtRW5kZWRXaXRoRXJyb3IoZGVjb2RlRXJyb3IoKSwg
SWdub3JhYmxlRXhjZXB0aW9uQ29kZSgpKTsKK30KKwogdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJj
ZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXNz
UmVmUHRyPE1lZGlhU2FtcGxlPiBwcnBTYW1wbGUpCiB7CiAgICAgaWYgKGlzUmVtb3ZlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyAzLjUuMSBTZWdtZW50IFBhcnNlciBMb29wCisgICAg
Ly8gNi4xIElmIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50IHJlY2VpdmVkIGZsYWcg
aXMgZmFsc2UsIHRoZW4gcnVuIHRoZSBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtCisgICAgLy8gICAg
IHdpdGggdGhlIGRlY29kZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIHRydWUgYW5kIGFib3J0IHRo
aXMgYWxnb3JpdGhtLgorICAgIC8vIE5vdGU6IGN1cnJlbnQgZGVzaWduIG1ha2VzIFNvdXJjZUJ1
ZmZlciBzb21laG93IGlnbm9yYW50IG9mIGFwcGVuZCBzdGF0ZSAtIGl0J3MgbW9yZSBhIHRoaW5n
CisgICAgLy8gIG9mIFNvdXJjZUJ1ZmZlclByaXZhdGUuIFRoYXQncyB3aHkgdGhpcyBjaGVjayBj
YW4ndCByZWFsbHkgYmUgZG9uZSBpbiBhcHBlbmRJbnRlcm5hbC4KKyAgICAvLyAgdW5sZXNzIHdl
IGZvcmNlIHNvbWUga2luZCBvZiBkZXNpZ24gd2l0aCBzdGF0ZSBtYWNoaW5lIHN3aXRjaGluZy4K
KyAgICBpZiAoIW1fcmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudCkgeworICAgICAg
ICBhcHBlbmRFcnJvcih0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gc2FtcGxlID0gcHJwU2FtcGxlOwogCiAgICAgLy8gMy41LjggQ29kZWQg
RnJhbWUgUHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmgKaW5kZXggNWI5ZjcwMy4uNDcyNjZiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCkBAIC05Miw2ICs5
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZShkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbW92ZShjb25zdCBNZWRpYVRpbWUmLCBjb25z
dCBNZWRpYVRpbWUmLCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2b2lkIGFwcGVuZEVycm9yKGJv
b2wpOwogICAgIHZvaWQgYWJvcnRJZlVwZGF0aW5nKCk7CiAgICAgdm9pZCByZW1vdmVkRnJvbU1l
ZGlhU291cmNlKCk7CiAgICAgdm9pZCBzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>