<?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>145110</bug_id>
          
          <creation_ts>2015-05-17 12:51:34 -0700</creation_ts>
          <short_desc>[Streams API] Migrate closed promise handling from ReadableStreamReader to ReadableStream</short_desc>
          <delta_ts>2015-05-19 13:44:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1095519</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-17 12:51:34 -0700</bug_when>
    <thetext>Following on bug 144907, resolution of closed promise should be moved to ReadableStream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095520</commentid>
    <comment_count>1</comment_count>
      <attachid>253294</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-17 13:12:29 -0700</bug_when>
    <thetext>Created attachment 253294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095524</commentid>
    <comment_count>2</comment_count>
      <attachid>253294</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-17 14:16:13 -0700</bug_when>
    <thetext>Comment on attachment 253294
Patch

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

&gt; Source/WebCore/Modules/streams/ReadableStream.h:79
&gt; +    typedef std::function&lt;void(JSC::JSValue)&gt; ClosedFailureCallback;

I should have probably made the parameter a const JSC::JSValue&amp;.
Can be updated at landing time or in a future version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095528</commentid>
    <comment_count>3</comment_count>
      <attachid>253297</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-17 15:01:02 -0700</bug_when>
    <thetext>Created attachment 253297
Fixing unlocking of client + style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095951</commentid>
    <comment_count>4</comment_count>
      <attachid>253297</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-19 08:52:26 -0700</bug_when>
    <thetext>Comment on attachment 253297
Fixing unlocking of client + style

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

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:61
&gt; +void ReadableStream::cleanCallbacks()

I would say “clear” here, not “clean”.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:-66
&gt; -    if (!m_reader)
&gt; -        return;

What guarantees m_reader is non-null? I don’t think we want to append a null pointer to m_releasedReaders.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:77
&gt; +    if (!m_closedSuccessCallback)
&gt; +        return;
&gt; +    m_closedSuccessCallback();
&gt; +    cleanCallbacks();

What if m_closedFailureCallback is non-null, but m_closedSuccessCallback is null? We are going to keep it around here and not clear it. Is that really what we want? I think we want to clear the callbacks unconditionally.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:-77
&gt; -    if (!m_reader)
&gt; -        return;

What guarantees m_reader is non-null? I don’t think we want to append a null pointer to m_releasedReaders.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:90
&gt; +    if (!m_closedFailureCallback)
&gt; +        return;
&gt; +    m_closedFailureCallback(error());
&gt; +    cleanCallbacks();

What if m_closedFailureCallback is non-null, but m_closedSuccessCallback is null? We are going to keep it around here and not clear it. Is that really what we want? I think we want to clear the callbacks unconditionally.

&gt; Source/WebCore/Modules/streams/ReadableStream.h:64
&gt;      ReadableStreamReader&amp; getReader();

This is not our normal naming scheme. We call this something like ensureReader, I think. We had a discussion of this a while back.

&gt; Source/WebCore/Modules/streams/ReadableStream.h:66
&gt; +    const ReadableStreamReader* reader() const { return m_reader.get(); }

This should be right next to getReader above since they are a closely related pair, not after the isLocked function. I also think it’s strange that &quot;has a reader&quot; and &quot;is locked&quot; are the same concept.

&gt; Source/WebCore/Modules/streams/ReadableStream.h:79
&gt; +    typedef std::function&lt;void(const JSC::JSValue&amp;)&gt; ClosedFailureCallback;

This should just be JSC::JSValue. We don’t want to pass those by const&amp;.

&gt; Source/WebCore/Modules/streams/ReadableStreamReader.cpp:39
&gt; +    if (m_stream.isReadable() &amp;&amp; m_stream.reader()  != this) {

Extra space here before the &quot;!=&quot;.

&gt; Source/WebCore/Modules/streams/ReadableStreamReader.h:52
&gt;      ReadableStreamReader(ReadableStream&amp; stream)
&gt;          : m_stream(stream) { };

Semicolon here should be removed. Also, I suggest either putting this all on one line rather than two lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095977</commentid>
    <comment_count>5</comment_count>
      <attachid>253297</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-19 10:07:51 -0700</bug_when>
    <thetext>Comment on attachment 253297
Fixing unlocking of client + style

Thanks for the review.
I will fix most points when landing.

As of getReader()/ensureReader(), there are pros and cons, since getReader maps to its JS counter-part and I am not sure native code will use readers.


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

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:61
&gt;&gt; +void ReadableStream::cleanCallbacks()
&gt; 
&gt; I would say “clear” here, not “clean”.

OK

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:-66
&gt;&gt; -        return;
&gt; 
&gt; What guarantees m_reader is non-null? I don’t think we want to append a null pointer to m_releasedReaders.

OK

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:77
&gt;&gt; +    cleanCallbacks();
&gt; 
&gt; What if m_closedFailureCallback is non-null, but m_closedSuccessCallback is null? We are going to keep it around here and not clear it. Is that really what we want? I think we want to clear the callbacks unconditionally.

Agreed, I fixed that in bug 144790 latest patch.
But I will update it here before landing.

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:-77
&gt;&gt; -        return;
&gt; 
&gt; What guarantees m_reader is non-null? I don’t think we want to append a null pointer to m_releasedReaders.

OK

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:90
&gt;&gt; +    cleanCallbacks();
&gt; 
&gt; What if m_closedFailureCallback is non-null, but m_closedSuccessCallback is null? We are going to keep it around here and not clear it. Is that really what we want? I think we want to clear the callbacks unconditionally.

OK

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.h:64
&gt;&gt;      ReadableStreamReader&amp; getReader();
&gt; 
&gt; This is not our normal naming scheme. We call this something like ensureReader, I think. We had a discussion of this a while back.

But it maps to the getReader() JS function.
I named it first createReader() because it always creates a reader.
Changed to getReader now that we return a &amp;.

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.h:66
&gt;&gt; +    const ReadableStreamReader* reader() const { return m_reader.get(); }
&gt; 
&gt; This should be right next to getReader above since they are a closely related pair, not after the isLocked function. I also think it’s strange that &quot;has a reader&quot; and &quot;is locked&quot; are the same concept.

OK to move reader() close to getReader()

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.h:79
&gt;&gt; +    typedef std::function&lt;void(const JSC::JSValue&amp;)&gt; ClosedFailureCallback;
&gt; 
&gt; This should just be JSC::JSValue. We don’t want to pass those by const&amp;.

Out of curiosity, what is the rationale behind that?

&gt;&gt; Source/WebCore/Modules/streams/ReadableStreamReader.cpp:39
&gt;&gt; +    if (m_stream.isReadable() &amp;&amp; m_stream.reader()  != this) {
&gt; 
&gt; Extra space here before the &quot;!=&quot;.

OK

&gt;&gt; Source/WebCore/Modules/streams/ReadableStreamReader.h:52
&gt;&gt;          : m_stream(stream) { };
&gt; 
&gt; Semicolon here should be removed. Also, I suggest either putting this all on one line rather than two lines.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095992</commentid>
    <comment_count>6</comment_count>
      <attachid>253389</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-19 12:34:52 -0700</bug_when>
    <thetext>Created attachment 253389
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096008</commentid>
    <comment_count>7</comment_count>
      <attachid>253389</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-19 13:02:54 -0700</bug_when>
    <thetext>Comment on attachment 253389
Patch for landing

Clearing flags on attachment: 253389

Committed r184585: &lt;http://trac.webkit.org/changeset/184585&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096009</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-19 13:02:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096025</commentid>
    <comment_count>9</comment_count>
      <attachid>253297</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-19 13:44:36 -0700</bug_when>
    <thetext>Comment on attachment 253297
Fixing unlocking of client + style

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

&gt;&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.h:79
&gt;&gt;&gt; +    typedef std::function&lt;void(const JSC::JSValue&amp;)&gt; ClosedFailureCallback;
&gt;&gt; 
&gt;&gt; This should just be JSC::JSValue. We don’t want to pass those by const&amp;.
&gt; 
&gt; Out of curiosity, what is the rationale behind that?

JSC::JSValue is a single 64-bit value and fits in a register on our typical 64-bit platforms. Needlessly passing it by const&amp; just makes code with unnecessarily poorer performance. Analogous passing const int&amp; instead of int.

Also, there’s always a small downside to passing anything as a const&amp; instead of a value, since it has happened in practice that someone passed a data member, and then while the code was running the object it was passed in from was deallocated and overwritten. That can’t happen when passing by value so passing by value should be the default and passing a const&amp; should be considered an optimization.

Even for objects that are a bit larger, if they have simple semantics it’s better to pass them by value instead of const&amp; as long as it’s efficient to copy the object. A WebKit example of this is StringView and you’ll see we never pass a const StringView&amp;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253294</attachid>
            <date>2015-05-17 13:12:29 -0700</date>
            <delta_ts>2015-05-17 15:00:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145110-20150517221224.patch</filename>
            <type>text/plain</type>
            <size>11668</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMwNzk2MzhjNGZlN2Zh
OTMxODFjN2FjODQzNGI0YjhhYzU2M2VjZC4uOTI3MzA1M2U1NmU5MjE0MDExZTk3NDZhMzBlYWUx
MDk4NGI5NDc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA1LTE3ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IE1pZ3JhdGUgY2xvc2VkIHByb21pc2UgaGFuZGxpbmcgZnJvbSBSZWFkYWJsZVN0cmVhbVJlYWRl
ciB0byBSZWFkYWJsZVN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVhZGVyIGlzIG5vdyBqdXN0IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgdGhl
IHJlYWRlciBsb2NraW5nIHRoZSBzdHJlYW0gb3Igbm90LgorICAgICAgICBJZiBub3QgYW5kIHN0
cmVhbSBpcyByZWFkYWJsZSwgaXQgcmVzb2x2ZXMgdGhlIGNsb3NlZCBwcm9taXNlLgorICAgICAg
ICBPdGhlcndpc2UsIGl0IGRlbGVnYXRlcyB0aGUgcHJvbWlzZSBoYW5kbGluZyB0byBpdHMgc3Ry
ZWFtLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZVN0cmVhbTo6Y2xlYW5DYWxsYmFja3MpOiBDbGVhbmluZyBvZiBjbG9zZWQgY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOiBS
ZXNvbHZpbmcgY2xvc2VkIHByb21pc2UgaWYgc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW06OmNoYW5nZVN0YXRlVG9FcnJvcmVkKTogUmVqZWN0aW5nIGNsb3NlZCBwcm9taXNl
IGlmIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIpOiBS
ZW1vdmVkIHJlYWRlciBzdGF0ZSBub3RpZmljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6Y2xvc2VkKTogTW92ZWQgZnJvbSByZWFkZXIgdG8gc3RyZWFtLgorICAgICAg
ICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVTdHJlYW06OnJlYWRlcik6IEFkZGVkIHRvIGFsbG93IHJlYWRlciB0byBjaGVjayB3
aGV0aGVyIGl0IGlzIGxvY2tpbmcgaXRzIHN0cmVhbSBvciBub3QuCisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZVN0cmVhbTo6aXNSZWFkYWJsZSk6IEFkZGVkIGFzIGFuIGltcHJvdmVtZW50IG92
ZXIgaW50ZXJuYWxTdGF0ZSB3aGljaCBpcyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW06OmludGVybmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1SZWFkZXIuaDogUmVtb3ZlZCBzdGF0ZSBhbmQgY2xvc2VkIHByb21pc2UgY2Fs
bGJhY2tzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
OjpjbG9zZSk6IFJlZmFjdG9yaW5nIG9mIGludGVybmFsU3RhdGUgdG8gaXNSZWFkYWJsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjplcnJvcik6IERpdHRv
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKTogUmVm
YWN0b3JpbmcgdG8gaGF2ZSB0aGUgcHJvbWlzZSB2YWx1ZSBhcyBjYWxsYmFjayBwYXJhbWV0ZXIu
CisKIDIwMTUtMDUtMTcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5m
cj4KIAogICAgICAgICBBdWRpb0NvbnRleHQgcmVzdW1lL2Nsb3NlL3N1c3BlbmQgc2hvdWxkIHJl
amVjdCBwcm9taXNlcyB3aXRoIGEgRE9NIGV4Y2VwdGlvbiBpbiBsaWV1IG9mIHRocm93aW5nIGV4
Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwCmluZGV4IDgyOWQ0MDhmYzFjYzI4NzE2MDlmMTZjZmNhNGY4OTc5OWM1YTcyZjEu
Ljc3NWJmYTYzNDI4ODAxMDI2ZjRlMmUyZWViMzIyMmI3M2EzYTMyNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZWFkYWJs
ZVN0cmVhbVJlYWRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTcsMTUgKzU4LDIyIEBAIFJlYWRhYmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNsZWFuQ2FsbGJhY2tzKCkKK3sKKyAgICBt
X2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayA9IG51bGxwdHI7CisgICAgbV9jbG9zZWRGYWlsdXJlQ2Fs
bGJhY2sgPSBudWxscHRyOworfQorCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6UmVhZGFibGUpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3NlZDsKLSAgICBpZiAoIW1fcmVhZGVy
KQorCisgICAgaWYgKCFtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fcmVhZGVyLT5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7Ci0gICAgbV9yZWxlYXNlZFJlYWRl
cnMuYXBwZW5kKFdURjo6bW92ZShtX3JlYWRlcikpOworICAgIG1fY2xvc2VkU3VjY2Vzc0NhbGxi
YWNrKCk7CisgICAgY2xlYW5DYWxsYmFja3MoKTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6
Y2hhbmdlU3RhdGVUb0Vycm9yZWQoKQpAQCAtNzMsMTAgKzgxLDExIEBAIHZvaWQgUmVhZGFibGVT
dHJlYW06OmNoYW5nZVN0YXRlVG9FcnJvcmVkKCkKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
UmVhZGFibGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlID0gU3RhdGU6OkVycm9yZWQ7
Ci0gICAgaWYgKCFtX3JlYWRlcikKKworICAgIGlmICghbV9jbG9zZWRGYWlsdXJlQ2FsbGJhY2sp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX3JlYWRlci0+Y2hhbmdlU3RhdGVUb0Vycm9yZWQoKTsK
LSAgICBtX3JlbGVhc2VkUmVhZGVycy5hcHBlbmQoV1RGOjptb3ZlKG1fcmVhZGVyKSk7CisgICAg
bV9jbG9zZWRGYWlsdXJlQ2FsbGJhY2soZXJyb3IoKSk7CisgICAgY2xlYW5DYWxsYmFja3MoKTsK
IH0KIAogUmVhZGFibGVTdHJlYW1SZWFkZXImIFJlYWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIoKQpA
QCAtOTEsMTUgKzEwMCwyNCBAQCBSZWFkYWJsZVN0cmVhbVJlYWRlciYgUmVhZGFibGVTdHJlYW06
OmdldFJlYWRlcigpCiAgICAgICAgIHJldHVybiByZWFkZXI7CiAgICAgfQogCi0gICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKLSAgICAgICAgcmVhZGVyLmNoYW5nZVN0YXRlVG9DbG9z
ZWQoKTsKLSAgICBlbHNlIGlmIChtX3N0YXRlID09IFN0YXRlOjpFcnJvcmVkKQotICAgICAgICBy
ZWFkZXIuY2hhbmdlU3RhdGVUb0Vycm9yZWQoKTsKICAgICBtX3JlbGVhc2VkUmVhZGVycy5hcHBl
bmQoV1RGOjptb3ZlKG5ld1JlYWRlcikpOwotCiAgICAgcmV0dXJuIHJlYWRlcjsKIH0KIAordm9p
ZCBSZWFkYWJsZVN0cmVhbTo6Y2xvc2VkKENsb3NlZFN1Y2Nlc3NDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2ssIENsb3NlZEZhaWx1cmVDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCit7CisgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkgeworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6RXJyb3Jl
ZCkgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2sgPSBXVEY6Om1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKTsKKyAgICBtX2Nsb3NlZEZhaWx1cmVDYWxsYmFjayA9IFdURjo6bW92ZShmYWlsdXJl
Q2FsbGJhY2spOworfQorCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpzdGFydCgpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtLmgKaW5kZXggYjFiZDA2MGU1NGE4ZmIzM2UzY2E1NTI2YmFhNjY0NDU5MzVmNzgz
OC4uYTI1MDdiYmU0N2MxYTJlYjc0NWYyNTUyZTE1OTIyNzhmOWE4MWJiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTYzLDEwICs2
MywxMSBAQCBwdWJsaWM6CiAKICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlciYgZ2V0UmVhZGVyKCk7
CiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9yZWFkZXI7IH0KKyAgICBj
b25zdCBSZWFkYWJsZVN0cmVhbVJlYWRlciogcmVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWFk
ZXIuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGVycm9yKCkgPSAwOworICAg
IGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OlJlYWRh
YmxlOyB9CiAKLSAgICBTdGF0ZSBpbnRlcm5hbFN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQor
ICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGVycm9yKCkgPSAwOwogCiAgICAgdm9pZCBzdGFydCgp
OwogICAgIHZvaWQgY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOwpAQCAtNzQsNiArNzUsMTAgQEAgcHVi
bGljOgogCiAgICAgUmVhZGFibGVTdHJlYW1Tb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291
cmNlLmdldCgpOyB9CiAKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBDbG9zZWRT
dWNjZXNzQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoSlNDOjpKU1Zh
bHVlKT4gQ2xvc2VkRmFpbHVyZUNhbGxiYWNrOworICAgIHZvaWQgY2xvc2VkKENsb3NlZFN1Y2Nl
c3NDYWxsYmFjaywgQ2xvc2VkRmFpbHVyZUNhbGxiYWNrKTsKKwogcHJvdGVjdGVkOgogICAgIFJl
YWRhYmxlU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFibGVTdHJlYW1T
b3VyY2U+JiYpOwogCkBAIC04Miw5ICs4NywxNCBAQCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIq
IGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGNhblN1c3Bl
bmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIHZvaWQgY2xlYW5DYWxsYmFj
a3MoKTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFkYWJsZVN0cmVhbVJlYWRlcj4gbV9yZWFk
ZXI7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxSZWFkYWJsZVN0cmVhbVJlYWRlcj4+IG1f
cmVsZWFzZWRSZWFkZXJzOwogCisgICAgQ2xvc2VkU3VjY2Vzc0NhbGxiYWNrIG1fY2xvc2VkU3Vj
Y2Vzc0NhbGxiYWNrOworICAgIENsb3NlZEZhaWx1cmVDYWxsYmFjayBtX2Nsb3NlZEZhaWx1cmVD
YWxsYmFjazsKKwogICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6UmVhZGFibGUgfTsKICAgICBS
ZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+IG1fc291cmNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwCmluZGV4
IDFkNzlhNGIxNzJiODEzYTRkYmMwYzFkNTUyOTNmOWI5ZWQ1YzM5NzEuLjEzOWE4ODY1ODdhM2Q3
NDA4MTNiNjcwMGVhMmE0YzFlMmI2Yjk4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcApAQCAtMzIsNTQgKzMy
LDE1IEBACiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUmVhZGFibGVTdHJlYW1SZWFk
ZXI6OmNsZWFuKCkKK3ZvaWQgUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChSZWFkYWJsZVN0
cmVhbTo6Q2xvc2VkU3VjY2Vzc0NhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgUmVhZGFibGVTdHJl
YW06OkNsb3NlZEZhaWx1cmVDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCiB7Ci0gICAgbV9jbG9z
ZWRTdWNjZXNzQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fY2xvc2VkRXJyb3JDYWxsYmFjayA9
IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChDbG9zZWRT
dWNjZXNzQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBDbG9zZWRFcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2spCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkgeworICAgIGlm
IChtX3N0cmVhbS5pc1JlYWRhYmxlKCkgJiYgbV9zdHJlYW0ucmVhZGVyKCkgICE9IHRoaXMpIHsK
ICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkVycm9yZWQpIHsKLSAgICAgICAgZXJyb3JDYWxsYmFjayht
X3N0cmVhbSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jbG9zZWRTdWNjZXNzQ2Fs
bGJhY2sgPSBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBtX2Nsb3NlZEVycm9yQ2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZXJyb3JDYWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVhZGFibGVTdHJl
YW1SZWFkZXI6OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09
IFN0YXRlOjpSZWFkYWJsZSk7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlOjpDbG9zZWQ7Ci0KLSAgICBp
ZiAobV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2spCi0gICAgICAgIG1fY2xvc2VkU3VjY2Vzc0NhbGxi
YWNrKCk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJlYWQgcHJvbWlzZSBmdWxmaWxsaW5n
LgotCi0gICAgY2xlYW4oKTsKLX0KLQotdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2hhbmdl
U3RhdGVUb0Vycm9yZWQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpSZWFkYWJs
ZSk7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlOjpFcnJvcmVkOwotCi0gICAgaWYgKG1fY2xvc2VkRXJy
b3JDYWxsYmFjaykKLSAgICAgICAgbV9jbG9zZWRFcnJvckNhbGxiYWNrKG1fc3RyZWFtKTsKLQot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVhZCBwcm9taXNlIHJlamVjdGlvbi4KLQotICAgIGNs
ZWFuKCk7CisgICAgbV9zdHJlYW0uY2xvc2VkKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBX
VEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKaW5kZXggZDE3NmU5
NmI4Y2Q4NTgxMjk0MmQ2MWMwMDk0YjdjNWEwOTI4MDAxYS4uOTdmODRjZGFhN2U3ODYxYjM2YWVk
ZDBlY2Y2ZWRmMjM2YmEzNDc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKQEAgLTQ4LDMzICs0OCwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBTZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8j
cmVhZGVyLWNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogY2xhc3MgUmVhZGFibGVTdHJlYW1S
ZWFkZXIgewogcHVibGljOgotICAgIGVudW0gY2xhc3MgU3RhdGUgewotICAgICAgICBSZWFkYWJs
ZSwKLSAgICAgICAgQ2xvc2VkLAotICAgICAgICBFcnJvcmVkCi0gICAgfTsKLQogICAgIFJlYWRh
YmxlU3RyZWFtUmVhZGVyKFJlYWRhYmxlU3RyZWFtJiBzdHJlYW0pCiAgICAgICAgIDogbV9zdHJl
YW0oc3RyZWFtKSB7IH07CiAKLSAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBDbG9z
ZWRTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVhZGFi
bGVTdHJlYW0mKT4gQ2xvc2VkRXJyb3JDYWxsYmFjazsKLSAgICB2b2lkIGNsb3NlZChDbG9zZWRT
dWNjZXNzQ2FsbGJhY2ssIENsb3NlZEVycm9yQ2FsbGJhY2spOwotCi0gICAgdm9pZCBjaGFuZ2VT
dGF0ZVRvQ2xvc2VkKCk7Ci0gICAgdm9pZCBjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgpOworICAgIHZv
aWQgY2xvc2VkKFJlYWRhYmxlU3RyZWFtOjpDbG9zZWRTdWNjZXNzQ2FsbGJhY2ssIFJlYWRhYmxl
U3RyZWFtOjpDbG9zZWRGYWlsdXJlQ2FsbGJhY2spOwogCiAgICAgdm9pZCByZWYoKSB7IG1fc3Ry
ZWFtLnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgbV9zdHJlYW0uZGVyZWYoKTsgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgY2xlYW4oKTsKLQogICAgIFJlYWRhYmxlU3RyZWFtJiBtX3N0cmVh
bTsKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlJlYWRhYmxlIH07Ci0KLSAgICBDbG9zZWRT
dWNjZXNzQ2FsbGJhY2sgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgQ2xvc2VkRXJyb3JD
YWxsYmFjayBtX2Nsb3NlZEVycm9yQ2FsbGJhY2s7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlckN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ29udHJvbGxl
ckN1c3RvbS5jcHAKaW5kZXggYmE5NDIzNjc3Mjg1ZmVjMDRjNzU1ZGU2ZjM1MjNjOTk1MWE4MmMy
NC4uNGI1ZDc4OGFkYzQ2ZjYzZWQ4ZDU4NzIyYWU1OGU2ZmYwMjIzMjE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1D
b250cm9sbGVyQ3VzdG9tLmNwcApAQCAtNDUsNyArNDUsNyBAQCBKU1ZhbHVlIEpTUmVhZGFibGVT
dHJlYW1Db250cm9sbGVyOjpjbG9zZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVhZGFibGVK
U1N0cmVhbSYgc3RyZWFtID0gaW1wbCgpLnN0cmVhbSgpOwogICAgIC8vIEZJWE1FOiBIYW5kbGUg
dGhlIGNhc2Ugb2YgZHJhaW5pbmcuCi0gICAgaWYgKHN0cmVhbS5pbnRlcm5hbFN0YXRlKCkgIT0g
UmVhZGFibGVTdHJlYW06OlN0YXRlOjpSZWFkYWJsZSkKKyAgICBpZiAoIXN0cmVhbS5pc1JlYWRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNhbGxpbmcgY2xvc2Ugb24gYSBzdHJl
YW0gd2hpY2ggaXMgbm90IHJlYWRhYmxlIikpKTsKICAgICBzdHJlYW0uY2hhbmdlU3RhdGVUb0Ns
b3NlZCgpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNjAsNyArNjAsNyBAQCBKU1Zh
bHVlIEpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjplbnF1ZXVlKEV4ZWNTdGF0ZSopCiBKU1Zh
bHVlIEpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjplcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgUmVhZGFibGVKU1N0cmVhbSYgc3RyZWFtID0gaW1wbCgpLnN0cmVhbSgpOwotICAgIGlm
IChzdHJlYW0uaW50ZXJuYWxTdGF0ZSgpICE9IFJlYWRhYmxlU3RyZWFtOjpTdGF0ZTo6UmVhZGFi
bGUpCisgICAgaWYgKCFzdHJlYW0uaXNSZWFkYWJsZSgpKQogICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJDYWxsaW5nIGVycm9yIG9uIGEgc3RyZWFtIHdoaWNoIGlzIG5vdCByZWFkYWJsZSIpKSk7
CiAgICAgc3RyZWFtLnN0b3JlRXJyb3IoKmV4ZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVh
bVJlYWRlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtUmVhZGVyQ3VzdG9tLmNwcAppbmRleCBiN2ExZjE5ZWVkZTEwZGZkNmUwNzg5MWVjOWEx
OGU0YmQ2MDJmNjkwLi45YzNjMWRlZDgwNTczMmRmYzRkZjllYjRlZDk5MzgzMTY1ZTQ3M2RmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVh
ZGVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtUmVhZGVyQ3VzdG9tLmNwcApAQCAtNzUsOCArNzUsOCBAQCBKU1ZhbHVlIEpTUmVhZGFi
bGVTdHJlYW1SZWFkZXI6OmNsb3NlZChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgYXV0byBz
dWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5y
ZXNvbHZlKGpzVW5kZWZpbmVkKCkpOwogICAgIH07Ci0gICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sg
PSBbd3JhcHBlcl0oUmVhZGFibGVTdHJlYW0mIHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdy
YXBwZXIucmVqZWN0KHN0cmVhbS5lcnJvcigpKTsKKyAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9
IFt3cmFwcGVyXShKU1ZhbHVlIHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgd3JhcHBlci5yZWpl
Y3QodmFsdWUpOwogICAgIH07CiAKICAgICBpbXBsKCkuY2xvc2VkKFdURjo6bW92ZShzdWNjZXNz
Q2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253297</attachid>
            <date>2015-05-17 15:01:02 -0700</date>
            <delta_ts>2015-05-19 12:34:42 -0700</delta_ts>
            <desc>Fixing unlocking of client + style</desc>
            <filename>bug-145110-20150518000057.patch</filename>
            <type>text/plain</type>
            <size>11716</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMwNzk2MzhjNGZlN2Zh
OTMxODFjN2FjODQzNGI0YjhhYzU2M2VjZC4uOTI3MzA1M2U1NmU5MjE0MDExZTk3NDZhMzBlYWUx
MDk4NGI5NDc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA1LTE3ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IE1pZ3JhdGUgY2xvc2VkIHByb21pc2UgaGFuZGxpbmcgZnJvbSBSZWFkYWJsZVN0cmVhbVJlYWRl
ciB0byBSZWFkYWJsZVN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVhZGVyIGlzIG5vdyBqdXN0IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgdGhl
IHJlYWRlciBsb2NraW5nIHRoZSBzdHJlYW0gb3Igbm90LgorICAgICAgICBJZiBub3QgYW5kIHN0
cmVhbSBpcyByZWFkYWJsZSwgaXQgcmVzb2x2ZXMgdGhlIGNsb3NlZCBwcm9taXNlLgorICAgICAg
ICBPdGhlcndpc2UsIGl0IGRlbGVnYXRlcyB0aGUgcHJvbWlzZSBoYW5kbGluZyB0byBpdHMgc3Ry
ZWFtLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZVN0cmVhbTo6Y2xlYW5DYWxsYmFja3MpOiBDbGVhbmluZyBvZiBjbG9zZWQgY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOiBS
ZXNvbHZpbmcgY2xvc2VkIHByb21pc2UgaWYgc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW06OmNoYW5nZVN0YXRlVG9FcnJvcmVkKTogUmVqZWN0aW5nIGNsb3NlZCBwcm9taXNl
IGlmIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIpOiBS
ZW1vdmVkIHJlYWRlciBzdGF0ZSBub3RpZmljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6Y2xvc2VkKTogTW92ZWQgZnJvbSByZWFkZXIgdG8gc3RyZWFtLgorICAgICAg
ICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVTdHJlYW06OnJlYWRlcik6IEFkZGVkIHRvIGFsbG93IHJlYWRlciB0byBjaGVjayB3
aGV0aGVyIGl0IGlzIGxvY2tpbmcgaXRzIHN0cmVhbSBvciBub3QuCisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZVN0cmVhbTo6aXNSZWFkYWJsZSk6IEFkZGVkIGFzIGFuIGltcHJvdmVtZW50IG92
ZXIgaW50ZXJuYWxTdGF0ZSB3aGljaCBpcyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW06OmludGVybmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1SZWFkZXIuaDogUmVtb3ZlZCBzdGF0ZSBhbmQgY2xvc2VkIHByb21pc2UgY2Fs
bGJhY2tzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
OjpjbG9zZSk6IFJlZmFjdG9yaW5nIG9mIGludGVybmFsU3RhdGUgdG8gaXNSZWFkYWJsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjplcnJvcik6IERpdHRv
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKTogUmVm
YWN0b3JpbmcgdG8gaGF2ZSB0aGUgcHJvbWlzZSB2YWx1ZSBhcyBjYWxsYmFjayBwYXJhbWV0ZXIu
CisKIDIwMTUtMDUtMTcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5m
cj4KIAogICAgICAgICBBdWRpb0NvbnRleHQgcmVzdW1lL2Nsb3NlL3N1c3BlbmQgc2hvdWxkIHJl
amVjdCBwcm9taXNlcyB3aXRoIGEgRE9NIGV4Y2VwdGlvbiBpbiBsaWV1IG9mIHRocm93aW5nIGV4
Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwCmluZGV4IDgyOWQ0MDhmYzFjYzI4NzE2MDlmMTZjZmNhNGY4OTc5OWM1YTcyZjEu
LmYyMmExMmFjNTY3ODVlY2VlNzI1OTc2NDk4ZTk0YjEzYTVmMGQ4MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZWFkYWJs
ZVN0cmVhbVJlYWRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTcsMTUgKzU4LDIzIEBAIFJlYWRhYmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNsZWFuQ2FsbGJhY2tzKCkKK3sKKyAgICBt
X2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayA9IG51bGxwdHI7CisgICAgbV9jbG9zZWRGYWlsdXJlQ2Fs
bGJhY2sgPSBudWxscHRyOworfQorCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6UmVhZGFibGUpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3NlZDsKLSAgICBpZiAoIW1fcmVhZGVy
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZWFkZXItPmNoYW5nZVN0YXRlVG9DbG9zZWQoKTsK
ICAgICBtX3JlbGVhc2VkUmVhZGVycy5hcHBlbmQoV1RGOjptb3ZlKG1fcmVhZGVyKSk7CisKKyAg
ICBpZiAoIW1fY2xvc2VkU3VjY2Vzc0NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgbV9j
bG9zZWRTdWNjZXNzQ2FsbGJhY2soKTsKKyAgICBjbGVhbkNhbGxiYWNrcygpOwogfQogCiB2b2lk
IFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgpCkBAIC03MywxMCArODIsMTIg
QEAgdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2hhbmdlU3RhdGVUb0Vycm9yZWQoKQogICAgIGlmICht
X3N0YXRlICE9IFN0YXRlOjpSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUg
PSBTdGF0ZTo6RXJyb3JlZDsKLSAgICBpZiAoIW1fcmVhZGVyKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9yZWFkZXItPmNoYW5nZVN0YXRlVG9FcnJvcmVkKCk7CiAgICAgbV9yZWxlYXNlZFJlYWRl
cnMuYXBwZW5kKFdURjo6bW92ZShtX3JlYWRlcikpOworCisgICAgaWYgKCFtX2Nsb3NlZEZhaWx1
cmVDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xvc2VkRmFpbHVyZUNhbGxiYWNr
KGVycm9yKCkpOworICAgIGNsZWFuQ2FsbGJhY2tzKCk7CiB9CiAKIFJlYWRhYmxlU3RyZWFtUmVh
ZGVyJiBSZWFkYWJsZVN0cmVhbTo6Z2V0UmVhZGVyKCkKQEAgLTkxLDE1ICsxMDIsMjQgQEAgUmVh
ZGFibGVTdHJlYW1SZWFkZXImIFJlYWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIoKQogICAgICAgICBy
ZXR1cm4gcmVhZGVyOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQp
Ci0gICAgICAgIHJlYWRlci5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7Ci0gICAgZWxzZSBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6RXJyb3JlZCkKLSAgICAgICAgcmVhZGVyLmNoYW5nZVN0YXRlVG9FcnJv
cmVkKCk7CiAgICAgbV9yZWxlYXNlZFJlYWRlcnMuYXBwZW5kKFdURjo6bW92ZShuZXdSZWFkZXIp
KTsKLQogICAgIHJldHVybiByZWFkZXI7CiB9CiAKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNsb3Nl
ZChDbG9zZWRTdWNjZXNzQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBDbG9zZWRGYWlsdXJlQ2Fs
bGJhY2sgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9z
ZWQpIHsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkVycm9yZWQpIHsKKyAgICAgICAgZmFpbHVyZUNh
bGxiYWNrKGVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2xvc2VkU3Vj
Y2Vzc0NhbGxiYWNrID0gV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgbV9jbG9zZWRG
YWlsdXJlQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKTsKK30KKwogdm9pZCBS
ZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IGIxYmQw
NjBlNTRhOGZiMzNlM2NhNTUyNmJhYTY2NDQ1OTM1Zjc4MzguLmVjOGM4OWFkZTFiZjAyNzE5MDI2
Y2I3ZmViZjk3ZGRkMjE3OGE1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC02MywxMCArNjMsMTEgQEAgcHVibGljOgogCiAgICAg
UmVhZGFibGVTdHJlYW1SZWFkZXImIGdldFJlYWRlcigpOwogICAgIGJvb2wgaXNMb2NrZWQoKSBj
b25zdCB7IHJldHVybiAhIW1fcmVhZGVyOyB9CisgICAgY29uc3QgUmVhZGFibGVTdHJlYW1SZWFk
ZXIqIHJlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmdldCgpOyB9CiAKLSAgICB2aXJ0
dWFsIEpTQzo6SlNWYWx1ZSBlcnJvcigpID0gMDsKKyAgICBib29sIGlzUmVhZGFibGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpSZWFkYWJsZTsgfQogCi0gICAgU3RhdGUgaW50
ZXJuYWxTdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1
ZSBlcnJvcigpID0gMDsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIGNoYW5nZVN0YXRl
VG9DbG9zZWQoKTsKQEAgLTc0LDYgKzc1LDEwIEBAIHB1YmxpYzoKIAogICAgIFJlYWRhYmxlU3Ry
ZWFtU291cmNlJiBzb3VyY2UoKSB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQogCisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gQ2xvc2VkU3VjY2Vzc0NhbGxiYWNrOworICAgIHR5
cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IEpTQzo6SlNWYWx1ZSYpPiBDbG9zZWRGYWls
dXJlQ2FsbGJhY2s7CisgICAgdm9pZCBjbG9zZWQoQ2xvc2VkU3VjY2Vzc0NhbGxiYWNrLCBDbG9z
ZWRGYWlsdXJlQ2FsbGJhY2spOworCiBwcm90ZWN0ZWQ6CiAgICAgUmVhZGFibGVTdHJlYW0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxSZWFkYWJsZVN0cmVhbVNvdXJjZT4mJik7CiAKQEAg
LTgyLDkgKzg3LDE0IEBAIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGNvbnN0IG92ZXJyaWRlOwogCisgICAgdm9pZCBjbGVhbkNhbGxiYWNrcygpOworCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWRhYmxlU3RyZWFtUmVhZGVyPiBtX3JlYWRlcjsKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFJlYWRhYmxlU3RyZWFtUmVhZGVyPj4gbV9yZWxlYXNlZFJlYWRlcnM7
CiAKKyAgICBDbG9zZWRTdWNjZXNzQ2FsbGJhY2sgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2s7Cisg
ICAgQ2xvc2VkRmFpbHVyZUNhbGxiYWNrIG1fY2xvc2VkRmFpbHVyZUNhbGxiYWNrOworCiAgICAg
U3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpSZWFkYWJsZSB9OwogICAgIFJlZjxSZWFkYWJsZVN0cmVh
bVNvdXJjZT4gbV9zb3VyY2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAKaW5kZXggMWQ3OWE0YjE3MmI4MTNh
NGRiYzBjMWQ1NTI5M2Y5YjllZDVjMzk3MS4uMTM5YTg4NjU4N2EzZDc0MDgxM2I2NzAwZWEyYTRj
MWUyYjZiOTgyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwCkBAIC0zMiw1NCArMzIsMTUgQEAKIAogI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xlYW4oKQordm9p
ZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKFJlYWRhYmxlU3RyZWFtOjpDbG9zZWRTdWNj
ZXNzQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBSZWFkYWJsZVN0cmVhbTo6Q2xvc2VkRmFpbHVy
ZUNhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKIHsKLSAgICBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFj
ayA9IG51bGxwdHI7Ci0gICAgbV9jbG9zZWRFcnJvckNhbGxiYWNrID0gbnVsbHB0cjsKLX0KLQot
dm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKENsb3NlZFN1Y2Nlc3NDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2ssIENsb3NlZEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykKLXsKLSAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKSB7CisgICAgaWYgKG1fc3RyZWFtLmlzUmVh
ZGFibGUoKSAmJiBtX3N0cmVhbS5yZWFkZXIoKSAgIT0gdGhpcykgewogICAgICAgICBzdWNjZXNz
Q2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6RXJyb3JlZCkgewotICAgICAgICBlcnJvckNhbGxiYWNrKG1fc3RyZWFtKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayA9IFdURjo6bW92
ZShzdWNjZXNzQ2FsbGJhY2spOwotICAgIG1fY2xvc2VkRXJyb3JDYWxsYmFjayA9IFdURjo6bW92
ZShlcnJvckNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2hhbmdl
U3RhdGVUb0Nsb3NlZCgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlJlYWRhYmxl
KTsKLSAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3NlZDsKLQotICAgIGlmIChtX2Nsb3NlZFN1Y2Nl
c3NDYWxsYmFjaykKLSAgICAgICAgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2soKTsKLQotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmVhZCBwcm9taXNlIGZ1bGZpbGxpbmcuCi0KLSAgICBjbGVhbigp
OwotfQotCi12b2lkIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgp
Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlJlYWRhYmxlKTsKLSAgICBtX3N0YXRl
ID0gU3RhdGU6OkVycm9yZWQ7Ci0KLSAgICBpZiAobV9jbG9zZWRFcnJvckNhbGxiYWNrKQotICAg
ICAgICBtX2Nsb3NlZEVycm9yQ2FsbGJhY2sobV9zdHJlYW0pOwotCi0gICAgLy8gRklYTUU6IElt
cGxlbWVudCByZWFkIHByb21pc2UgcmVqZWN0aW9uLgotCi0gICAgY2xlYW4oKTsKKyAgICBtX3N0
cmVhbS5jbG9zZWQoV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJl
Q2FsbGJhY2spKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuaAppbmRleCBkMTc2ZTk2YjhjZDg1ODEyOTQyZDYx
YzAwOTRiN2M1YTA5MjgwMDFhLi45N2Y4NGNkYWE3ZTc4NjFiMzZhZWRkMGVjZjZlZGYyMzZiYTM0
Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW1SZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW1SZWFkZXIuaApAQCAtNDgsMzMgKzQ4LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IC8vIFNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkZXItY2xhc3MgZm9y
IG1vcmUgaW5mb3JtYXRpb24uCiBjbGFzcyBSZWFkYWJsZVN0cmVhbVJlYWRlciB7CiBwdWJsaWM6
Ci0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFJlYWRhYmxlLAotICAgICAgICBDbG9z
ZWQsCi0gICAgICAgIEVycm9yZWQKLSAgICB9OwotCiAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXIo
UmVhZGFibGVTdHJlYW0mIHN0cmVhbSkKICAgICAgICAgOiBtX3N0cmVhbShzdHJlYW0pIHsgfTsK
IAotICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IENsb3NlZFN1Y2Nlc3NDYWxsYmFj
azsKLSAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWFkYWJsZVN0cmVhbSYpPiBDbG9z
ZWRFcnJvckNhbGxiYWNrOwotICAgIHZvaWQgY2xvc2VkKENsb3NlZFN1Y2Nlc3NDYWxsYmFjaywg
Q2xvc2VkRXJyb3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGNoYW5nZVN0YXRlVG9DbG9zZWQoKTsK
LSAgICB2b2lkIGNoYW5nZVN0YXRlVG9FcnJvcmVkKCk7CisgICAgdm9pZCBjbG9zZWQoUmVhZGFi
bGVTdHJlYW06OkNsb3NlZFN1Y2Nlc3NDYWxsYmFjaywgUmVhZGFibGVTdHJlYW06OkNsb3NlZEZh
aWx1cmVDYWxsYmFjayk7CiAKICAgICB2b2lkIHJlZigpIHsgbV9zdHJlYW0ucmVmKCk7IH0KICAg
ICB2b2lkIGRlcmVmKCkgeyBtX3N0cmVhbS5kZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjbGVhbigpOwotCiAgICAgUmVhZGFibGVTdHJlYW0mIG1fc3RyZWFtOwotICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6UmVhZGFibGUgfTsKLQotICAgIENsb3NlZFN1Y2Nlc3NDYWxsYmFjayBt
X2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjazsKLSAgICBDbG9zZWRFcnJvckNhbGxiYWNrIG1fY2xvc2Vk
RXJyb3JDYWxsYmFjazsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ3VzdG9tLmNwcAppbmRl
eCBiYTk0MjM2NzcyODVmZWMwNGM3NTVkZTZmMzUyM2M5OTUxYTgyYzI0Li40YjVkNzg4YWRjNDZm
NjNlZDhkNTg3MjJhZTU4ZTZmZjAyMjMyMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDdXN0b20u
Y3BwCkBAIC00NSw3ICs0NSw3IEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI6
OmNsb3NlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWFkYWJsZUpTU3RyZWFtJiBzdHJlYW0g
PSBpbXBsKCkuc3RyZWFtKCk7CiAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSBvZiBkcmFp
bmluZy4KLSAgICBpZiAoc3RyZWFtLmludGVybmFsU3RhdGUoKSAhPSBSZWFkYWJsZVN0cmVhbTo6
U3RhdGU6OlJlYWRhYmxlKQorICAgIGlmICghc3RyZWFtLmlzUmVhZGFibGUoKSkKICAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiQ2FsbGluZyBjbG9zZSBvbiBhIHN0cmVhbSB3aGljaCBpcyBub3Qg
cmVhZGFibGUiKSkpOwogICAgIHN0cmVhbS5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02MCw3ICs2MCw3IEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0
cmVhbUNvbnRyb2xsZXI6OmVucXVldWUoRXhlY1N0YXRlKikKIEpTVmFsdWUgSlNSZWFkYWJsZVN0
cmVhbUNvbnRyb2xsZXI6OmVycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWFkYWJsZUpT
U3RyZWFtJiBzdHJlYW0gPSBpbXBsKCkuc3RyZWFtKCk7Ci0gICAgaWYgKHN0cmVhbS5pbnRlcm5h
bFN0YXRlKCkgIT0gUmVhZGFibGVTdHJlYW06OlN0YXRlOjpSZWFkYWJsZSkKKyAgICBpZiAoIXN0
cmVhbS5pc1JlYWRhYmxlKCkpCiAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNhbGxpbmcgZXJy
b3Igb24gYSBzdHJlYW0gd2hpY2ggaXMgbm90IHJlYWRhYmxlIikpKTsKICAgICBzdHJlYW0uc3Rv
cmVFcnJvcigqZXhlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0
b20uY3BwCmluZGV4IGI3YTFmMTllZWRlMTBkZmQ2ZTA3ODkxZWM5YTE4ZTRiZDYwMmY2OTAuLmQ2
ZWNhYzI0MTIwNmUxMjJjOGNkYmQyOWM4YzQ5ZGFhNTcxZGE2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0
b20uY3BwCkBAIC03NSw4ICs3NSw4IEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbVJlYWRlcjo6
Y2xvc2VkKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9
IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfTsKLSAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXShSZWFk
YWJsZVN0cmVhbSYgc3RyZWFtKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3Qoc3Ry
ZWFtLmVycm9yKCkpOworICAgIGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0
IEpTVmFsdWUmIHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgd3JhcHBlci5yZWplY3QodmFsdWUp
OwogICAgIH07CiAKICAgICBpbXBsKCkuY2xvc2VkKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2sp
LCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253389</attachid>
            <date>2015-05-19 12:34:52 -0700</date>
            <delta_ts>2015-05-19 13:02:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-145110-20150519213448.patch</filename>
            <type>text/plain</type>
            <size>11866</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM0Nzk1ZWVjNTBlZmUw
ZGE5MGJkNzAxYTBmZWQyYzZiNTc2ZTk4ZC4uYzI3MDExZDlkNDU2YzUyZDdhYzhlZWY4OWQ4MGRk
Mjg1MzNmNDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA1LTE5ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IE1pZ3JhdGUgY2xvc2VkIHByb21pc2UgaGFuZGxpbmcgZnJvbSBSZWFkYWJsZVN0cmVhbVJlYWRl
ciB0byBSZWFkYWJsZVN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgUmVhZGVyIGlzIG5vdyBqdXN0IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgdGhlIHJl
YWRlciBsb2NraW5nIHRoZSBzdHJlYW0gb3Igbm90LgorICAgICAgICBJZiBub3QgYW5kIHN0cmVh
bSBpcyByZWFkYWJsZSwgaXQgcmVzb2x2ZXMgdGhlIGNsb3NlZCBwcm9taXNlLgorICAgICAgICBP
dGhlcndpc2UsIGl0IGRlbGVnYXRlcyB0aGUgcHJvbWlzZSBoYW5kbGluZyB0byBpdHMgc3RyZWFt
LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0
cmVhbTo6Y2xlYW5DYWxsYmFja3MpOiBDbGVhbmluZyBvZiBjbG9zZWQgY2FsbGJhY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOiBSZXNv
bHZpbmcgY2xvc2VkIHByb21pc2UgaWYgc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVT
dHJlYW06OmNoYW5nZVN0YXRlVG9FcnJvcmVkKTogUmVqZWN0aW5nIGNsb3NlZCBwcm9taXNlIGlm
IHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIpOiBSZW1v
dmVkIHJlYWRlciBzdGF0ZSBub3RpZmljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZVN0cmVhbTo6Y2xvc2VkKTogTW92ZWQgZnJvbSByZWFkZXIgdG8gc3RyZWFtLgorICAgICAgICAq
IE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW06OnJlYWRlcik6IEFkZGVkIHRvIGFsbG93IHJlYWRlciB0byBjaGVjayB3aGV0
aGVyIGl0IGlzIGxvY2tpbmcgaXRzIHN0cmVhbSBvciBub3QuCisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZVN0cmVhbTo6aXNSZWFkYWJsZSk6IEFkZGVkIGFzIGFuIGltcHJvdmVtZW50IG92ZXIg
aW50ZXJuYWxTdGF0ZSB3aGljaCBpcyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW06OmludGVybmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW1SZWFkZXIuaDogUmVtb3ZlZCBzdGF0ZSBhbmQgY2xvc2VkIHByb21pc2UgY2FsbGJh
Y2tzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjpj
bG9zZSk6IFJlZmFjdG9yaW5nIG9mIGludGVybmFsU3RhdGUgdG8gaXNSZWFkYWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyOjplcnJvcik6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKTogUmVmYWN0
b3JpbmcgdG8gaGF2ZSB0aGUgcHJvbWlzZSB2YWx1ZSBhcyBjYWxsYmFjayBwYXJhbWV0ZXIuCisK
IDIwMTUtMDUtMTcgIE1hbnVlbCBSZWdvIENhc2Fzbm92YXMgIDxyZWdvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gQWRkIHNjcm9sbGJhciB3aWR0aCBpbiBpbnRyaW5z
aWMgbG9naWNhbCB3aWR0aHMgY29tcHV0YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCmluZGV4IDgyOWQ0MDhmYzFjYzI4NzE2MDlm
MTZjZmNhNGY4OTc5OWM1YTcyZjEuLmJlYzNkMzAwNzcwNjU1NGUzYjhkYWE5YzBhNjJhYWIyY2Y4
ODQ3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbVJlYWRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsMTUgKzU4LDI1IEBAIFJlYWRhYmxlU3RyZWFtOjp+
UmVhZGFibGVTdHJlYW0oKQogI2VuZGlmCiB9CiAKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNsZWFy
Q2FsbGJhY2tzKCkKK3sKKyAgICBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayA9IG51bGxwdHI7Cisg
ICAgbV9jbG9zZWRGYWlsdXJlQ2FsbGJhY2sgPSBudWxscHRyOworfQorCiB2b2lkIFJlYWRhYmxl
U3RyZWFtOjpjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0
ZTo6UmVhZGFibGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3Nl
ZDsKLSAgICBpZiAoIW1fcmVhZGVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZWFkZXItPmNo
YW5nZVN0YXRlVG9DbG9zZWQoKTsKLSAgICBtX3JlbGVhc2VkUmVhZGVycy5hcHBlbmQoV1RGOjpt
b3ZlKG1fcmVhZGVyKSk7CisKKyAgICBpZiAobV9yZWFkZXIpCisgICAgICAgIG1fcmVsZWFzZWRS
ZWFkZXJzLmFwcGVuZChXVEY6Om1vdmUobV9yZWFkZXIpKTsKKworICAgIGlmIChtX2Nsb3NlZFN1
Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2soKTsKKworICAg
IGNsZWFyQ2FsbGJhY2tzKCk7CiB9CiAKIHZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRl
VG9FcnJvcmVkKCkKQEAgLTczLDEwICs4NCwxNCBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFu
Z2VTdGF0ZVRvRXJyb3JlZCgpCiAgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlJlYWRhYmxlKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpFcnJvcmVkOwotICAgIGlmICgh
bV9yZWFkZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3JlYWRlci0+Y2hhbmdlU3RhdGVUb0Vy
cm9yZWQoKTsKLSAgICBtX3JlbGVhc2VkUmVhZGVycy5hcHBlbmQoV1RGOjptb3ZlKG1fcmVhZGVy
KSk7CisKKyAgICBpZiAobV9yZWFkZXIpCisgICAgICAgIG1fcmVsZWFzZWRSZWFkZXJzLmFwcGVu
ZChXVEY6Om1vdmUobV9yZWFkZXIpKTsKKworICAgIGlmIChtX2Nsb3NlZEZhaWx1cmVDYWxsYmFj
aykKKyAgICAgICAgbV9jbG9zZWRGYWlsdXJlQ2FsbGJhY2soZXJyb3IoKSk7CisKKyAgICBjbGVh
ckNhbGxiYWNrcygpOwogfQogCiBSZWFkYWJsZVN0cmVhbVJlYWRlciYgUmVhZGFibGVTdHJlYW06
OmdldFJlYWRlcigpCkBAIC05MSwxNSArMTA2LDI0IEBAIFJlYWRhYmxlU3RyZWFtUmVhZGVyJiBS
ZWFkYWJsZVN0cmVhbTo6Z2V0UmVhZGVyKCkKICAgICAgICAgcmV0dXJuIHJlYWRlcjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKQotICAgICAgICByZWFkZXIuY2hh
bmdlU3RhdGVUb0Nsb3NlZCgpOwotICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkVycm9y
ZWQpCi0gICAgICAgIHJlYWRlci5jaGFuZ2VTdGF0ZVRvRXJyb3JlZCgpOwogICAgIG1fcmVsZWFz
ZWRSZWFkZXJzLmFwcGVuZChXVEY6Om1vdmUobmV3UmVhZGVyKSk7Ci0KICAgICByZXR1cm4gcmVh
ZGVyOwogfQogCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoQ2xvc2VkU3VjY2Vzc0NhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjaywgQ2xvc2VkRmFpbHVyZUNhbGxiYWNrIGZhaWx1cmVDYWxsYmFj
aykKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKSB7CisgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpFcnJvcmVkKSB7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjayhlcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayA9IFdURjo6
bW92ZShzdWNjZXNzQ2FsbGJhY2spOworICAgIG1fY2xvc2VkRmFpbHVyZUNhbGxiYWNrID0gV1RG
Ojptb3ZlKGZhaWx1cmVDYWxsYmFjayk7Cit9CisKIHZvaWQgUmVhZGFibGVTdHJlYW06OnN0YXJ0
KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaAppbmRleCBiMWJkMDYwZTU0YThmYjMzZTNjYTU1MjZi
YWE2NjQ0NTkzNWY3ODM4Li5jODc0MzY1NzVjMzRlY2ZhN2MwYWEwNjkzM2I2NGMzOWMxZjVkMDkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJl
YW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0u
aApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZWFkYWJsZVN0cmVh
bSgpOwogCiAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXImIGdldFJlYWRlcigpOworICAgIGNvbnN0
IFJlYWRhYmxlU3RyZWFtUmVhZGVyKiByZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5n
ZXQoKTsgfQogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiAhIW1fcmVhZGVyOyB9
CiAKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBlcnJvcigpID0gMDsKKyAgICBib29sIGlzUmVh
ZGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpSZWFkYWJsZTsgfQogCi0g
ICAgU3RhdGUgaW50ZXJuYWxTdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2aXJ0dWFs
IEpTQzo6SlNWYWx1ZSBlcnJvcigpID0gMDsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lk
IGNoYW5nZVN0YXRlVG9DbG9zZWQoKTsKQEAgLTc0LDYgKzc1LDEwIEBAIHB1YmxpYzoKIAogICAg
IFJlYWRhYmxlU3RyZWFtU291cmNlJiBzb3VyY2UoKSB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsg
fQogCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gQ2xvc2VkU3VjY2Vzc0NhbGxi
YWNrOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKEpTQzo6SlNWYWx1ZSk+IENsb3Nl
ZEZhaWx1cmVDYWxsYmFjazsKKyAgICB2b2lkIGNsb3NlZChDbG9zZWRTdWNjZXNzQ2FsbGJhY2ss
IENsb3NlZEZhaWx1cmVDYWxsYmFjayk7CisKIHByb3RlY3RlZDoKICAgICBSZWFkYWJsZVN0cmVh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmKTsK
IApAQCAtODIsOSArODcsMTQgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBjYW5TdXNwZW5kRm9yUGFnZUNh
Y2hlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIGNsZWFyQ2FsbGJhY2tzKCk7CisKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVhZGFibGVTdHJlYW1SZWFkZXI+IG1fcmVhZGVyOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UmVhZGFibGVTdHJlYW1SZWFkZXI+PiBtX3JlbGVhc2VkUmVh
ZGVyczsKIAorICAgIENsb3NlZFN1Y2Nlc3NDYWxsYmFjayBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFj
azsKKyAgICBDbG9zZWRGYWlsdXJlQ2FsbGJhY2sgbV9jbG9zZWRGYWlsdXJlQ2FsbGJhY2s7CisK
ICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlJlYWRhYmxlIH07CiAgICAgUmVmPFJlYWRhYmxl
U3RyZWFtU291cmNlPiBtX3NvdXJjZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcAppbmRleCAxZDc5YTRiMTcy
YjgxM2E0ZGJjMGMxZDU1MjkzZjliOWVkNWMzOTcxLi40NDI4ZGFiNGQ3NTI5MWFjY2U0ODZiYjFl
YzhmNWM0YmEwZGVjODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAKQEAgLTMyLDU0ICszMiwxNSBAQAogCiAj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbGVhbigp
Cit2b2lkIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbG9zZWQoUmVhZGFibGVTdHJlYW06OkNsb3Nl
ZFN1Y2Nlc3NDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIFJlYWRhYmxlU3RyZWFtOjpDbG9zZWRG
YWlsdXJlQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQogewotICAgIG1fY2xvc2VkU3VjY2Vzc0Nh
bGxiYWNrID0gbnVsbHB0cjsKLSAgICBtX2Nsb3NlZEVycm9yQ2FsbGJhY2sgPSBudWxscHRyOwot
fQotCi12b2lkIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbG9zZWQoQ2xvc2VkU3VjY2Vzc0NhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjaywgQ2xvc2VkRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKQot
ewotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpIHsKKyAgICBpZiAobV9zdHJlYW0u
aXNSZWFkYWJsZSgpICYmIG1fc3RyZWFtLnJlYWRlcigpICE9IHRoaXMpIHsKICAgICAgICAgc3Vj
Y2Vzc0NhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OkVycm9yZWQpIHsKLSAgICAgICAgZXJyb3JDYWxsYmFjayhtX3N0cmVhbSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2sgPSBXVEY6
Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBtX2Nsb3NlZEVycm9yQ2FsbGJhY2sgPSBXVEY6
Om1vdmUoZXJyb3JDYWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNo
YW5nZVN0YXRlVG9DbG9zZWQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpSZWFk
YWJsZSk7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlOjpDbG9zZWQ7Ci0KLSAgICBpZiAobV9jbG9zZWRT
dWNjZXNzQ2FsbGJhY2spCi0gICAgICAgIG1fY2xvc2VkU3VjY2Vzc0NhbGxiYWNrKCk7Ci0KLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHJlYWQgcHJvbWlzZSBmdWxmaWxsaW5nLgotCi0gICAgY2xl
YW4oKTsKLX0KLQotdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2hhbmdlU3RhdGVUb0Vycm9y
ZWQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpSZWFkYWJsZSk7Ci0gICAgbV9z
dGF0ZSA9IFN0YXRlOjpFcnJvcmVkOwotCi0gICAgaWYgKG1fY2xvc2VkRXJyb3JDYWxsYmFjaykK
LSAgICAgICAgbV9jbG9zZWRFcnJvckNhbGxiYWNrKG1fc3RyZWFtKTsKLQotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgcmVhZCBwcm9taXNlIHJlamVjdGlvbi4KLQotICAgIGNsZWFuKCk7CisgICAg
bV9zdHJlYW0uY2xvc2VkKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFp
bHVyZUNhbGxiYWNrKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKaW5kZXggZDE3NmU5NmI4Y2Q4NTgxMjk0
MmQ2MWMwMDk0YjdjNWEwOTI4MDAxYS4uNGZmNDJkMjE0MWIzYjVjY2JkZGQ1M2NkYzNhZDU1M2Iy
YTgyNjdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtUmVhZGVyLmgKQEAgLTQ4LDMzICs0OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBTZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGVyLWNsYXNz
IGZvciBtb3JlIGluZm9ybWF0aW9uLgogY2xhc3MgUmVhZGFibGVTdHJlYW1SZWFkZXIgewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgU3RhdGUgewotICAgICAgICBSZWFkYWJsZSwKLSAgICAgICAg
Q2xvc2VkLAotICAgICAgICBFcnJvcmVkCi0gICAgfTsKLQogICAgIFJlYWRhYmxlU3RyZWFtUmVh
ZGVyKFJlYWRhYmxlU3RyZWFtJiBzdHJlYW0pCi0gICAgICAgIDogbV9zdHJlYW0oc3RyZWFtKSB7
IH07Ci0KLSAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBDbG9zZWRTdWNjZXNzQ2Fs
bGJhY2s7Ci0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVhZGFibGVTdHJlYW0mKT4g
Q2xvc2VkRXJyb3JDYWxsYmFjazsKLSAgICB2b2lkIGNsb3NlZChDbG9zZWRTdWNjZXNzQ2FsbGJh
Y2ssIENsb3NlZEVycm9yQ2FsbGJhY2spOworICAgICAgICA6IG1fc3RyZWFtKHN0cmVhbSkgeyB9
CiAKLSAgICB2b2lkIGNoYW5nZVN0YXRlVG9DbG9zZWQoKTsKLSAgICB2b2lkIGNoYW5nZVN0YXRl
VG9FcnJvcmVkKCk7CisgICAgdm9pZCBjbG9zZWQoUmVhZGFibGVTdHJlYW06OkNsb3NlZFN1Y2Nl
c3NDYWxsYmFjaywgUmVhZGFibGVTdHJlYW06OkNsb3NlZEZhaWx1cmVDYWxsYmFjayk7CiAKICAg
ICB2b2lkIHJlZigpIHsgbV9zdHJlYW0ucmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBtX3N0
cmVhbS5kZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbGVhbigpOwotCiAgICAgUmVh
ZGFibGVTdHJlYW0mIG1fc3RyZWFtOwotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6UmVhZGFi
bGUgfTsKLQotICAgIENsb3NlZFN1Y2Nlc3NDYWxsYmFjayBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFj
azsKLSAgICBDbG9zZWRFcnJvckNhbGxiYWNrIG1fY2xvc2VkRXJyb3JDYWxsYmFjazsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJl
YW1Db250cm9sbGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVh
ZGFibGVTdHJlYW1Db250cm9sbGVyQ3VzdG9tLmNwcAppbmRleCBiYTk0MjM2NzcyODVmZWMwNGM3
NTVkZTZmMzUyM2M5OTUxYTgyYzI0Li40YjVkNzg4YWRjNDZmNjNlZDhkNTg3MjJhZTU4ZTZmZjAy
MjMyMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDdXN0b20uY3BwCkBAIC00NSw3ICs0NSw3IEBA
IEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI6OmNsb3NlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBSZWFkYWJsZUpTU3RyZWFtJiBzdHJlYW0gPSBpbXBsKCkuc3RyZWFtKCk7CiAg
ICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSBvZiBkcmFpbmluZy4KLSAgICBpZiAoc3RyZWFt
LmludGVybmFsU3RhdGUoKSAhPSBSZWFkYWJsZVN0cmVhbTo6U3RhdGU6OlJlYWRhYmxlKQorICAg
IGlmICghc3RyZWFtLmlzUmVhZGFibGUoKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ2Fs
bGluZyBjbG9zZSBvbiBhIHN0cmVhbSB3aGljaCBpcyBub3QgcmVhZGFibGUiKSkpOwogICAgIHN0
cmVhbS5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBA
IC02MCw3ICs2MCw3IEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI6OmVucXVl
dWUoRXhlY1N0YXRlKikKIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI6OmVycm9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWFkYWJsZUpTU3RyZWFtJiBzdHJlYW0gPSBpbXBs
KCkuc3RyZWFtKCk7Ci0gICAgaWYgKHN0cmVhbS5pbnRlcm5hbFN0YXRlKCkgIT0gUmVhZGFibGVT
dHJlYW06OlN0YXRlOjpSZWFkYWJsZSkKKyAgICBpZiAoIXN0cmVhbS5pc1JlYWRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNhbGxpbmcgZXJyb3Igb24gYSBzdHJlYW0gd2hpY2gg
aXMgbm90IHJlYWRhYmxlIikpKTsKICAgICBzdHJlYW0uc3RvcmVFcnJvcigqZXhlYyk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCmluZGV4IGI3YTFmMTll
ZWRlMTBkZmQ2ZTA3ODkxZWM5YTE4ZTRiZDYwMmY2OTAuLmQ2ZWNhYzI0MTIwNmUxMjJjOGNkYmQy
OWM4YzQ5ZGFhNTcxZGE2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCkBAIC03NSw4ICs3NSw4
IEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUg
ewogICAgICAgICB3cmFwcGVyLnJlc29sdmUoanNVbmRlZmluZWQoKSk7CiAgICAgfTsKLSAgICBh
dXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXShSZWFkYWJsZVN0cmVhbSYgc3RyZWFtKSBt
dXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3Qoc3RyZWFtLmVycm9yKCkpOworICAgIGF1
dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IEpTVmFsdWUmIHZhbHVlKSBtdXRh
YmxlIHsKKyAgICAgICAgd3JhcHBlci5yZWplY3QodmFsdWUpOwogICAgIH07CiAKICAgICBpbXBs
KCkuY2xvc2VkKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNh
bGxiYWNrKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>